Skip to content

Commit 5be61a4

Browse files
committed
test(e2e): update CRUD tests for secrets to verify UI interactions
1 parent e913bec commit 5be61a4

File tree

2 files changed

+32
-118
lines changed

2 files changed

+32
-118
lines changed

e2e/tests/secrets.crud-all-fields.spec.ts

Lines changed: 14 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { test } from '@e2e/utils/test';
2020
import { expect } from '@playwright/test';
2121

2222
import { API_SECRETS } from '@/config/constant';
23-
import type { APISIXType } from '@/types/schema/apisix';
23+
2424

2525
let createdSecretId: string;
2626
const manager = 'aws';
@@ -41,7 +41,7 @@ test.describe('CRUD secret with all fields (AWS)', () => {
4141
}
4242
});
4343

44-
test('should create a secret with all fields', async () => {
44+
test('should create a secret with all fields', async ({ page }) => {
4545
await test.step('create secret via API', async () => {
4646
await e2eReq.put(`${API_SECRETS}/${manager}/${createdSecretId}`, {
4747
access_key_id: 'AKIAIOSFODNN7EXAMPLE',
@@ -51,54 +51,21 @@ test.describe('CRUD secret with all fields (AWS)', () => {
5151
endpoint_url: 'https://secretsmanager.us-west-2.amazonaws.com',
5252
});
5353
});
54-
55-
await test.step('verify secret was created via API', async () => {
56-
const secret = await e2eReq
57-
.get<unknown, APISIXType['RespSecretDetail']>(
58-
`${API_SECRETS}/aws/${createdSecretId}`
59-
)
60-
.then((v) => v.data);
61-
62-
expect(secret.value).toBeDefined();
63-
// Note: manager is not in the response, it's part of the ID (aws/id)
64-
const awsSecret = secret.value as APISIXType['AWSSecret'];
65-
expect(awsSecret.access_key_id).toBe('AKIAIOSFODNN7EXAMPLE');
66-
expect(awsSecret.secret_access_key).toBe(
67-
'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
68-
);
69-
expect(awsSecret.session_token).toBe('test-session-token-123');
70-
expect(awsSecret.region).toBe('us-west-2');
71-
expect(awsSecret.endpoint_url).toBe(
72-
'https://secretsmanager.us-west-2.amazonaws.com'
73-
);
54+
await test.step('verify secret appears in UI', async () => {
55+
await secretsPom.toIndex(page);
56+
await secretsPom.isIndexPage(page);
57+
const row = page.locator('tr').filter({ hasText: createdSecretId });
58+
await expect(row).toBeVisible();
7459
});
7560
});
7661

7762
test('should read/view the secret details', async ({ page }) => {
78-
await test.step('verify secret can be retrieved via API', async () => {
79-
const secret = await e2eReq
80-
.get<unknown, APISIXType['RespSecretDetail']>(
81-
`${API_SECRETS}/${manager}/${createdSecretId}`
82-
)
83-
.then((v) => v.data);
84-
85-
expect(secret.value?.id).toContain(createdSecretId);
86-
// Note: manager is not in the response, it's part of the ID
87-
const awsSecret = secret.value as APISIXType['AWSSecret'];
88-
expect(awsSecret.access_key_id).toBe('AKIAIOSFODNN7EXAMPLE');
89-
expect(awsSecret.secret_access_key).toBe('wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY');
90-
expect(awsSecret.session_token).toBe('test-session-token-123');
91-
expect(awsSecret.region).toBe('us-west-2');
92-
expect(awsSecret.endpoint_url).toBe('https://secretsmanager.us-west-2.amazonaws.com');
93-
});
94-
9563
await test.step('navigate to secret details page and verify UI', async () => {
9664
await secretsPom.toIndex(page);
9765
await secretsPom.isIndexPage(page);
9866

9967
const row = page.locator('tr').filter({ hasText: createdSecretId });
10068
await row.getByRole('button', { name: 'View' }).click();
101-
10269
await secretsPom.isDetailPage(page);
10370

10471
const pageContent = await page.textContent('body');
@@ -148,25 +115,13 @@ test.describe('CRUD secret with all fields (AWS)', () => {
148115
await secretsPom.isDetailPage(page);
149116
});
150117

151-
await test.step('verify secret was updated', async () => {
152-
const pageContent = await page.textContent('body');
153-
// Verify we're still on detail page with proper fields
154-
expect(pageContent).toContain('Secret Manager');
155-
expect(pageContent).toContain(createdSecretId);
156-
157-
// Verify via API
158-
const secret = await e2eReq
159-
.get<unknown, APISIXType['RespSecretDetail']>(
160-
`${API_SECRETS}/${manager}/${createdSecretId}`
161-
)
162-
.then((v) => v.data);
163-
164-
const awsSecret = secret.value as APISIXType['AWSSecret'];
165-
expect(awsSecret.access_key_id).toBe(updatedAccessKeyId);
166-
expect(awsSecret.secret_access_key).toBe(updatedSecretAccessKey);
167-
expect(awsSecret.session_token).toBe(updatedSessionToken);
168-
expect(awsSecret.region).toBe(updatedRegion);
169-
expect(awsSecret.endpoint_url).toBe(updatedEndpointUrl);
118+
await test.step('verify secret was updated via UI', async () => {
119+
// Check the actual field values in the detail page
120+
await expect(page.getByLabel('Access Key ID')).toHaveValue(updatedAccessKeyId);
121+
await expect(page.getByLabel('Secret Access Key')).toHaveValue(updatedSecretAccessKey);
122+
await expect(page.getByLabel('Session Token')).toHaveValue(updatedSessionToken);
123+
await expect(page.getByLabel('Region')).toHaveValue(updatedRegion);
124+
await expect(page.getByLabel('Endpoint URL')).toHaveValue(updatedEndpointUrl);
170125
});
171126
});
172127

e2e/tests/secrets.crud-required-fields.spec.ts

Lines changed: 18 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import { test } from '@e2e/utils/test';
2020
import { expect } from '@playwright/test';
2121

2222
import { API_SECRETS } from '@/config/constant';
23-
import type { APISIXType } from '@/types/schema/apisix';
2423

2524
let createdSecretId: string;
2625
const manager = 'vault';
@@ -42,40 +41,18 @@ test.describe('CRUD secret with required fields only (Vault)', () => {
4241
});
4342

4443
test('should create a secret with required fields', async ({ page }) => {
45-
await test.step('create secret via UI', async () => {
44+
await test.step('create secret via API', async () => {
45+
await e2eReq.put(`${API_SECRETS}/${manager}/${createdSecretId}`, {
46+
uri: 'http://vault.example.com:8200',
47+
prefix: '/secret/test',
48+
token: 'test-vault-token-123',
49+
});
50+
});
51+
await test.step('verify secret appears in UI', async () => {
4652
await secretsPom.toIndex(page);
4753
await secretsPom.isIndexPage(page);
48-
49-
await secretsPom.getAddSecretBtn(page).click();
50-
await secretsPom.isAddPage(page);
51-
52-
// Fill ID field
53-
await page.getByLabel('ID', { exact: true }).fill(createdSecretId);
54-
55-
// Vault should be selected by default, so just fill the required Vault fields
56-
await page.getByLabel('URI').fill('http://vault.example.com:8200');
57-
await page.getByLabel('Prefix').fill('/secret/test');
58-
await page.getByLabel('Token').fill('test-vault-token-123');
59-
60-
// Submit the form
61-
await secretsPom.getAddBtn(page).click();
62-
await secretsPom.isIndexPage(page);
63-
});
64-
65-
await test.step('verify secret was created', async () => {
66-
// Verify via API
67-
const secret = await e2eReq
68-
.get<unknown, APISIXType['RespSecretDetail']>(
69-
`${API_SECRETS}/${manager}/${createdSecretId}`
70-
)
71-
.then((v) => v.data);
72-
73-
expect(secret.value).toBeDefined();
74-
// Note: manager is not in the response, it's part of the ID (vault/id)
75-
const vaultSecret = secret.value as APISIXType['VaultSecret'];
76-
expect(vaultSecret.uri).toBe('http://vault.example.com:8200');
77-
expect(vaultSecret.prefix).toBe('/secret/test');
78-
expect(vaultSecret.token).toBe('test-vault-token-123');
54+
const row = page.locator('tr').filter({ hasText: createdSecretId });
55+
await expect(row).toBeVisible();
7956
});
8057
});
8158

@@ -87,17 +64,12 @@ test.describe('CRUD secret with required fields only (Vault)', () => {
8764
// Find and click the View button for the created secret
8865
const row = page.locator('tr').filter({ hasText: createdSecretId });
8966
await row.getByRole('button', { name: 'View' }).click();
90-
9167
await secretsPom.isDetailPage(page);
9268

93-
// Verify the page shows Secret Manager and ID
94-
const pageContent = await page.textContent('body');
95-
expect(pageContent).toContain('Secret Manager');
96-
expect(pageContent).toContain(createdSecretId);
97-
// Verify Vault-specific fields are present (labels)
98-
expect(pageContent).toContain('URI');
99-
expect(pageContent).toContain('Prefix');
100-
expect(pageContent).toContain('Token');
69+
// Assert Vault field values using input selectors
70+
await expect(page.getByLabel('URI')).toHaveValue('http://vault.example.com:8200');
71+
await expect(page.getByLabel('Prefix')).toHaveValue('/secret/test');
72+
await expect(page.getByLabel('Token')).toHaveValue('test-vault-token-123');
10173
});
10274
});
10375

@@ -132,23 +104,10 @@ test.describe('CRUD secret with required fields only (Vault)', () => {
132104
await secretsPom.isDetailPage(page);
133105
});
134106

135-
await test.step('verify secret was updated', async () => {
136-
const pageContent = await page.textContent('body');
137-
// Verify we're still on detail page with proper fields
138-
expect(pageContent).toContain('Secret Manager');
139-
expect(pageContent).toContain(createdSecretId);
140-
141-
// Verify via API
142-
const secret = await e2eReq
143-
.get<unknown, APISIXType['RespSecretDetail']>(
144-
`${API_SECRETS}/${manager}/${createdSecretId}`
145-
)
146-
.then((v) => v.data);
147-
148-
const vaultSecret = secret.value as APISIXType['VaultSecret'];
149-
expect(vaultSecret.uri).toBe(updatedUri);
150-
expect(vaultSecret.prefix).toBe(updatedPrefix);
151-
expect(vaultSecret.token).toBe(updatedToken);
107+
await test.step('verify secret was updated via UI', async () => {
108+
await expect(page.getByLabel('URI')).toHaveValue(updatedUri);
109+
await expect(page.getByLabel('Prefix')).toHaveValue(updatedPrefix);
110+
await expect(page.getByLabel('Token')).toHaveValue(updatedToken);
152111
});
153112
});
154113

0 commit comments

Comments
 (0)