Skip to content

Commit 3459c51

Browse files
committed
tests for confirmation timeout
1 parent 5e72c87 commit 3459c51

File tree

8 files changed

+63
-5
lines changed

8 files changed

+63
-5
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
2+
Feature: Confirmation timeout
3+
4+
Background: Given the form "confirmation-timeout" exists
5+
6+
Scenario:
7+
And I navigate to the confirmation-timeout form
8+
Then I continue
9+
Then I continue
10+
Then I see "Application Complete"
11+
And I wait "10000" milliseconds
12+
And I navigate to "confirmation-timeout/status"
13+
Then I don't see "Application complete"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { When } from "@badeball/cypress-cucumber-preprocessor";
2+
3+
When("I upload the file {string}", (filename) => {
4+
cy.get("input[type=file]").attachFile(filename);
5+
cy.findByRole("button", { name: /continue/i }).click();
6+
});
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"metadata": {},
3+
"startPage": "/confirmation-timeout",
4+
"confirmationTimeout": 10,
5+
"pages": [
6+
{
7+
"title": "Confirmation Timeout",
8+
"path": "/confirmation-timeout",
9+
"components": [
10+
],
11+
"next": [{ "path": "/summary" }]
12+
},
13+
{
14+
"title": "Summary",
15+
"path": "/summary",
16+
"controller": "./pages/summary.js",
17+
"components": [],
18+
"next": []
19+
}
20+
],
21+
"lists": [],
22+
"sections": [],
23+
"conditions": [],
24+
"fees": [],
25+
"outputs": [],
26+
"version": 2,
27+
"skipSummary": false,
28+
"feeOptions": {}
29+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { When } from "@badeball/cypress-cucumber-preprocessor";
2+
3+
When("I wait {int}", (milliseconds) => {
4+
cy.wait(milliseconds);
5+
});

model/src/data-model/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,4 +194,5 @@ export type FormDefinition = {
194194
paymentReferenceFormat?: string;
195195
feeOptions: FeeOptions;
196196
exitOptions: ExitOptions;
197+
confirmationSessionTimeout: number | undefined;
197198
};

model/src/schema/schema.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ export const Schema = joi
328328
feeOptions: feeOptionSchema,
329329
exitOptions: exitSchema.optional(),
330330
showFilenamesOnSummaryPage: joi.boolean().optional(),
331+
confirmationSessionTimeout: joi.number().optional()
331332
});
332333

333334
/**

runner/src/server/plugins/applicationStatus/index.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { HapiRequest, HapiResponseToolkit } from "../../types";
33
import { retryPay } from "./retryPay";
44
import { handleUserWithConfirmationViewModel } from "./handleUserWithConfirmationViewModel";
55
import { checkUserCompletedSummary } from "./checkUserCompletedSummary";
6+
import config from "../../config";
67

78
import Joi from "joi";
89
import {
@@ -71,9 +72,10 @@ const index = {
7172
newReference
7273
);
7374

74-
await cacheService.setConfirmationState(request, {
75-
confirmation: viewModel,
76-
});
75+
const confirmationTimeout = form.def.confirmationTimeout ?? config.confirmationSessionTimeout;
76+
77+
await cacheService.setConfirmationState(request, { confirmation: viewModel }, confirmationTimeout);
78+
7779
await cacheService.clearState(request);
7880

7981
return h.view("confirmation", viewModel);

runner/src/server/services/cacheService.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,10 @@ export class CacheService {
7373
return await this.cache.get(key);
7474
}
7575

76-
async setConfirmationState(request: HapiRequest, viewModel) {
76+
async setConfirmationState(request: HapiRequest, viewModel, ttl?: number) {
7777
const key = this.Key(request, ADDITIONAL_IDENTIFIER.Confirmation);
78-
return this.cache.set(key, viewModel, confirmationSessionTimeout);
78+
const timeout = ttl ?? confirmationSessionTimeout;
79+
return this.cache.set(key, viewModel, timeout);
7980
}
8081

8182
async createSession(

0 commit comments

Comments
 (0)