87 lines
3.5 KiB
JavaScript
87 lines
3.5 KiB
JavaScript
const { test, expect } = require('@playwright/test');
|
|
const { browserJson, getCurrentWorkspace, localized, login, uniqueName } = require('./helpers');
|
|
|
|
test('created workspace secret renders styled table actions', async ({ page }) => {
|
|
const secretName = uniqueName('ui_secret');
|
|
|
|
await login(page);
|
|
const workspace = await getCurrentWorkspace(page);
|
|
await browserJson(
|
|
page,
|
|
'POST',
|
|
`/api/admin/workspaces/${encodeURIComponent(workspace.id)}/secrets`,
|
|
{
|
|
name: secretName,
|
|
kind: 'token',
|
|
value: 'demo-secret-value',
|
|
},
|
|
);
|
|
|
|
await page.goto('/secrets');
|
|
|
|
const row = page.locator('#secrets-tbody tr').filter({ hasText: secretName }).first();
|
|
await expect(row).toBeVisible();
|
|
await expect(row.locator('[data-testid="secret-rotate-action"]')).toHaveClass(/btn-secondary/);
|
|
await expect(row.locator('[data-testid="secret-rotate-action"]')).toHaveClass(/table-action-btn/);
|
|
await expect(row.locator('[data-testid="secret-delete-action"]')).toHaveClass(/btn-danger/);
|
|
await expect(row.locator('[data-testid="secret-delete-action"]')).toHaveClass(/table-action-btn/);
|
|
});
|
|
|
|
test('secret modal shows fields for selected secret kind only', async ({ page }) => {
|
|
await login(page);
|
|
await page.goto('/secrets');
|
|
|
|
await page.locator('[data-testid="secret-create-button"]').click();
|
|
await expect(page.locator('[data-testid="secret-create-modal"]')).toBeVisible();
|
|
|
|
const stringField = page.locator('[data-kind-field="string"]');
|
|
const basicField = page.locator('[data-kind-field="basic"]');
|
|
const jsonField = page.locator('[data-kind-field="json"]');
|
|
const kindSelect = page.locator('[data-testid="secret-kind-select"]');
|
|
|
|
await expect(stringField).toBeVisible();
|
|
await expect(basicField).toBeHidden();
|
|
await expect(jsonField).toBeHidden();
|
|
|
|
await kindSelect.selectOption('username_password');
|
|
await expect(stringField).toBeHidden();
|
|
await expect(basicField).toBeVisible();
|
|
await expect(jsonField).toBeHidden();
|
|
|
|
await kindSelect.selectOption('header');
|
|
await expect(stringField).toBeVisible();
|
|
await expect(page.locator('#secret-string-label')).toHaveText(localized('Header value', 'Значение заголовка'));
|
|
await expect(basicField).toBeHidden();
|
|
await expect(jsonField).toBeHidden();
|
|
|
|
await kindSelect.selectOption('generic');
|
|
await expect(stringField).toBeHidden();
|
|
await expect(basicField).toBeHidden();
|
|
await expect(jsonField).toBeVisible();
|
|
|
|
await kindSelect.selectOption('token');
|
|
await expect(stringField).toBeVisible();
|
|
await expect(page.locator('#secret-string-label')).toHaveText(localized('Token value', 'Значение токена'));
|
|
await expect(basicField).toBeHidden();
|
|
await expect(jsonField).toBeHidden();
|
|
});
|
|
|
|
test('generic json secret modal stays inside compact viewport', async ({ page }) => {
|
|
await page.setViewportSize({ width: 900, height: 520 });
|
|
await login(page);
|
|
await page.goto('/secrets');
|
|
|
|
await page.locator('[data-testid="secret-create-button"]').click();
|
|
await page.locator('[data-testid="secret-kind-select"]').selectOption('generic');
|
|
|
|
const modal = page.locator('[data-testid="secret-create-modal"] .modal');
|
|
await expect(modal).toBeVisible();
|
|
|
|
const box = await modal.boundingBox();
|
|
expect(box).not.toBeNull();
|
|
expect(box.y).toBeGreaterThanOrEqual(0);
|
|
expect(box.y + box.height).toBeLessThanOrEqual(520);
|
|
await expect(page.locator('[data-testid="secret-name-input"]')).toBeVisible();
|
|
await expect(page.locator('[data-testid="secret-submit-button"]')).toBeVisible();
|
|
});
|