44 lines
1.9 KiB
JavaScript
44 lines
1.9 KiB
JavaScript
// smoke: permission read endpoints (Bearer, no RBAC required)
|
|
//
|
|
// Covers:
|
|
// GET /api/v1/permissions/catalog (?tree=true and flat)
|
|
// GET /api/v1/permissions/me (regular user → empty roles ok)
|
|
// GET /api/v1/permissions/me?include_tree=true
|
|
import { get, checkEnvelope } from '../lib/http.js';
|
|
import { registerAndConfirm } from '../lib/auth.js';
|
|
|
|
export const options = {
|
|
vus: 1,
|
|
iterations: 1,
|
|
thresholds: { checks: ['rate==1.0'] },
|
|
};
|
|
|
|
export default function () {
|
|
const { tokens } = registerAndConfirm();
|
|
const bearer = { Authorization: `Bearer ${tokens.access_token}` };
|
|
|
|
// GET /catalog (flat). When the catalog is empty (no perms seeded into
|
|
// gateway_k6) the Go struct uses `omitempty`, so both list and tree are
|
|
// legitimately stripped from the response; the envelope success is enough
|
|
// to prove the endpoint and auth chain work. When perms ARE seeded
|
|
// (after k6-seed-admin), .list is a non-empty array.
|
|
const flat = checkEnvelope(get('/api/v1/permissions/catalog', bearer), 'GET /permissions/catalog').data;
|
|
if (flat && flat.list !== undefined && !Array.isArray(flat.list)) {
|
|
throw new Error(`catalog: .list is not an array: ${JSON.stringify(flat)}`);
|
|
}
|
|
|
|
// GET /catalog?tree=true (same envelope-only assertion).
|
|
const tree = checkEnvelope(get('/api/v1/permissions/catalog?tree=true', bearer), 'GET /permissions/catalog?tree=true').data;
|
|
if (tree && tree.tree !== undefined && !Array.isArray(tree.tree)) {
|
|
throw new Error(`catalog tree: .tree is not an array: ${JSON.stringify(tree)}`);
|
|
}
|
|
|
|
// GET /me
|
|
const me = checkEnvelope(get('/api/v1/permissions/me', bearer), 'GET /permissions/me').data;
|
|
if (me.uid !== tokens.uid) throw new Error('me.uid mismatch');
|
|
if (!Array.isArray(me.roles)) throw new Error('me.roles is not array');
|
|
|
|
// GET /me?include_tree=true
|
|
checkEnvelope(get('/api/v1/permissions/me?include_tree=true', bearer), 'GET /permissions/me?include_tree=true');
|
|
}
|