fix: implement bearer token handling in TestDataManager and add API helper authorization tests

This commit is contained in:
GitHub Actions
2026-02-24 21:07:10 +00:00
parent 2b4f60615f
commit bf53712b7c
3 changed files with 113 additions and 7 deletions

View File

@@ -163,20 +163,36 @@ export class TestDataManager {
private namespace: string;
private request: APIRequestContext;
private baseURLPromise: Promise<string> | null = null;
private authBearerToken: string | null;
/**
* Creates a new TestDataManager instance
* @param request - Playwright API request context
* @param testName - Optional test name for namespace generation
*/
constructor(request: APIRequestContext, testName?: string) {
constructor(request: APIRequestContext, testName?: string, authBearerToken?: string) {
this.request = request;
this.authBearerToken = authBearerToken ?? null;
// Create unique namespace per test to avoid conflicts
this.namespace = testName
? `test-${this.sanitize(testName)}-${Date.now()}`
: `test-${crypto.randomUUID()}`;
}
private buildRequestHeaders(
extra: Record<string, string> = {}
): Record<string, string> | undefined {
const headers = {
...extra,
};
if (this.authBearerToken) {
headers.Authorization = `Bearer ${this.authBearerToken}`;
}
return Object.keys(headers).length > 0 ? headers : undefined;
}
private async getBaseURL(): Promise<string> {
if (this.baseURLPromise) {
return await this.baseURLPromise;
@@ -230,7 +246,10 @@ export class TestDataManager {
const retryStatuses = options.retryStatuses ?? [429];
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
const response = await this.request.post(url, { data });
const response = await this.request.post(url, {
data,
headers: this.buildRequestHeaders(),
});
if (!retryStatuses.includes(response.status()) || attempt === maxAttempts) {
return response;
}
@@ -244,7 +263,10 @@ export class TestDataManager {
await new Promise((resolve) => setTimeout(resolve, backoffMs));
}
return this.request.post(url, { data });
return this.request.post(url, {
data,
headers: this.buildRequestHeaders(),
});
}
private async deleteWithRetry(
@@ -260,7 +282,9 @@ export class TestDataManager {
const retryStatuses = options.retryStatuses ?? [429];
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
const response = await this.request.delete(url);
const response = await this.request.delete(url, {
headers: this.buildRequestHeaders(),
});
if (!retryStatuses.includes(response.status()) || attempt === maxAttempts) {
return response;
}
@@ -274,7 +298,9 @@ export class TestDataManager {
await new Promise((resolve) => setTimeout(resolve, backoffMs));
}
return this.request.delete(url);
return this.request.delete(url, {
headers: this.buildRequestHeaders(),
});
}
/**
@@ -307,6 +333,7 @@ export class TestDataManager {
const response = await this.request.post('/api/v1/proxy-hosts', {
data: payload,
timeout: 30000, // 30s timeout
headers: this.buildRequestHeaders(),
});
if (!response.ok()) {
@@ -396,6 +423,7 @@ export class TestDataManager {
const response = await this.request.post('/api/v1/certificates', {
data: namespaced,
headers: this.buildRequestHeaders(),
});
if (!response.ok()) {
@@ -441,6 +469,7 @@ export class TestDataManager {
const response = await this.request.post('/api/v1/dns-providers', {
data: payload,
headers: this.buildRequestHeaders(),
});
if (!response.ok()) {