first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:52:23 +03:00
commit 880f412e2c
2662 changed files with 866266 additions and 0 deletions

View File

@@ -0,0 +1,228 @@
import { APIRequestContext, APIResponse } from '@playwright/test'
/**
* API helper functions for test setup and cleanup
*/
const API_BASE = '/api'
/**
* Handle API response with error checking
*/
async function handleResponse<T>(response: APIResponse, operation: string): Promise<T> {
if (!response.ok()) {
throw new Error(`${operation} failed: ${response.status()} ${response.statusText()}`)
}
return response.json() as Promise<T>
}
/**
* Provider API helpers
*/
export const providersApi = {
/**
* Get all providers
*/
async getAll(request: APIRequestContext) {
const response = await request.get(`${API_BASE}/providers`)
return handleResponse(response, 'Get all providers')
},
/**
* Get a specific provider
*/
async get(request: APIRequestContext, name: string) {
const response = await request.get(`${API_BASE}/providers/${name}`)
return handleResponse(response, `Get provider ${name}`)
},
/**
* Create a provider
*/
async create(request: APIRequestContext, data: unknown) {
const response = await request.post(`${API_BASE}/providers`, {
data,
})
return handleResponse(response, 'Create provider')
},
/**
* Update a provider
*/
async update(request: APIRequestContext, name: string, data: unknown) {
const response = await request.put(`${API_BASE}/providers/${name}`, {
data,
})
return handleResponse(response, `Update provider ${name}`)
},
/**
* Delete a provider
*/
async delete(request: APIRequestContext, name: string) {
const response = await request.delete(`${API_BASE}/providers/${name}`)
return response.ok()
},
}
/**
* Virtual Keys API helpers
*/
export const virtualKeysApi = {
/**
* Get all virtual keys
*/
async getAll(request: APIRequestContext) {
const response = await request.get(`${API_BASE}/governance/virtual-keys`)
return handleResponse(response, 'Get all virtual keys')
},
/**
* Get a specific virtual key
*/
async get(request: APIRequestContext, id: string) {
const response = await request.get(`${API_BASE}/governance/virtual-keys/${id}`)
return handleResponse(response, `Get virtual key ${id}`)
},
/**
* Create a virtual key
*/
async create(request: APIRequestContext, data: unknown) {
const response = await request.post(`${API_BASE}/governance/virtual-keys`, {
data,
})
return handleResponse(response, 'Create virtual key')
},
/**
* Update a virtual key
*/
async update(request: APIRequestContext, id: string, data: unknown) {
const response = await request.put(`${API_BASE}/governance/virtual-keys/${id}`, {
data,
})
return handleResponse(response, `Update virtual key ${id}`)
},
/**
* Delete a virtual key
*/
async delete(request: APIRequestContext, id: string) {
const response = await request.delete(`${API_BASE}/governance/virtual-keys/${id}`)
return response.ok()
},
}
/**
* Teams API helpers
*/
export const teamsApi = {
/**
* Get all teams
*/
async getAll(request: APIRequestContext) {
const response = await request.get(`${API_BASE}/governance/teams`)
return handleResponse(response, 'Get all teams')
},
/**
* Create a team
*/
async create(request: APIRequestContext, data: unknown) {
const response = await request.post(`${API_BASE}/governance/teams`, {
data,
})
return handleResponse(response, 'Create team')
},
/**
* Delete a team
*/
async delete(request: APIRequestContext, id: string) {
const response = await request.delete(`${API_BASE}/governance/teams/${id}`)
return response.ok()
},
}
/**
* Customers API helpers
*/
export const customersApi = {
/**
* Get all customers
*/
async getAll(request: APIRequestContext) {
const response = await request.get(`${API_BASE}/governance/customers`)
return handleResponse(response, 'Get all customers')
},
/**
* Create a customer
*/
async create(request: APIRequestContext, data: unknown) {
const response = await request.post(`${API_BASE}/governance/customers`, {
data,
})
return handleResponse(response, 'Create customer')
},
/**
* Delete a customer
*/
async delete(request: APIRequestContext, id: string) {
const response = await request.delete(`${API_BASE}/governance/customers/${id}`)
return response.ok()
},
}
/**
* Cleanup helper - delete all test data
*/
export async function cleanupTestData(
request: APIRequestContext,
options: {
virtualKeyIds?: string[]
teamIds?: string[]
customerIds?: string[]
providerNames?: string[]
}
): Promise<void> {
const { virtualKeyIds = [], teamIds = [], customerIds = [], providerNames = [] } = options
// Delete virtual keys first (they may depend on teams/customers)
for (const id of virtualKeyIds) {
try {
await virtualKeysApi.delete(request, id)
} catch (e) {
// Ignore errors during cleanup
}
}
// Delete teams
for (const id of teamIds) {
try {
await teamsApi.delete(request, id)
} catch (e) {
// Ignore errors during cleanup
}
}
// Delete customers
for (const id of customerIds) {
try {
await customersApi.delete(request, id)
} catch (e) {
// Ignore errors during cleanup
}
}
// Delete custom providers
for (const name of providerNames) {
try {
await providersApi.delete(request, name)
} catch (e) {
// Ignore errors during cleanup
}
}
}

View File

@@ -0,0 +1,86 @@
import { Page } from '@playwright/test'
import { waitForNetworkIdle } from '../utils/test-helpers'
/**
* Navigation helper functions
*/
/**
* Navigate to the workspace root
*/
export async function goToWorkspace(page: Page): Promise<void> {
await page.goto('/workspace')
await waitForNetworkIdle(page)
}
/**
* Navigate to Providers page
*/
export async function goToProviders(page: Page): Promise<void> {
await page.goto('/workspace/providers')
await waitForNetworkIdle(page)
}
/**
* Navigate to Virtual Keys page
*/
export async function goToVirtualKeys(page: Page): Promise<void> {
await page.goto('/workspace/virtual-keys')
await waitForNetworkIdle(page)
}
/**
* Navigate to User Groups page
*/
export async function goToUserGroups(page: Page): Promise<void> {
await page.goto('/workspace/user-groups')
await waitForNetworkIdle(page)
}
/**
* Navigate to MCP Clients page
*/
export async function goToMCPClients(page: Page): Promise<void> {
await page.goto('/workspace/mcp-clients')
await waitForNetworkIdle(page)
}
/**
* Navigate to Logs page
*/
export async function goToLogs(page: Page): Promise<void> {
await page.goto('/workspace/logs')
await waitForNetworkIdle(page)
}
/**
* Navigate to Plugins page
*/
export async function goToPlugins(page: Page): Promise<void> {
await page.goto('/workspace/plugins')
await waitForNetworkIdle(page)
}
/**
* Navigate to Config page
*/
export async function goToConfig(page: Page): Promise<void> {
await page.goto('/workspace/config')
await waitForNetworkIdle(page)
}
/**
* Navigate to a specific provider
*/
export async function goToProvider(page: Page, providerName: string): Promise<void> {
await page.goto(`/workspace/providers?provider=${encodeURIComponent(providerName)}`)
await waitForNetworkIdle(page)
}
/**
* Navigate to a specific virtual key
*/
export async function goToVirtualKey(page: Page, vkId: string): Promise<void> {
await page.goto(`/workspace/virtual-keys?vk=${encodeURIComponent(vkId)}`)
await waitForNetworkIdle(page)
}