mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat: pipeline templates, analytics opt-out, 83 conversion presets, positioning + e2e modernization
Lands five integrated branches: pipeline templates (#355), analytics opt-out (#354), 83 conversion presets bringing the catalog to 240 tools (#356), self-hosted positioning (#353), and e2e modernization (#351). Integration fixes: aligned stale web analytics tests with the opt-out/allow-list model, closed 3 CodeQL incomplete-sanitization alerts in the i18n generator, resolved settings/index/docs/format-matrix conflicts, and corrected tool counts to 240.
This commit is contained in:
@@ -285,18 +285,27 @@ base.describe("RBAC Full — Custom Role User", () => {
|
||||
|
||||
await openSettings(page);
|
||||
|
||||
// Should see these tabs (available to all authenticated users or matching permissions)
|
||||
// Should see these 5 tabs. The custom role only has settings:read and
|
||||
// tools:use, so it sees the same set as the built-in "user" role.
|
||||
await expect(page.getByRole("button", { name: /general/i })).toBeVisible();
|
||||
await expect(page.getByRole("button", { name: /security/i })).toBeVisible();
|
||||
await expect(page.getByRole("button", { name: /api keys/i })).toBeVisible();
|
||||
await expect(page.getByRole("button", { name: /tools/i })).toBeVisible();
|
||||
await expect(page.getByRole("button", { name: /about/i })).toBeVisible();
|
||||
|
||||
// Should NOT see admin-only tabs (requires users:manage, teams:manage, etc.)
|
||||
// Should NOT see admin-only tabs (requires users:manage, teams:manage,
|
||||
// audit:read, or settings:write).
|
||||
await expect(page.getByRole("button", { name: /system settings/i })).not.toBeVisible();
|
||||
await expect(page.getByRole("button", { name: /people/i })).not.toBeVisible();
|
||||
await expect(page.getByRole("button", { name: /teams/i })).not.toBeVisible();
|
||||
await expect(page.getByRole("button", { name: /^roles$/i })).not.toBeVisible();
|
||||
await expect(page.getByRole("button", { name: /audit log/i })).not.toBeVisible();
|
||||
// Usage requires audit:read, AI Features requires settings:write.
|
||||
await expect(page.getByRole("button", { name: /^usage$/i })).not.toBeVisible();
|
||||
await expect(page.getByRole("button", { name: /ai features/i })).not.toBeVisible();
|
||||
|
||||
// Exactly 5 nav buttons for this custom role.
|
||||
expect(await page.locator(".w-48 button").count()).toBe(5);
|
||||
});
|
||||
|
||||
base.test(
|
||||
|
||||
Reference in New Issue
Block a user