8000 feat: create e2e tests for organization custom roles page by jaaydenh · Pull Request #15814 · coder/coder · GitHub
[go: up one dir, main page]

Skip to content

feat: create e2e tests for organization custom roles page #15814

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Dec 16, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
feat: wip
  • Loading branch information
jaaydenh committed Dec 9, 2024
commit c2268e40bc6553c313192f79f662ac0c9bfd1f51
33 changes: 33 additions & 0 deletions site/e2e/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,39 @@ export const createOrganizationSyncSettings = async () => {
organization_assign_default: true,
});
return settings;
}

export const createCustomRole = async (orgId: string, name: string, displayName: string) => {
const role = await API.createOrganizationRole(orgId, {
name,
display_name: displayName,
organization_id: orgId,
site_permissions: [],
organization_permissions: [
{
negate: false,
resource_type: "organization_member",
action: "create",
},
{
negate: false,
resource_type: "organization_member",
action: "delete",
},
{
negate: false,
resource_type: "organization_member",
action: "read",
},
{
negate: false,
resource_type: "organization_member",
action: "update",
},
],
user_permissions: [],
});
return role;
};

export async function verifyConfigFlagBoolean(
Expand Down
127 changes: 127 additions & 0 deletions site/e2e/tests/organizations/customRoles/customRoles.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
import { test, expect } from "@playwright/test";
import { MockOrganization } from "testHelpers/entities";
import {
createOrganization,
createCustomRole,
getCurrentOrgId,
setupApiCalls,
} from "../../../api";
import { requiresLicense } from "../../../helpers";
import { beforeCoderTest } from "../../../hooks";

test.describe("CustomRolesPage", () => {

test.beforeEach(async ({ page }) => await beforeCoderTest(page));

test("create custom role", async ({ page }) => {
requiresLicense();
await setupApiCalls(page);

const org = await createOrganization();
const customRole = await createCustomRole(org.id, "custom-role-test-1", "Custom Role Test 1");

await page.goto(`/organizations/${org.name}/roles`);
const roleRow = page.getByTestId(`role-${customRole.name}`);
await expect(roleRow.getByText(customRole.display_name)).toBeVisible();
await expect(roleRow.getByText("organization_member")).toBeVisible();

});

test("displays built-in role without edit/delete options", async ({ page }) => {
requiresLicense();
await setupApiCalls(page);

const org = await createOrganization();
await page.goto(`/organizations/${org.name}/roles`);

const roleRow = page.getByTestId("role-organization-admin");
await expect(roleRow).toBeVisible();

await expect(roleRow.getByText("Organization Admin")).toBeVisible();

// Verify that the more menu (three dots) is not present for built-in roles
await expect(roleRow.getByRole("button", { name: "More options" })).not.toBeVisible();
});

test("can navigate to create custom role", async ({ page }) => {
requiresLicense();
await setupApiCalls(page);

const org = await createOrganization();
await page.goto(`/organizations/${org.name}/roles`);

await page.getByRole("link", { name: "Create custom role" }).first().click();
await expect(page).toHaveURL(`/organizations/${org.name}/roles/create`);
});

// test("delete custom role", async ({ page }) => {
// requiresLicense();
// await setupApiCalls(page);

// const org = await createOrganization();
// const customRole = await createCustomRole(org.id, "custom-role-test-1", "Custom Role Test 1");
// await page.goto(`/organizations/${org.name}/roles`);

// // const roleRow = page.getByTestId("role-custom-role-test-1");
// await page.getByRole("button", { name: "More options" }).click();

// // Check menu items
// await expect(page.getByRole("menuitem", { name: "Edit" })).toBeVisible();
// await expect(page.getByText("Edit")).toBeVisible();
// // const menu = page.getByRole("menu");

// const deleteButton = page.getByRole("menuitem", { name: "Delete…" });
// await expect(deleteButton).toBeVisible();
// await deleteButton.click();

// const input = page.getByRole("textbox");
// await input.fill(customRole.name);
// await page.getByRole("button", { name: "Delete" }).click();

// await expect(page.getByText("Custom role deleted successfully!")).toBeVisible();
// });

// test("shows delete confirmation dialog", async ({ page }) => {
// // Click delete option
// const roleRow = page.getByTestId("role-custom-role-test-1");
// await roleRow.getByRole("button", { name: "More options" }).click();
// await page.getByRole("menuitem", { name: "Delete…" }).click();

// // Check dialog content
// await expect(page.getByRole("dialog")).toBeVisible();
// await expect(page.getByText(/Are you sure you want to delete/)).toBeVisible();
// await expect(page.getByRole("button", { name: "Cancel" })).toBeVisible();
// await expect(page.getByRole("button", { name: "Delete" })).toBeVisible();
// });

// test("handles delete role successfully", async ({ page }) => {
// // Mock delete API call
// await page.route("**/api/v2/organizations/*/roles/*", (route) =>
// route.fulfill(createMockApiResponse({}))
// );

// // Perform delete
// const roleRow = page.getByTestId("role-custom-role-test-1");
// await roleRow.getByRole("button", { name: "More options" }).click();
// await page.getByRole("menuitem", { name: "Delete…" }).click();
// await page.getByRole("button", { name: "Delete" }).click();

// // Check success message
// await expect(page.getByText("Custom role deleted successfully!")).toBeVisible();
// });

// test("shows paywall when custom roles not enabled", async ({ page }) => {
// // Mock feature flags to disable custom roles
// await page.route("**/api/v2/features", (route) =>
// route.fulfill(createMockApiResponse({
// custom_roles: false
// }))
// );

// await page.reload();

// // Check paywall content
// await expect(page.getByText("Upgrade to a premium license to create a custom role")).toBeVisible();
// await expect(page.getByRole("link", { name: "Create custom role" })).not.toBeVisible();
// });
38FD });
0