sorry i ever left you dear mocha node:test has two major issues: * --bail does not work and requires strange modules and incantations. I was able to work around this with a custom module. * the test reporter reports _after_ the suite is run. this makes debugging really hard. the debugs that we print all happen before the test suite summary. poor design overall.
108 lines
4.4 KiB
JavaScript
108 lines
4.4 KiB
JavaScript
import { describe, it, before, after } from 'mocha';
|
|
import common from './common.js';
|
|
import assert from 'node:assert/strict';
|
|
import superagent from '@cloudron/superagent';
|
|
import timers from 'timers/promises';
|
|
|
|
describe('Backups API', function () {
|
|
const { setup, cleanup, waitForTask, serverUrl, owner, admin, getDefaultBackupSite } = common;
|
|
|
|
before(setup);
|
|
after(cleanup);
|
|
|
|
let someBackup;
|
|
|
|
// create some backup first
|
|
before(async function () {
|
|
const site = await getDefaultBackupSite();
|
|
const response = await superagent.post(`${serverUrl}/api/v1/backup_sites/${site.id}/create_backup`)
|
|
.query({ access_token: admin.token });
|
|
assert.equal(response.status, 202);
|
|
assert.equal(typeof response.body.taskId, 'string');
|
|
await waitForTask(response.body.taskId);
|
|
});
|
|
|
|
it('can list', async function () {
|
|
const response = await superagent.get(`${serverUrl}/api/v1/backups`)
|
|
.query({ access_token: admin.token });
|
|
assert.equal(response.status, 200);
|
|
assert.equal(response.body.backups.length, 1);
|
|
someBackup = response.body.backups[0];
|
|
});
|
|
|
|
it('can list by site id', async function () {
|
|
const site = await getDefaultBackupSite();
|
|
const response = await superagent.get(`${serverUrl}/api/v1/backup_sites/${site.id}/backups`)
|
|
.query({ access_token: admin.token });
|
|
assert.equal(response.status, 200);
|
|
assert.equal(response.body.backups.length, 1); // only box backups are listed
|
|
});
|
|
|
|
it('cannot get random id', async function () {
|
|
const response = await superagent.get(`${serverUrl}/api/v1/backups/bad_id`)
|
|
.query({ access_token: owner.token })
|
|
.ok(() => true);
|
|
assert.equal(response.status, 404);
|
|
});
|
|
|
|
it('can get valid id', async function () {
|
|
const response = await superagent.get(`${serverUrl}/api/v1/backups/${someBackup.id}`)
|
|
.query({ access_token: owner.token })
|
|
.ok(() => true);
|
|
assert.equal(response.status, 200);
|
|
assert.equal(response.body.preserveSecs, 0);
|
|
assert.equal(response.body.label, '');
|
|
});
|
|
|
|
it('cannot update invalid preserve secs', async function () {
|
|
const response = await superagent.post(`${serverUrl}/api/v1/backups/${someBackup.id}`)
|
|
.query({ access_token: owner.token })
|
|
.send({ preserveSecs: 'not-a-number', label: 'some string' })
|
|
.ok(() => true);
|
|
assert.equal(response.status, 400);
|
|
});
|
|
|
|
it('can update', async function () {
|
|
const response = await superagent.post(`${serverUrl}/api/v1/backups/${someBackup.id}`)
|
|
.query({ access_token: owner.token })
|
|
.send({ preserveSecs: 30, label: 'NewOrleans' });
|
|
assert.equal(response.status, 200);
|
|
});
|
|
|
|
describe('integrity', function () {
|
|
it('start a check', async function () {
|
|
const response = await superagent.post(`${serverUrl}/api/v1/backups/${someBackup.id}/start_integrity_check`)
|
|
.query({ access_token: admin.token })
|
|
.send({});
|
|
assert.equal(response.status, 201);
|
|
const taskId = response.body.taskId;
|
|
assert.equal(typeof taskId, 'string');
|
|
});
|
|
|
|
it('wait for check', async function () {
|
|
let response;
|
|
for (let i = 0; i < 10; i++) {
|
|
response = await superagent.get(`${serverUrl}/api/v1/backups/${someBackup.id}`)
|
|
.query({ access_token: admin.token });
|
|
assert.equal(response.status, 200);
|
|
if (!response.body.integrityCheckTask?.active) break;
|
|
await timers.setTimeout(3000);
|
|
}
|
|
|
|
assert.equal(response.body.integrityCheckTask, null);
|
|
});
|
|
|
|
it('has integrity fields', async function () {
|
|
const response = await superagent.get(`${serverUrl}/api/v1/backups/${someBackup.id}`)
|
|
.query({ access_token: owner.token })
|
|
.ok(() => true);
|
|
assert.equal(response.status, 200);
|
|
assert.equal(typeof response.body.lastIntegrityCheckTime, 'string');
|
|
assert.equal(response.body.integrityCheckStatus, 'passed');
|
|
assert.deepEqual(response.body.integrityCheckResult.messages, []);
|
|
assert.equal(typeof response.body.integrityCheckResult.stats, 'object');
|
|
assert.equal(response.body.integrityCheckTask, null);
|
|
});
|
|
});
|
|
});
|