@@ -132,4 +132,51 @@ test.describe('Giftaid Update form validation @sanity @nightly-sanity', () => {
132132
133133 await expect ( page . locator ( selectors . success . heading ) ) . toHaveText ( 'Thank you, test!' ) ;
134134 } ) ;
135+
136+ test ( 'Postcode validation and form submission' , async ( { page } ) => {
137+ // Define postcodes and expected error messages
138+ const postcodes = [
139+ { input : 'S E 1 7 T P' , error : 'Please enter a valid UK postcode, using a space. For non-UK addresses, please use manual entry below.' } ,
140+ { input : 'SE$%TP' , error : 'Please enter a valid UK postcode, using a space. For non-UK addresses, please use manual entry below.' } ,
141+ { input : 'cro 7tp' , error : 'Please enter a valid UK postcode, using a space. For non-UK addresses, please use manual entry below.' }
142+ ] ;
143+
144+ // Test for each invalid postcode
145+ for ( const postcode of postcodes ) {
146+ await page . fill ( selectors . formFields . postcode , '' ) ;
147+ await page . type ( selectors . formFields . postcode , postcode . input ) ;
148+ await expect ( page . locator ( selectors . errorMessages . postcode ) ) . toBeVisible ( ) ;
149+ await expect ( page . locator ( selectors . errorMessages . postcode ) ) . toHaveText ( postcode . error ) ;
150+ }
151+
152+ // Test for a valid postcode and subsequent form submission
153+ await page . fill ( selectors . formFields . postcode , 'SE1 7TP' ) ;
154+ await page . click ( selectors . formFields . postcodeLookup ) ;
155+
156+ // Checking whether address selection is available or if manual entry is needed
157+ if ( await page . locator ( selectors . address . addressSelect ) . isVisible ( ) ) {
158+ // Select the first address if available
159+ const options = await page . $$eval ( selectors . address . addressSelectOptions , options => options . map ( option => option . value ) ) ;
160+ await page . selectOption ( selectors . address . addressSelect , options [ 1 ] ) ;
161+ await page . click ( selectors . formFields . submitButton ) ;
162+ } else {
163+ // Fallback to manual address input if no selection is available
164+ await page . click ( selectors . address . manualAddressLink ) ;
165+ await page . fill ( selectors . address . address1 , 'COMIC RELIEF' ) ;
166+ await page . fill ( selectors . address . address2 , 'CAMELFORD HOUSE 87-90' ) ;
167+ await page . fill ( selectors . address . address3 , 'ALBERT EMBANKMENT' ) ;
168+ await page . fill ( selectors . address . town , 'LONDON' ) ;
169+ await page . click ( selectors . formFields . submitButton ) ;
170+ }
171+
172+ await page . locator ( selectors . formFields . firstName ) . fill ( 'test' ) ;
173+ await page . locator ( selectors . formFields . lastName ) . fill ( chance . last ( ) ) ;
174+ await page . locator ( selectors . marketingPreferences . fields . email ) . fill ( `giftaid-update-staging-${ chance . email ( ) } ` ) ;
175+ await page . fill ( selectors . formFields . postcode , 'SE1 7TP' ) ;
176+ await page . click ( selectors . giftAidClaimChoice . yes ) ; // Select yes for declaration
177+ await page . click ( selectors . formFields . submitButton ) ; // Submit the form
178+
179+ await expect ( page . locator ( selectors . success . heading ) ) . toHaveText ( 'Thank you, test!' ) ;
180+ await page . close ( ) ;
181+ } ) ;
135182} ) ;
0 commit comments