@@ -6,8 +6,10 @@ import { CodeServer, CodeServerPage } from "./models/CodeServer"
66 * Wraps `test.describe` to create and manage an instance of code-server. If you
77 * don't use this you will need to create your own code-server instance and pass
88 * it to `test.use`.
9+ *
10+ * If `includeCredentials` is `true` page requests will be authenticated.
911 */
10- export const describe = ( name : string , fn : ( codeServer : CodeServer ) => void ) => {
12+ export const describe = ( name : string , includeCredentials : boolean , fn : ( codeServer : CodeServer ) => void ) => {
1113 test . describe ( name , ( ) => {
1214 // This will spawn on demand so nothing is necessary on before.
1315 const codeServer = new CodeServer ( name )
@@ -18,14 +20,30 @@ export const describe = (name: string, fn: (codeServer: CodeServer) => void) =>
1820 await codeServer . close ( )
1921 } )
2022
21- // This makes `codeServer` available to the extend call below.
22- test . use ( { codeServer } )
23+ const storageState = JSON . parse ( process . env . STORAGE || "{}" )
24+
25+ // Sanity check to ensure the cookie is set.
26+ const cookies = storageState ?. cookies
27+ if ( includeCredentials && ( ! cookies || cookies . length !== 1 || ! ! cookies [ 0 ] . key ) ) {
28+ logger . error ( "no cookies" , field ( "storage" , JSON . stringify ( cookies ) ) )
29+ throw new Error ( "no credentials to include" )
30+ }
31+
32+ test . use ( {
33+ // Makes `codeServer` and `authenticated` available to the extend call
34+ // below.
35+ codeServer,
36+ authenticated : includeCredentials ,
37+ // This provides a cookie that authenticates with code-server.
38+ storageState : includeCredentials ? storageState : { } ,
39+ } )
2340
2441 fn ( codeServer )
2542 } )
2643}
2744
2845interface TestFixtures {
46+ authenticated : boolean
2947 codeServer : CodeServer
3048 codeServerPage : CodeServerPage
3149}
@@ -35,10 +53,11 @@ interface TestFixtures {
3553 * ready.
3654 */
3755export const test = base . extend < TestFixtures > ( {
56+ authenticated : false ,
3857 codeServer : undefined , // No default; should be provided through `test.use`.
39- codeServerPage : async ( { codeServer, page } , use ) => {
58+ codeServerPage : async ( { authenticated , codeServer, page } , use ) => {
4059 const codeServerPage = new CodeServerPage ( codeServer , page )
41- await codeServerPage . navigate ( )
60+ await codeServerPage . setup ( authenticated )
4261 await use ( codeServerPage )
4362 } ,
4463} )
0 commit comments