fix: implement bearer token handling in TestDataManager and add API helper authorization tests
This commit is contained in:
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user