@@ -2,8 +2,15 @@ import { test, expect } from '@playwright/test';
22import { TemplateMgmtCreatePage } from '../pages/template-mgmt-create-page' ;
33import { Session , TemplateType } from '../helpers/types' ;
44import SessionStorageHelper from '../helpers/session-storage-helper' ;
5+ import {
6+ assertFooterLinks ,
7+ assertGoBackLink ,
8+ assertLoginLink ,
9+ assertNotifyBannerLink ,
10+ assertSkipToMainContent ,
11+ } from './template-mgmt-common.steps' ;
512
6- export const nhsAppNoTemplateSessionData : Session = {
13+ export const emptySessionData : Session = {
714 __typename : 'SessionStorage' ,
815 id : '3d98b0c4-6666-0000-1111-95eb27590000' ,
916 createdAt : '2024-09-19T23:36:20.815Z' ,
@@ -13,9 +20,20 @@ export const nhsAppNoTemplateSessionData: Session = {
1320 nhsAppTemplateMessage : '' ,
1421} ;
1522
23+ export const emptySessionForTemplateCreation : Session = {
24+ __typename : 'SessionStorage' ,
25+ id : '4d98b0c4-7777-0000-1111-95eb27590011' ,
26+ createdAt : '2024-09-19T23:36:20.815Z' ,
27+ updatedAt : '2024-09-19T23:36:20.815Z' ,
28+ templateType : TemplateType . NHS_APP ,
29+ nhsAppTemplateName : '' ,
30+ nhsAppTemplateMessage : '' ,
31+ } ;
32+
1633test . describe ( 'Create NHS App Template Page' , ( ) => {
1734 const sessionStorageHelper = new SessionStorageHelper ( [
18- nhsAppNoTemplateSessionData ,
35+ emptySessionData ,
36+ emptySessionForTemplateCreation ,
1937 ] ) ;
2038
2139 test . beforeAll ( async ( ) => {
@@ -32,15 +50,205 @@ test.describe('Create NHS App Template Page', () => {
3250 } ) => {
3351 const createTemplatePage = new TemplateMgmtCreatePage ( page ) ;
3452
35- await createTemplatePage . navigateToCreateNhsAppTemplatePage (
36- nhsAppNoTemplateSessionData . id
53+ await createTemplatePage . loadPage ( emptySessionData . id ) ;
54+
55+ await expect ( page ) . toHaveURL (
56+ `${ baseURL } /templates/create-nhs-app-template/${ emptySessionData . id } `
57+ ) ;
58+ expect ( await createTemplatePage . pageHeader . textContent ( ) ) . toBe (
59+ 'Create NHS App message template'
60+ ) ;
61+ } ) ;
62+
63+ test ( 'common page tests' , async ( { page, baseURL } ) => {
64+ const props = {
65+ page : new TemplateMgmtCreatePage ( page ) ,
66+ id : emptySessionData . id ,
67+ baseURL,
68+ } ;
69+
70+ await assertSkipToMainContent ( props ) ;
71+ await assertNotifyBannerLink ( props ) ;
72+ await assertLoginLink ( props ) ;
73+ await assertFooterLinks ( props ) ;
74+ await assertGoBackLink ( {
75+ ...props ,
76+ expectedUrl : `templates/choose-a-template-type/${ emptySessionData . id } ` ,
77+ } ) ;
78+ } ) ;
79+
80+ test ( 'Validate error messages on the create NHS App message template page with no template name or body' , async ( {
81+ page,
82+ baseURL,
83+ } ) => {
84+ const createTemplatePage = new TemplateMgmtCreatePage ( page ) ;
85+
86+ await createTemplatePage . loadPage ( emptySessionData . id ) ;
87+
88+ await expect ( page ) . toHaveURL (
89+ `${ baseURL } /templates/create-nhs-app-template/${ emptySessionData . id } `
90+ ) ;
91+ expect ( await createTemplatePage . pageHeader . textContent ( ) ) . toBe (
92+ 'Create NHS App message template'
93+ ) ;
94+ await createTemplatePage . clickContinueButton ( ) ;
95+ await expect ( page . locator ( '.nhsuk-error-summary' ) ) . toBeVisible ( ) ;
96+
97+ await expect (
98+ page . locator ( 'ul[class="nhsuk-list nhsuk-error-summary__list"] > li' )
99+ ) . toHaveText ( [ 'Enter a template name' , 'Enter a template message' ] ) ;
100+ } ) ;
101+
102+ test ( 'NHS App Message template populated and continued to the preview screen displayed' , async ( {
103+ page,
104+ baseURL,
105+ } ) => {
106+ const createTemplatePage = new TemplateMgmtCreatePage ( page ) ;
107+
108+ await createTemplatePage . loadPage ( emptySessionForTemplateCreation . id ) ;
109+
110+ await expect ( page ) . toHaveURL (
111+ `${ baseURL } /templates/create-nhs-app-template/${ emptySessionForTemplateCreation . id } `
112+ ) ;
113+ const templateName = 'NHS Testing 123' ;
114+ await page . locator ( '[id="nhsAppTemplateName"]' ) . fill ( templateName ) ;
115+ const templateMessage = 'Test Message box' ;
116+ await page . locator ( '[id="nhsAppTemplateMessage"]' ) . fill ( templateMessage ) ;
117+ await createTemplatePage . clickContinueButton ( ) ;
118+ await expect ( page . getByRole ( 'heading' , { level : 1 } ) ) . toContainText (
119+ 'NHS Testing 123'
120+ ) ;
121+ } ) ;
122+
123+ test ( 'Validate error messages on the create NHS App message template page with a no template message' , async ( {
124+ page,
125+ baseURL,
126+ } ) => {
127+ const createTemplatePage = new TemplateMgmtCreatePage ( page ) ;
128+
129+ await createTemplatePage . loadPage ( emptySessionData . id ) ;
130+
131+ await expect ( page ) . toHaveURL (
132+ `${ baseURL } /templates/create-nhs-app-template/${ emptySessionData . id } `
133+ ) ;
134+ expect ( await createTemplatePage . pageHeader . textContent ( ) ) . toBe (
135+ 'Create NHS App message template'
37136 ) ;
137+ const templateName = 'NHS Testing 123' ;
138+ await page . locator ( '[id="nhsAppTemplateName"]' ) . fill ( templateName ) ;
139+ await createTemplatePage . clickContinueButton ( ) ;
140+ await expect ( page . locator ( '.nhsuk-error-summary' ) ) . toBeVisible ( ) ;
141+ await expect (
142+ page . locator ( 'ul[class="nhsuk-list nhsuk-error-summary__list"] > li' )
143+ ) . toHaveText ( [ 'Enter a template message' ] ) ;
144+ } ) ;
145+
146+ test ( 'Validate error messages on the create NHS App message template page with no template name' , async ( {
147+ page,
148+ baseURL,
149+ } ) => {
150+ const createTemplatePage = new TemplateMgmtCreatePage ( page ) ;
151+
152+ await createTemplatePage . loadPage ( emptySessionData . id ) ;
38153
39154 await expect ( page ) . toHaveURL (
40- `${ baseURL } /templates/create-nhs-app-template/${ nhsAppNoTemplateSessionData . id } `
155+ `${ baseURL } /templates/create-nhs-app-template/${ emptySessionData . id } `
41156 ) ;
42157 expect ( await createTemplatePage . pageHeader . textContent ( ) ) . toBe (
43158 'Create NHS App message template'
44159 ) ;
160+ const templateMessage = 'Test Message box' ;
161+ await page . locator ( '[id="nhsAppTemplateMessage"]' ) . fill ( templateMessage ) ;
162+ await createTemplatePage . clickContinueButton ( ) ;
163+ await expect ( page . locator ( '.nhsuk-error-summary' ) ) . toBeVisible ( ) ;
164+
165+ await expect (
166+ page . locator ( 'ul[class="nhsuk-list nhsuk-error-summary__list"] > li' )
167+ ) . toHaveText ( [ 'Enter a template name' ] ) ;
168+ } ) ;
169+
170+ test ( '5000 words Entered in Template body and word count correctly displayed' , async ( {
171+ page,
172+ baseURL,
173+ } ) => {
174+ const createTemplatePage = new TemplateMgmtCreatePage ( page ) ;
175+
176+ await createTemplatePage . loadPage ( emptySessionForTemplateCreation . id ) ;
177+
178+ await expect ( page ) . toHaveURL (
179+ `${ baseURL } /templates/create-nhs-app-template/${ emptySessionForTemplateCreation . id } `
180+ ) ;
181+ await page . locator ( '[id="nhsAppTemplateName"]' ) . fill ( 'NHS Testing 123' ) ;
182+ await page
183+ . locator ( '[id="nhsAppTemplateMessage"]' )
184+ . fill ( 'T' . repeat ( 5000 ) . trim ( ) ) ;
185+ await expect ( page . getByText ( '5000 of 5000 characters' ) ) . toBeVisible ( ) ;
186+ } ) ;
187+
188+ test ( '5001 words attempted to be entered in Template body and only 5000 allowed' , async ( {
189+ page,
190+ baseURL,
191+ } ) => {
192+ const createTemplatePage = new TemplateMgmtCreatePage ( page ) ;
193+
194+ await createTemplatePage . loadPage ( emptySessionForTemplateCreation . id ) ;
195+
196+ await expect ( page ) . toHaveURL (
197+ `${ baseURL } /templates/create-nhs-app-template/${ emptySessionForTemplateCreation . id } `
198+ ) ;
199+
200+ await page . locator ( '[id="nhsAppTemplateName"]' ) . fill ( 'NHS Testing 123' ) ;
201+ await page
202+ . locator ( '[id="nhsAppTemplateMessage"]' )
203+ . fill ( 'T' . repeat ( 5001 ) . trim ( ) ) ;
204+ await expect ( page . getByText ( '5000 of 5000 characters' ) ) . toBeVisible ( ) ;
205+
206+ const messageContent = await page
207+ . getByRole ( 'textbox' , { name : 'Message' } )
208+ . textContent ( ) ;
209+
210+ expect ( messageContent ) . toHaveLength ( 5000 ) ;
211+ } ) ;
212+
213+ const detailsSections = [
214+ '[data-testid="personalisation-details"]' ,
215+ '[data-testid="lines-breaks-and-paragraphs-details"]' ,
216+ '[data-testid="headings-details"]' ,
217+ '[data-testid="bold-text-details"]' ,
218+ '[data-testid="link-and-url-details"]' ,
219+ '[data-testid="how-to-name-your-template"]' ,
220+ ] ;
221+
222+ for ( const section of detailsSections ) {
223+ test ( `personalisation mark expanding fields for ${ section } ` , async ( {
224+ page,
225+ baseURL,
226+ } ) => {
227+ const createTemplatePage = new TemplateMgmtCreatePage ( page ) ;
228+ await createTemplatePage . loadPage ( emptySessionData . id ) ;
229+ await expect ( page ) . toHaveURL (
230+ `${ baseURL } /templates/create-nhs-app-template/${ emptySessionData . id } `
231+ ) ;
232+
233+ await page . locator ( `${ section } > summary` ) . click ( ) ;
234+ await expect ( page . locator ( section ) ) . toHaveAttribute ( 'open' ) ;
235+ await expect ( page . locator ( `${ section } > div` ) ) . toBeVisible ( ) ;
236+
237+ await page . locator ( `${ section } > summary` ) . click ( ) ;
238+ await expect ( page . locator ( section ) ) . not . toHaveAttribute ( 'open' ) ;
239+ await expect ( page . locator ( `${ section } > div` ) ) . toBeHidden ( ) ;
240+ } ) ;
241+ }
242+
243+ test ( 'Invalid session ID test' , async ( { page, baseURL } ) => {
244+ const createTemplatePage = new TemplateMgmtCreatePage ( page ) ;
245+ const invalidSessionId = 'invalid-session-id' ;
246+ await createTemplatePage . loadPage ( invalidSessionId ) ;
247+ const errorMessage = page . locator ( '.nhsuk-heading-xl' ) ;
248+ await Promise . all ( [
249+ expect ( errorMessage ) . toBeVisible ( ) ,
250+ expect ( errorMessage ) . toHaveText ( 'Sorry, we could not find that page' ) ,
251+ expect ( page ) . toHaveURL ( `${ baseURL } /templates/invalid-session` ) ,
252+ ] ) ;
45253 } ) ;
46254} ) ;
0 commit comments