@@ -2,7 +2,8 @@ const { test, expect } = require('@playwright/test');
22
33test ( 'homepage loads and shows title' , async ( { page } ) => {
44 await page . goto ( 'http://localhost:5000' ) ;
5- await expect ( page ) . toHaveTitle ( / C o l o r b l i n d n e s s C h e c k e r D e m o / ) ;
5+ await expect ( page ) . toHaveTitle ( / C o l o r V i s i o n T e s t / ) ;
6+ await expect ( page . locator ( 'h1' ) ) . toContainText ( 'Color Vision Diagnostic Test' ) ;
67} ) ;
78
89test ( 'health endpoint returns ok' , async ( { request } ) => {
@@ -11,37 +12,62 @@ test('health endpoint returns ok', async ({ request }) => {
1112 expect ( await response . json ( ) ) . toEqual ( { status : 'ok' } ) ;
1213} ) ;
1314
14- test ( 'red vs green returns false' , async ( { request } ) => {
15- const response = await request . post ( 'http://localhost:5000/check' , {
16- data : { color1 : '#FF0000' , color2 : '#00FF00' }
17- } ) ;
18- expect ( response . status ( ) ) . toBe ( 200 ) ;
19- expect ( await response . json ( ) ) . toEqual ( { distinguishable : false } ) ;
15+ test ( 'user can submit answers and complete the test' , async ( { page } ) => {
16+ await page . goto ( 'http://localhost:5000' ) ;
17+
18+ // Get total number of plates from the progress indicator
19+ const totalText = await page . locator ( 'p' ) . first ( ) . textContent ( ) ;
20+ const totalMatch = totalText . match ( / o f ( \d + ) / ) ;
21+ const totalPlates = totalMatch ? parseInt ( totalMatch [ 1 ] ) : 10 ;
22+
23+ // Submit answers for all plates
24+ for ( let i = 0 ; i < totalPlates ; i ++ ) {
25+ // Enter a guess (using 0 as default)
26+ await page . fill ( 'input[name="answer"]' , '0' ) ;
27+ await page . click ( 'button[type="submit"]' ) ;
28+ await page . waitForLoadState ( 'networkidle' ) ;
29+ }
30+
31+ // Should reach results page
32+ await expect ( page . locator ( 'h2' ) ) . toContainText ( 'Your Color Blind Test Result' ) ;
2033} ) ;
2134
22- test ( 'red vs blue returns true' , async ( { request } ) => {
23- const response = await request . post ( 'http://localhost:5000/check' , {
24- data : { color1 : '#FF0000' , color2 : '#0000FF' }
25- } ) ;
26- expect ( response . status ( ) ) . toBe ( 200 ) ;
27- expect ( await response . json ( ) ) . toEqual ( { distinguishable : true } ) ;
35+ test ( 'results page shows cone scores' , async ( { page } ) => {
36+ // Complete the test first
37+ await page . goto ( 'http://localhost:5000' ) ;
38+
39+ const totalText = await page . locator ( 'p' ) . first ( ) . textContent ( ) ;
40+ const totalMatch = totalText . match ( / o f ( \d + ) / ) ;
41+ const totalPlates = totalMatch ? parseInt ( totalMatch [ 1 ] ) : 10 ;
42+
43+ for ( let i = 0 ; i < totalPlates ; i ++ ) {
44+ await page . fill ( 'input[name="answer"]' , '0' ) ;
45+ await page . click ( 'button[type="submit"]' ) ;
46+ await page . waitForLoadState ( 'networkidle' ) ;
47+ }
48+
49+ // Verify results page has score elements
50+ await expect ( page . locator ( '.score' ) . first ( ) ) . toBeVisible ( ) ;
2851} ) ;
2952
30- test ( 'full user flow via web interface ' , async ( { page } ) => {
53+ test ( 'reset button clears results and restarts test ' , async ( { page } ) => {
3154 await page . goto ( 'http://localhost:5000' ) ;
3255
33- // Fill in colors
34- await page . fill ( '#color1' , '#FF0000' ) ;
35- await page . fill ( '#color2' , '#00FF00' ) ;
56+ // Complete the test
57+ const totalText = await page . locator ( 'p' ) . first ( ) . textContent ( ) ;
58+ const totalMatch = totalText . match ( / o f ( \d + ) / ) ;
59+ const totalPlates = totalMatch ? parseInt ( totalMatch [ 1 ] ) : 10 ;
3660
37- // Click check button
38- await page . click ( 'button' ) ;
61+ for ( let i = 0 ; i < totalPlates ; i ++ ) {
62+ await page . fill ( 'input[name="answer"]' , '0' ) ;
63+ await page . click ( 'button[type="submit"]' ) ;
64+ await page . waitForLoadState ( 'networkidle' ) ;
65+ }
3966
40- // Wait for result and verify
41- await expect ( page . locator ( '.result' ) ) . toContainText ( 'NOT DISTINGUISHABLE ') ;
67+ // Click reset button
68+ await page . click ( 'button[type="submit"] ') ;
4269
43- // Change to red and blue
44- await page . fill ( '#color2' , '#0000FF' ) ;
45- await page . click ( 'button' ) ;
46- await expect ( page . locator ( '.result' ) ) . toContainText ( 'DISTINGUISHABLE' ) ;
70+ // Should be back to first plate
71+ await expect ( page . locator ( 'h1' ) ) . toContainText ( 'Color Vision Diagnostic Test' ) ;
72+ await expect ( page . locator ( 'input[name="answer"]' ) ) . toBeVisible ( ) ;
4773} ) ;
0 commit comments