mirror of
https://github.com/whyour/qinglong.git
synced 2026-11-08 04:42:33 +08:00
70 lines
2.0 KiB
JavaScript
70 lines
2.0 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const test = require('node:test');
|
|
const express = require('express');
|
|
const { DatabaseClient } = require('../../back/data/databaseClient');
|
|
const { Repository } = require('../../back/data/repository');
|
|
const { initialize } = require('../helpers/repository-fixture.cjs');
|
|
|
|
function mockModule(modulePath, exports) {
|
|
const filename = require.resolve(modulePath);
|
|
require.cache[filename] = {
|
|
id: filename,
|
|
filename,
|
|
loaded: true,
|
|
exports,
|
|
children: [],
|
|
paths: [],
|
|
};
|
|
}
|
|
|
|
test('instance API retains newest-first ordering independently of insertion order', async (t) => {
|
|
const db = new DatabaseClient(':memory:');
|
|
t.after(() => db.close());
|
|
await initialize(db);
|
|
const instances = new Repository('RunningInstance', () => db);
|
|
for (const [cron_id, started_at] of [
|
|
[7, 200],
|
|
[7, 300],
|
|
[8, 900],
|
|
[7, 100],
|
|
]) {
|
|
await instances.insert({ cron_id, started_at, status: 2 });
|
|
}
|
|
for (const service of ['cron', 'cronView']) {
|
|
mockModule(`../../back/services/${service}`, {
|
|
__esModule: true,
|
|
default: class {},
|
|
});
|
|
}
|
|
mockModule('../../back/schedule/client', { __esModule: true, default: {} });
|
|
mockModule('../../back/shared/i18n', { t: (message) => message });
|
|
mockModule('../../back/data/runningInstance', {
|
|
RunningInstanceModel: instances,
|
|
InstanceStatus: { running: 0 },
|
|
});
|
|
const app = express.Router();
|
|
require('../../back/api/cron').default(app);
|
|
const router = app.stack.find((layer) => layer.name === 'router').handle;
|
|
const handler = router.stack
|
|
.find((layer) => layer.route?.path === '/:id/instances')
|
|
.route.stack.at(-1).handle;
|
|
let response;
|
|
await handler(
|
|
{ params: { id: 7 } },
|
|
{
|
|
send: (body) => {
|
|
response = body;
|
|
},
|
|
},
|
|
(error) => {
|
|
throw error;
|
|
},
|
|
);
|
|
assert.equal(response.code, 200);
|
|
assert.deepEqual(
|
|
response.data.map((row) => row.started_at),
|
|
[300, 200, 100],
|
|
);
|
|
assert(response.data.every((row) => row.cron_id === 7));
|
|
});
|