feat(server): use doc service (#9967)

close CLOUD-94
This commit is contained in:
fengmk2
2025-02-08 05:27:56 +00:00
parent ee0df52531
commit e5d1cd9ea2
17 changed files with 423 additions and 127 deletions
@@ -1,67 +1,39 @@
import { mock } from 'node:test';
import { ScheduleModule } from '@nestjs/schedule';
import { TestingModule } from '@nestjs/testing';
import { PrismaClient } from '@prisma/client';
import test from 'ava';
import * as Sinon from 'sinon';
import ava, { TestFn } from 'ava';
import { Config } from '../../base/config';
import { DocStorageModule } from '../../core/doc';
import { DocStorageCronJob } from '../../core/doc/job';
import { createTestingModule } from '../utils';
import { createTestingModule, type TestingModule } from '../utils';
let m: TestingModule;
let timer: Sinon.SinonFakeTimers;
let db: PrismaClient;
interface Context {
module: TestingModule;
db: PrismaClient;
cronJob: DocStorageCronJob;
}
const test = ava as TestFn<Context>;
// cleanup database before each test
test.before(async () => {
timer = Sinon.useFakeTimers({
toFake: ['setInterval'],
});
m = await createTestingModule({
test.before(async t => {
t.context.module = await createTestingModule({
imports: [ScheduleModule.forRoot(), DocStorageModule],
});
db = m.get(PrismaClient);
t.context.db = t.context.module.get(PrismaClient);
t.context.cronJob = t.context.module.get(DocStorageCronJob);
});
test.after.always(async () => {
await m.close();
timer.restore();
test.beforeEach(async t => {
await t.context.module.initTestingDB();
});
test('should poll when intervel due', async t => {
const manager = m.get(DocStorageCronJob);
const interval = m.get(Config).doc.manager.updatePollInterval;
let resolve: any;
const fake = mock.method(manager, 'autoMergePendingDocUpdates', () => {
return new Promise(_resolve => {
resolve = _resolve;
});
});
timer.tick(interval);
t.is(fake.mock.callCount(), 1);
// busy
timer.tick(interval);
// @ts-expect-error private member
t.is(manager.busy, true);
t.is(fake.mock.callCount(), 1);
resolve();
await timer.tickAsync(1);
// @ts-expect-error private member
t.is(manager.busy, false);
timer.tick(interval);
t.is(fake.mock.callCount(), 2);
test.after.always(async t => {
await t.context.module.close();
});
test('should be able to cleanup expired history', async t => {
const { db } = t.context;
const timestamp = Date.now();
// insert expired data
@@ -93,7 +65,7 @@ test('should be able to cleanup expired history', async t => {
let count = await db.snapshotHistory.count();
t.is(count, 20);
await m.get(DocStorageCronJob).cleanupExpiredHistory();
await t.context.cronJob.cleanupExpiredHistory();
count = await db.snapshotHistory.count();
t.is(count, 10);