@@ -6,8 +6,10 @@ import { CodeServer, CodeServerPage } from "./models/CodeServer"
6
6
* Wraps `test.describe` to create and manage an instance of code-server. If you
7
7
* don't use this you will need to create your own code-server instance and pass
8
8
* it to `test.use`.
9
+ *
10
+ * If `includeCredentials` is `true` page requests will be authenticated.
9
11
*/
10
- export const describe = ( name : string , fn : ( codeServer : CodeServer ) => void ) => {
12
+ export const describe = ( name : string , includeCredentials : boolean , fn : ( codeServer : CodeServer ) => void ) => {
11
13
test . describe ( name , ( ) => {
12
14
// This will spawn on demand so nothing is necessary on before.
13
15
const codeServer = new CodeServer ( name )
@@ -18,14 +20,30 @@ export const describe = (name: string, fn: (codeServer: CodeServer) => void) =>
18
20
await codeServer . close ( )
19
21
} )
20
22
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
+ } )
23
40
24
41
fn ( codeServer )
25
42
} )
26
43
}
27
44
28
45
interface TestFixtures {
46
+ authenticated : boolean
29
47
codeServer : CodeServer
30
48
codeServerPage : CodeServerPage
31
49
}
@@ -35,10 +53,11 @@ interface TestFixtures {
35
53
* ready.
36
54
*/
37
55
export const test = base . extend < TestFixtures > ( {
56
+ authenticated : false ,
38
57
codeServer : undefined , // No default; should be provided through `test.use`.
39
- codeServerPage : async ( { codeServer, page } , use ) => {
58
+ codeServerPage : async ( { authenticated , codeServer, page } , use ) => {
40
59
const codeServerPage = new CodeServerPage ( codeServer , page )
41
- await codeServerPage . navigate ( )
60
+ await codeServerPage . setup ( authenticated )
42
61
await use ( codeServerPage )
43
62
} ,
44
63
} )
0 commit comments