lotr-sut/tests/api/steps/api-common.steps.ts
Fellowship Scholar f6a5823439 init commit
2026-03-29 20:07:56 +00:00

65 lines
2.8 KiB
TypeScript

import { Given, When, Then } from '../support/fixtures';
import { storeResponse } from '../support/api-utils';
import { expect } from '@playwright/test';
// ── Background ────────────────────────────────────────────────────────────────
Given('the API is accessible', async ({ request, apiState }) => {
try {
await request.get(`${apiState.baseUrl}/api/health`);
} catch {
// Proceed even if health endpoint is not available
}
});
// ── Authentication setup ──────────────────────────────────────────────────────
Given('I am authenticated as {string}', async ({ request, apiState }, username: string) => {
const response = await request.post(`${apiState.baseUrl}/api/auth/login`, {
data: { username, password: 'fellowship123' },
});
await storeResponse(response, apiState);
});
// ── Generic HTTP steps ────────────────────────────────────────────────────────
When('I GET {string}', async ({ request, apiState }, path: string) => {
const response = await request.get(`${apiState.baseUrl}${path}`);
await storeResponse(response, apiState);
});
// ── Response status assertions ────────────────────────────────────────────────
Then('the response status should be {int}', async ({ apiState }, status: number) => {
expect(apiState.lastStatus).toBe(status);
});
Then('the response status should be less than {int}', async ({ apiState }, maxStatus: number) => {
expect(apiState.lastStatus).toBeLessThan(maxStatus);
});
Then('the response should be successful', async ({ apiState }) => {
expect(apiState.lastResponse!.ok()).toBeTruthy();
});
Then('the response status should be at least {int}', async ({ apiState }, minStatus: number) => {
expect(apiState.lastStatus).toBeGreaterThanOrEqual(minStatus);
});
// ── Response body assertions ──────────────────────────────────────────────────
Then('the response body should have property {string}', async ({ apiState }, prop: string) => {
expect(apiState.lastBody).toHaveProperty(prop);
});
Then(
'the response body property {string} should equal {string}',
async ({ apiState }, prop: string, value: string) => {
expect(apiState.lastBody[prop]).toBe(value);
}
);
Then('the response body should be an array', async ({ apiState }) => {
expect(Array.isArray(apiState.lastBody)).toBeTruthy();
});