84 lines
2.7 KiB
TypeScript
84 lines
2.7 KiB
TypeScript
import { expect, test } from '@playwright/test'
|
|
import { API_KEY_HEADER } from './helpers'
|
|
|
|
test.describe('Gateway Config API', () => {
|
|
test('GET /api/gateway-config returns config object and path', async ({ request }) => {
|
|
const res = await request.get('/api/gateway-config', {
|
|
headers: API_KEY_HEADER,
|
|
})
|
|
// Config path may not be set, or file may not exist
|
|
expect([200, 404, 500]).toContain(res.status())
|
|
|
|
const body = await res.json()
|
|
if (res.status() === 200) {
|
|
expect(body).toHaveProperty('path')
|
|
expect(body).toHaveProperty('config')
|
|
expect(body).toHaveProperty('raw_size')
|
|
expect(typeof body.raw_size).toBe('number')
|
|
} else {
|
|
expect(body).toHaveProperty('error')
|
|
}
|
|
})
|
|
|
|
test('GET /api/gateway-config returns hash for concurrency', async ({ request }) => {
|
|
const res = await request.get('/api/gateway-config', {
|
|
headers: API_KEY_HEADER,
|
|
})
|
|
expect([200, 404, 500]).toContain(res.status())
|
|
|
|
if (res.status() === 200) {
|
|
const body = await res.json()
|
|
expect(body).toHaveProperty('hash')
|
|
expect(typeof body.hash).toBe('string')
|
|
expect(body.hash.length).toBe(64) // sha256 hex
|
|
}
|
|
})
|
|
|
|
test('GET /api/gateway-config?action=schema returns schema or graceful error', async ({ request }) => {
|
|
const res = await request.get('/api/gateway-config?action=schema', {
|
|
headers: API_KEY_HEADER,
|
|
})
|
|
// Gateway may not be running, so 502 is expected
|
|
expect([200, 502]).toContain(res.status())
|
|
|
|
const body = await res.json()
|
|
if (res.status() === 200) {
|
|
expect(typeof body).toBe('object')
|
|
} else {
|
|
expect(body).toHaveProperty('error')
|
|
}
|
|
})
|
|
|
|
test('PUT /api/gateway-config rejects without auth', async ({ request }) => {
|
|
const res = await request.put('/api/gateway-config', {
|
|
headers: { 'Content-Type': 'application/json' },
|
|
data: { updates: { 'test.key': 'value' } },
|
|
})
|
|
expect(res.status()).toBe(401)
|
|
})
|
|
|
|
test('PUT /api/gateway-config with stale hash returns 409', async ({ request }) => {
|
|
// First check if config is accessible
|
|
const getRes = await request.get('/api/gateway-config', {
|
|
headers: API_KEY_HEADER,
|
|
})
|
|
|
|
if (getRes.status() !== 200) {
|
|
test.skip(true, 'Config file not available')
|
|
return
|
|
}
|
|
|
|
const res = await request.put('/api/gateway-config', {
|
|
headers: API_KEY_HEADER,
|
|
data: {
|
|
updates: { 'logging.redactSensitive': 'all' },
|
|
hash: 'stale-hash-that-does-not-match',
|
|
},
|
|
})
|
|
expect(res.status()).toBe(409)
|
|
const body = await res.json()
|
|
expect(body).toHaveProperty('error')
|
|
expect(body.error).toContain('modified')
|
|
})
|
|
})
|