Files
cloudron-box/src/routes/test/applinks-test.js
Girish Ramakrishnan d0a66f1701 Back to mocha!
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.
2026-02-19 13:24:14 +01:00

84 lines
3.1 KiB
JavaScript

import { describe, it, before, after } from 'mocha';
import applinks from '../../applinks.js';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
describe('AppLinks API', function () {
const { setup, cleanup, serverUrl, owner } = common;
before(setup);
after(cleanup);
let applinkId;
it('can add applink', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/applinks`)
.query({ access_token: owner.token })
.send({ label: 'Berlin', tags: ['city'], upstreamUri: 'https://www.berlin.de', accessRestriction: null });
assert.equal(response.status, 201);
assert.ok(response.body.id);
applinkId = response.body.id;
});
it('cannot get random applink', async function () {
const response = await superagent.get(`${serverUrl}/api/v1/applinks/random`)
.query({ access_token: owner.token })
.ok(() => true);
assert.equal(response.status, 404);
});
it('cannot get valid applink', async function () {
const response = await superagent.get(`${serverUrl}/api/v1/applinks/${applinkId}`)
.query({ access_token: owner.token })
.ok(() => true);
assert.equal(response.status, 200);
assert.equal(response.body.upstreamUri, 'https://www.berlin.de');
});
it('can get get icon', async function () {
const response = await superagent.get(`${serverUrl}/api/v1/applinks/${applinkId}/icon`)
.query({ access_token: owner.token })
.ok(() => true);
assert.equal(response.status, 200);
assert.equal(response.headers['content-type'], 'application/octet-stream');
});
it('can update applink tags', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/applinks/${applinkId}`)
.query({ access_token: owner.token })
.send({ tags: ['city', 'germany'] });
assert.equal(response.status, 200);
const result = await applinks.get(applinkId);
assert.deepEqual(result.tags, ['city', 'germany']);
});
it('can list applinks', async function () {
const response = await superagent.get(`${serverUrl}/api/v1/applinks`)
.query({ access_token: owner.token });
assert.equal(response.status, 200);
assert.equal(response.body.applinks.length, 1);
assert.equal(response.body.applinks[0].upstreamUri, 'https://www.berlin.de');
});
it('cannot del random applink', async function () {
const response = await superagent.del(`${serverUrl}/api/v1/applinks/random`)
.query({ access_token: owner.token })
.ok(() => true);
assert.equal(response.status, 404);
});
it('can del applink', async function () {
const response = await superagent.del(`${serverUrl}/api/v1/applinks/${applinkId}`)
.query({ access_token: owner.token })
.ok(() => true);
assert.equal(response.status, 204);
const result = await applinks.get(applinkId);
assert.equal(result, null);
});
});