Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitee7dda8

Browse files
authored
refactor(site): verify deployment config flags in e2e tests (#12986)
1 parent0c99356 commitee7dda8

File tree

3 files changed

+134
-89
lines changed

3 files changed

+134
-89
lines changed

‎site/e2e/api.ts

Lines changed: 75 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
importtype{Page}from"@playwright/test";
22
import{expect}from"@playwright/test";
33
import*asAPIfrom"api/api";
4+
importtype{SerpentOption}from"api/typesGenerated";
45
import{coderPort}from"./constants";
56
import{findSessionToken,randomName}from"./helpers";
67

@@ -49,67 +50,92 @@ export const createGroup = async (orgId: string) => {
4950
returngroup;
5051
};
5152

52-
exportasyncfunctionverifyConfigFlag(
53+
exportasyncfunctionverifyConfigFlagBoolean(
5354
page:Page,
5455
config:API.DeploymentConfig,
5556
flag:string,
5657
){
57-
constopt=config.options.find((option)=>option.flag===flag);
58-
if(opt===undefined){
59-
// must be undefined as `false` is expected
60-
thrownewError(`Option with env${flag} has undefined value.`);
61-
}
58+
constopt=findConfigOption(config,flag);
59+
consttype=opt.value ?"option-enabled" :"option-disabled";
60+
constvalue=opt.value ?"Enabled" :"Disabled";
6261

63-
// Map option type to test class name.
64-
lettype:string;
65-
letvalue=opt.value;
62+
constconfigOption=page.locator(
63+
`div.options-table .option-${flag} .${type}`,
64+
);
65+
awaitexpect(configOption).toHaveText(value);
66+
}
6667

67-
if(typeofvalue==="boolean"){
68-
// Boolean options map to string (Enabled/Disabled).
69-
type=value ?"option-enabled" :"option-disabled";
70-
value=value ?"Enabled" :"Disabled";
71-
}elseif(typeofvalue==="number"){
72-
type="option-value-number";
73-
value=String(value);
74-
}elseif(!value||value.length===0){
75-
type="option-value-empty";
76-
}elseif(typeofvalue==="string"){
77-
type="option-value-string";
78-
}elseif(typeofvalue==="object"){
79-
type="option-array";
80-
}else{
81-
type="option-value-json";
82-
}
68+
exportasyncfunctionverifyConfigFlagNumber(
69+
page:Page,
70+
config:API.DeploymentConfig,
71+
flag:string,
72+
){
73+
constopt=findConfigOption(config,flag);
74+
constconfigOption=page.locator(
75+
`div.options-table .option-${flag} .option-value-number`,
76+
);
77+
awaitexpect(configOption).toHaveText(String(opt.value));
78+
}
79+
80+
exportasyncfunctionverifyConfigFlagString(
81+
page:Page,
82+
config:API.DeploymentConfig,
83+
flag:string,
84+
){
85+
constopt=findConfigOption(config,flag);
86+
87+
constconfigOption=page.locator(
88+
`div.options-table .option-${flag} .option-value-string`,
89+
);
90+
awaitexpect(configOption).toHaveText(opt.value);
91+
}
92+
93+
exportasyncfunctionverifyConfigFlagArray(
94+
page:Page,
95+
config:API.DeploymentConfig,
96+
flag:string,
97+
){
98+
constopt=findConfigOption(config,flag);
99+
constconfigOption=page.locator(
100+
`div.options-table .option-${flag} .option-array`,
101+
);
83102

84-
// Special cases
85-
if(opt.flag==="strict-transport-security"&&opt.value===0){
86-
type="option-value-string";
87-
value="Disabled";// Display "Disabled" instead of zero seconds.
103+
// Verify array of options with simple dots
104+
for(constitemofopt.value){
105+
awaitexpect(configOption.locator("li",{hasText:item})).toBeVisible();
88106
}
107+
}
89108

109+
exportasyncfunctionverifyConfigFlagEntries(
110+
page:Page,
111+
config:API.DeploymentConfig,
112+
flag:string,
113+
){
114+
constopt=findConfigOption(config,flag);
90115
constconfigOption=page.locator(
91-
`div.options-table .option-${flag} .${type}`,
116+
`div.options-table .option-${flag} .option-array`,
92117
);
93118

94119
// Verify array of options with green marks.
95-
if(typeofvalue==="object"&&!Array.isArray(value)){
96-
Object.entries(value)
97-
.sort((a,b)=>a[0].localeCompare(b[0]))
98-
.map(async([item])=>{
99-
awaitexpect(
100-
configOption.locator(`.option-array-item-${item}.option-enabled`,{
101-
hasText:item,
102-
}),
103-
).toBeVisible();
104-
});
105-
return;
106-
}
107-
// Verify array of options with simmple dots
108-
if(Array.isArray(value)){
109-
for(constitemofvalue){
110-
awaitexpect(configOption.locator("li",{hasText:item})).toBeVisible();
111-
}
112-
return;
120+
Object.entries(opt.value)
121+
.sort((a,b)=>a[0].localeCompare(b[0]))
122+
.map(async([item])=>{
123+
awaitexpect(
124+
configOption.locator(`.option-array-item-${item}.option-enabled`,{
125+
hasText:item,
126+
}),
127+
).toBeVisible();
128+
});
129+
}
130+
131+
exportfunctionfindConfigOption(
132+
config:API.DeploymentConfig,
133+
flag:string,
134+
):SerpentOption{
135+
constopt=config.options.find((option)=>option.flag===flag);
136+
if(opt===undefined){
137+
// must be undefined as `false` is expected
138+
thrownewError(`Option with env${flag} has undefined value.`);
113139
}
114-
awaitexpect(configOption).toHaveText(String(value));
140+
returnopt;
115141
}
Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,47 @@
1-
import{test}from"@playwright/test";
1+
importtype{Page}from"@playwright/test";
2+
import{expect,test}from"@playwright/test";
3+
importtype*asAPIfrom"api/api";
24
import{getDeploymentConfig}from"api/api";
3-
import{setupApiCalls,verifyConfigFlag}from"../../api";
5+
import{
6+
findConfigOption,
7+
setupApiCalls,
8+
verifyConfigFlagBoolean,
9+
verifyConfigFlagNumber,
10+
verifyConfigFlagString,
11+
}from"../../api";
412

513
test("enabled security settings",async({ page})=>{
614
awaitsetupApiCalls(page);
715
constconfig=awaitgetDeploymentConfig();
816

917
awaitpage.goto("/deployment/security",{waitUntil:"domcontentloaded"});
1018

11-
constflags=[
12-
"ssh-keygen-algorithm",
13-
"secure-auth-cookie",
14-
"disable-owner-workspace-access",
19+
awaitverifyConfigFlagString(page,config,"ssh-keygen-algorithm");
20+
awaitverifyConfigFlagBoolean(page,config,"secure-auth-cookie");
21+
awaitverifyConfigFlagBoolean(page,config,"disable-owner-workspace-access");
1522

16-
"tls-redirect-http-to-https",
17-
"strict-transport-security",
18-
"tls-address",
19-
"tls-allow-insecure-ciphers",
20-
"tls-client-auth",
21-
"tls-enable",
22-
"tls-min-version",
23-
];
23+
awaitverifyConfigFlagBoolean(page,config,"tls-redirect-http-to-https");
24+
awaitverifyStrictTransportSecurity(page,config);
25+
awaitverifyConfigFlagString(page,config,"tls-address");
26+
awaitverifyConfigFlagBoolean(page,config,"tls-allow-insecure-ciphers");
27+
awaitverifyConfigFlagString(page,config,"tls-client-auth");
28+
awaitverifyConfigFlagBoolean(page,config,"tls-enable");
29+
awaitverifyConfigFlagString(page,config,"tls-min-version");
30+
});
2431

25-
for(constflagofflags){
26-
awaitverifyConfigFlag(page,config,flag);
32+
asyncfunctionverifyStrictTransportSecurity(
33+
page:Page,
34+
config:API.DeploymentConfig,
35+
){
36+
constflag="strict-transport-security";
37+
constopt=findConfigOption(config,flag);
38+
if(opt.value!==0){
39+
awaitverifyConfigFlagNumber(page,config,flag);
40+
return;
2741
}
28-
});
42+
43+
constconfigOption=page.locator(
44+
`div.options-table .option-${flag} .option-value-string`,
45+
);
46+
awaitexpect(configOption).toHaveText("Disabled");
47+
}
Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
import{test}from"@playwright/test";
22
import{getDeploymentConfig}from"api/api";
3-
import{setupApiCalls,verifyConfigFlag}from"../../api";
3+
import{
4+
setupApiCalls,
5+
verifyConfigFlagArray,
6+
verifyConfigFlagBoolean,
7+
verifyConfigFlagEntries,
8+
verifyConfigFlagString,
9+
}from"../../api";
410

511
test("login with OIDC",async({ page})=>{
612
awaitsetupApiCalls(page);
713
constconfig=awaitgetDeploymentConfig();
814

915
awaitpage.goto("/deployment/userauth",{waitUntil:"domcontentloaded"});
1016

11-
constflags=[
12-
"oidc-group-auto-create",
13-
"oidc-allow-signups",
14-
"oidc-auth-url-params",
15-
"oidc-client-id",
16-
"oidc-email-domain",
17-
"oidc-email-field",
18-
"oidc-group-mapping",
19-
"oidc-ignore-email-verified",
20-
"oidc-ignore-userinfo",
21-
"oidc-issuer-url",
22-
"oidc-group-regex-filter",
23-
"oidc-scopes",
24-
"oidc-user-role-mapping",
25-
"oidc-username-field",
26-
"oidc-sign-in-text",
27-
"oidc-icon-url",
28-
];
29-
30-
for(constflagofflags){
31-
awaitverifyConfigFlag(page,config,flag);
32-
}
17+
awaitverifyConfigFlagBoolean(page,config,"oidc-group-auto-create");
18+
awaitverifyConfigFlagBoolean(page,config,"oidc-allow-signups");
19+
awaitverifyConfigFlagEntries(page,config,"oidc-auth-url-params");
20+
awaitverifyConfigFlagString(page,config,"oidc-client-id");
21+
awaitverifyConfigFlagArray(page,config,"oidc-email-domain");
22+
awaitverifyConfigFlagString(page,config,"oidc-email-field");
23+
awaitverifyConfigFlagEntries(page,config,"oidc-group-mapping");
24+
awaitverifyConfigFlagBoolean(page,config,"oidc-ignore-email-verified");
25+
awaitverifyConfigFlagBoolean(page,config,"oidc-ignore-userinfo");
26+
awaitverifyConfigFlagString(page,config,"oidc-issuer-url");
27+
awaitverifyConfigFlagString(page,config,"oidc-group-regex-filter");
28+
awaitverifyConfigFlagArray(page,config,"oidc-scopes");
29+
awaitverifyConfigFlagEntries(page,config,"oidc-user-role-mapping");
30+
awaitverifyConfigFlagString(page,config,"oidc-username-field");
31+
awaitverifyConfigFlagString(page,config,"oidc-sign-in-text");
32+
awaitverifyConfigFlagString(page,config,"oidc-icon-url");
3333
});

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp