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

Commit5121f7b

Browse files
authored
feat: create e2e tests for IDP org sync settings page (#15767)
Idp organization sync setting is a premium feature located at`/deployment/idp-org-sync`This PR creates a minimal set of e2e tests.
1 parentaa310e3 commit5121f7b

File tree

3 files changed

+187
-1
lines changed

3 files changed

+187
-1
lines changed

‎site/e2e/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ code .
5555
Enterprise tests require a license key to run.
5656

5757
```shell
58-
exportCODER_E2E_ENTERPRISE_LICENSE=<license key>
58+
exportCODER_E2E_LICENSE=<license key>
5959
```
6060

6161
#Debugging tests

‎site/e2e/api.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,35 @@ export const createOrganization = async () => {
6363
returnorg;
6464
};
6565

66+
exportconstdeleteOrganization=async(orgName:string)=>{
67+
awaitAPI.deleteOrganization(orgName);
68+
};
69+
70+
exportconstcreateOrganizationWithName=async(name:string)=>{
71+
constorg=awaitAPI.createOrganization({
72+
name,
73+
display_name:`${name}`,
74+
description:`Org description${name}`,
75+
icon:"/emojis/1f957.png",
76+
});
77+
returnorg;
78+
};
79+
80+
exportconstcreateOrganizationSyncSettings=async()=>{
81+
constsettings=awaitAPI.patchOrganizationIdpSyncSettings({
82+
field:"organization-field-test",
83+
mapping:{
84+
"idp-org-1":[
85+
"fbd2116a-8961-4954-87ae-e4575bd29ce0",
86+
"13de3eb4-9b4f-49e7-b0f8-0c3728a0d2e2",
87+
],
88+
"idp-org-2":["fbd2116a-8961-4954-87ae-e4575bd29ce0"],
89+
},
90+
organization_assign_default:true,
91+
});
92+
returnsettings;
93+
};
94+
6695
exportasyncfunctionverifyConfigFlagBoolean(
6796
page:Page,
6897
config:DeploymentConfig,
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
import{expect,test}from"@playwright/test";
2+
import{
3+
createOrganizationSyncSettings,
4+
createOrganizationWithName,
5+
deleteOrganization,
6+
setupApiCalls,
7+
}from"../../api";
8+
import{requiresLicense}from"../../helpers";
9+
import{beforeCoderTest}from"../../hooks";
10+
11+
test.describe("IdpOrgSyncPage",()=>{
12+
test.beforeEach(async({ page})=>awaitbeforeCoderTest(page));
13+
14+
test("add new IdP organization mapping with API",async({ page})=>{
15+
requiresLicense();
16+
awaitsetupApiCalls(page);
17+
18+
awaitcreateOrganizationSyncSettings();
19+
20+
awaitpage.goto("/deployment/idp-org-sync",{
21+
waitUntil:"domcontentloaded",
22+
});
23+
24+
awaitexpect(
25+
page.getByRole("switch",{name:"Assign Default Organization"}),
26+
).toBeChecked();
27+
28+
awaitexpect(page.getByText("idp-org-1")).toBeVisible();
29+
awaitexpect(
30+
page.getByText("fbd2116a-8961-4954-87ae-e4575bd29ce0").first(),
31+
).toBeVisible();
32+
33+
awaitexpect(page.getByText("idp-org-2")).toBeVisible();
34+
awaitexpect(
35+
page.getByText("fbd2116a-8961-4954-87ae-e4575bd29ce0").last(),
36+
).toBeVisible();
37+
});
38+
39+
test("delete a IdP org to coder org mapping row",async({ page})=>{
40+
requiresLicense();
41+
awaitsetupApiCalls(page);
42+
awaitcreateOrganizationSyncSettings();
43+
awaitpage.goto("/deployment/idp-org-sync",{
44+
waitUntil:"domcontentloaded",
45+
});
46+
47+
awaitexpect(page.getByText("idp-org-1")).toBeVisible();
48+
awaitpage
49+
.getByRole("button",{name:/delete/i})
50+
.first()
51+
.click();
52+
awaitexpect(page.getByText("idp-org-1")).not.toBeVisible();
53+
awaitexpect(
54+
page.getByText("Organization sync settings updated."),
55+
).toBeVisible();
56+
});
57+
58+
test("update sync field",async({ page})=>{
59+
requiresLicense();
60+
awaitpage.goto("/deployment/idp-org-sync",{
61+
waitUntil:"domcontentloaded",
62+
});
63+
64+
constsyncField=page.getByRole("textbox",{
65+
name:"Organization sync field",
66+
});
67+
constsaveButton=page.getByRole("button",{name:"Save"}).first();
68+
69+
awaitexpect(saveButton).toBeDisabled();
70+
71+
awaitsyncField.fill("test-field");
72+
awaitexpect(saveButton).toBeEnabled();
73+
74+
awaitpage.getByRole("button",{name:"Save"}).click();
75+
76+
awaitexpect(
77+
page.getByText("Organization sync settings updated."),
78+
).toBeVisible();
79+
});
80+
81+
test("toggle default organization assignment",async({ page})=>{
82+
requiresLicense();
83+
awaitpage.goto("/deployment/idp-org-sync",{
84+
waitUntil:"domcontentloaded",
85+
});
86+
87+
consttoggle=page.getByRole("switch",{
88+
name:"Assign Default Organization",
89+
});
90+
awaittoggle.click();
91+
92+
awaitexpect(
93+
page.getByText("Organization sync settings updated."),
94+
).toBeVisible();
95+
96+
awaitexpect(toggle).not.toBeChecked();
97+
});
98+
99+
test("export policy button is enabled when sync settings are present",async({
100+
page,
101+
})=>{
102+
requiresLicense();
103+
awaitsetupApiCalls(page);
104+
105+
awaitpage.goto("/deployment/idp-org-sync",{
106+
waitUntil:"domcontentloaded",
107+
});
108+
109+
constexportButton=page.getByRole("button",{name:/ExportPolicy/i});
110+
awaitcreateOrganizationSyncSettings();
111+
112+
awaitexpect(exportButton).toBeEnabled();
113+
awaitexportButton.click();
114+
});
115+
116+
test("add new IdP organization mapping with UI",async({ page})=>{
117+
requiresLicense();
118+
awaitsetupApiCalls(page);
119+
120+
awaitcreateOrganizationWithName("developers");
121+
122+
awaitpage.goto("/deployment/idp-org-sync",{
123+
waitUntil:"domcontentloaded",
124+
});
125+
126+
constidpOrgInput=page.getByLabel("IdP organization name");
127+
constorgSelector=page.getByPlaceholder("Select organization");
128+
constaddButton=page.getByRole("button",{
129+
name:/AddIdPorganization/i,
130+
});
131+
132+
awaitexpect(addButton).toBeDisabled();
133+
134+
awaitidpOrgInput.fill("new-idp-org");
135+
136+
// Select Coder organization from combobox
137+
awaitorgSelector.click();
138+
awaitpage.getByRole("option",{name:"developers"}).click();
139+
140+
// Add button should now be enabled
141+
awaitexpect(addButton).toBeEnabled();
142+
143+
awaitaddButton.click();
144+
145+
// Verify new mapping appears in table
146+
constnewRow=page.getByTestId("idp-org-new-idp-org");
147+
awaitexpect(newRow).toBeVisible();
148+
awaitexpect(newRow.getByText("new-idp-org")).toBeVisible();
149+
awaitexpect(newRow.getByText("developers")).toBeVisible();
150+
151+
awaitexpect(
152+
page.getByText("Organization sync settings updated."),
153+
).toBeVisible();
154+
155+
awaitdeleteOrganization("developers");
156+
});
157+
});

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp