Feat v0.6.6 final hardening (#41)
All checks were successful
CI/CD / detect-changes (push) Successful in 4s
CI/CD / test-frontend (push) Successful in 6s
CI/CD / test-go-pg (push) Successful in 2m47s
CI/CD / test-sqlite (push) Successful in 3m1s
CI/CD / build-and-deploy (push) Successful in 29s

Co-authored-by: Jeffrey Smith <jasafpro@gmail.com>
Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
This commit was merged in pull request #41.
This commit is contained in:
2026-03-31 17:40:40 +00:00
committed by xcaliber
parent 81c28a50bf
commit 7915d84c8b
19 changed files with 625 additions and 131 deletions

View File

@@ -442,6 +442,48 @@
T.assertHasKey(d, 'data', '/admin/memories/pending');
T.assert(Array.isArray(d.data), 'data should be array');
});
// -- v0.6.x Admin endpoints --
await T.test('smoke', 'admin', 'GET /admin/metrics', async function () {
var d = await T.apiGet('/admin/metrics');
T.assert(typeof d === 'object', 'expected object');
T.assertHasKey(d, 'runtime', '/admin/metrics');
T.assertHasKey(d, 'database', '/admin/metrics');
});
await T.test('smoke', 'admin', 'GET /admin/cluster', async function () {
var d = await T.apiGet('/admin/cluster');
T.assertHasKey(d, 'data', '/admin/cluster');
T.assert(Array.isArray(d.data), 'cluster nodes should be array');
});
await T.test('smoke', 'admin', 'GET /admin/backups', async function () {
var d = await T.apiGet('/admin/backups');
T.assertHasKey(d, 'data', '/admin/backups');
T.assert(Array.isArray(d.data), 'backups should be array');
});
}
// -- Docs API --
await T.test('smoke', 'utility', 'GET /docs', async function () {
var d = await T.apiGet('/docs');
T.assertHasKey(d, 'data', '/docs');
T.assert(Array.isArray(d.data), 'docs should be array');
});
// -- Dynamic OpenAPI spec (outside /api/v1 prefix) --
await T.test('smoke', 'utility', 'GET /api/docs/openapi.json', async function () {
var token = await T.getAuthToken();
var resp = await fetch(T.base + '/api/docs/openapi.json', {
headers: { 'Authorization': 'Bearer ' + token },
credentials: 'same-origin'
});
T.assert(resp.ok, 'expected 200 from /api/docs/openapi.json, got ' + resp.status);
var d = await resp.json();
T.assertHasKey(d, 'openapi', 'openapi spec');
T.assertHasKey(d, 'paths', 'openapi spec');
T.assertHasKey(d, 'info', 'openapi spec');
});
};
})();

View File

@@ -149,5 +149,39 @@
raw: { method: 'GET', path: '/admin/projects' },
validate: function (r) { T.assert(Array.isArray(r) || (r && Array.isArray(r.data)), 'expected array'); }
});
// ── Metrics (v0.6.4+) ──
await T.test('admin', 'metrics', 'GET /admin/metrics (raw)', {
sdk: function () { return sw.api.get('/admin/metrics'); },
raw: { method: 'GET', path: '/admin/metrics' },
validate: function (r) {
T.assert(typeof r === 'object', 'expected object');
T.assertHasKey(r, 'runtime', 'metrics');
T.assertHasKey(r, 'database', 'metrics');
}
});
// ── Cluster (v0.6.0+) ──
await T.test('admin', 'cluster', 'GET /admin/cluster (raw)', {
sdk: function () { return sw.api.get('/admin/cluster'); },
raw: { method: 'GET', path: '/admin/cluster' },
validate: function (r) {
var arr = T.unwrapList(r);
T.assert(arr.length >= 0, 'expected cluster node list');
}
});
// ── Backups (v0.6.1+) ──
await T.test('admin', 'backups', 'GET /admin/backups (raw)', {
sdk: function () { return sw.api.get('/admin/backups'); },
raw: { method: 'GET', path: '/admin/backups' },
validate: function (r) {
var arr = T.unwrapList(r);
T.assert(arr.length >= 0, 'expected backup list');
}
});
});
})();