1010import { test , expect } from '@test/e2e/helpers'
1111import { BasePage } from '@test/e2e/helpers/pageObjectModels/BasePage'
1212
13+ type EnvironmentSnapshot = {
14+ isUnitTest : boolean
15+ isTest : boolean
16+ isE2eTest : boolean
17+ isDev : boolean
18+ isProd : boolean
19+ packageRelease : string
20+ privacyPolicyVersion : string
21+ }
22+
23+ const navigateToDiagnosticsPage = async ( page : BasePage ) => {
24+ await page . goto ( '/testing/environment-client' , { skipCookieDismiss : true } )
25+ await page . waitForLoadState ( 'networkidle' )
26+ await page . waitForFunction ( ( ) => Boolean ( window . environmentClientSnapshot ) )
27+ }
28+
29+ const getEnvironmentSnapshot = async ( page : BasePage ) : Promise < EnvironmentSnapshot > => {
30+ await navigateToDiagnosticsPage ( page )
31+ return await page . evaluate ( ( ) => {
32+ if ( ! window . environmentClientSnapshot ) {
33+ throw new Error ( 'Environment snapshot not initialized' )
34+ }
35+ return window . environmentClientSnapshot
36+ } )
37+ }
38+
1339test . describe ( 'Client Environment Detection Regression' , ( ) => {
1440 test ( 'isUnitTest should return false in browser context' , async ( { page : playwrightPage } ) => {
1541 const page = await BasePage . init ( playwrightPage )
16-
17- // Navigate to a page so the dev server context is available
18- await page . goto ( '/' )
19- await page . waitForLoadState ( 'networkidle' )
20-
21- // Execute the environment detection function in the browser context
22- // Import and call the function directly in the browser
23- const isUnitTestResult = await page . evaluate ( async ( ) => {
24- // @ts -expect-error - Browser-side import, path resolved by dev server at runtime
25- const { isUnitTest } = await import ( '/src/components/scripts/utils/environmentClient.ts' )
26- return isUnitTest ( )
27- } )
28-
29- // Assert that isUnitTest returns false when called in browser
30- expect ( isUnitTestResult ) . toBe ( false )
42+ const envSnapshot = await getEnvironmentSnapshot ( page )
43+ expect ( envSnapshot . isUnitTest ) . toBe ( false )
3144 } )
3245
3346 test ( 'isTest should return true in browser context' , async ( { page : playwrightPage } ) => {
3447 const page = await BasePage . init ( playwrightPage )
35-
36- await page . goto ( '/' )
37- await page . waitForLoadState ( 'networkidle' )
38-
39- const isTestResult = await page . evaluate ( async ( ) => {
40- // @ts -expect-error - Browser-side import, path resolved by dev server at runtime
41- const { isTest } = await import ( '/src/components/scripts/utils/environmentClient.ts' )
42- return isTest ( )
43- } )
44-
45- // Assert that isTest returns true in E2E test context
46- expect ( isTestResult ) . toBe ( true )
48+ const envSnapshot = await getEnvironmentSnapshot ( page )
49+ expect ( envSnapshot . isTest ) . toBe ( true )
4750 } )
4851
4952 test ( 'isE2eTest should return true in browser context' , async ( { page : playwrightPage } ) => {
5053 const page = await BasePage . init ( playwrightPage )
51-
52- await page . goto ( '/' )
53- await page . waitForLoadState ( 'networkidle' )
54-
55- const isE2eTestResult = await page . evaluate ( async ( ) => {
56- // @ts -expect-error - Browser-side import, path resolved by dev server at runtime
57- const { isE2eTest } = await import ( '/src/components/scripts/utils/environmentClient.ts' )
58- return isE2eTest ( )
59- } )
60-
61- // Assert that isE2eTest returns true when running in Playwright
62- expect ( isE2eTestResult ) . toBe ( true )
54+ const envSnapshot = await getEnvironmentSnapshot ( page )
55+ expect ( envSnapshot . isE2eTest ) . toBe ( true )
6356 } )
6457
6558 test ( 'isDev should return true in browser context' , async ( { page : playwrightPage } ) => {
6659 const page = await BasePage . init ( playwrightPage )
67-
68- await page . goto ( '/' )
69- await page . waitForLoadState ( 'networkidle' )
70-
71- const isDevResult = await page . evaluate ( async ( ) => {
72- // @ts -expect-error - Browser-side import, path resolved by dev server at runtime
73- const { isDev } = await import ( '/src/components/scripts/utils/environmentClient.ts' )
74- return isDev ( )
75- } )
76-
77- // Assert that isDev returns true when running against dev server
78- expect ( isDevResult ) . toBe ( true )
60+ const envSnapshot = await getEnvironmentSnapshot ( page )
61+ expect ( envSnapshot . isDev ) . toBe ( true )
7962 } )
8063
8164 test ( 'isProd should return false in browser context' , async ( { page : playwrightPage } ) => {
8265 const page = await BasePage . init ( playwrightPage )
66+ const envSnapshot = await getEnvironmentSnapshot ( page )
67+ expect ( envSnapshot . isProd ) . toBe ( false )
68+ } )
8369
84- await page . goto ( '/' )
85- await page . waitForLoadState ( 'networkidle' )
86-
87- const isProdResult = await page . evaluate ( async ( ) => {
88- // @ts -expect-error - Browser-side import, path resolved by dev server at runtime
89- const { isProd } = await import ( '/src/components/scripts/utils/environmentClient.ts' )
90- return isProd ( )
91- } )
70+ test ( 'package release is exposed from astro:env/client' , async ( { page : playwrightPage } ) => {
71+ const page = await BasePage . init ( playwrightPage )
72+ const envSnapshot = await getEnvironmentSnapshot ( page )
73+ expect ( envSnapshot . packageRelease . length ) . toBeGreaterThan ( 0 )
74+ } )
9275
93- // Assert that isProd returns false when running against dev server
94- expect ( isProdResult ) . toBe ( false )
76+ test ( 'privacy policy version is exposed from astro:env/client' , async ( { page : playwrightPage } ) => {
77+ const page = await BasePage . init ( playwrightPage )
78+ const envSnapshot = await getEnvironmentSnapshot ( page )
79+ expect ( envSnapshot . privacyPolicyVersion . length ) . toBeGreaterThan ( 0 )
9580 } )
9681} )
0 commit comments