mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-11 14:08:55 +08:00
fix: test & lint
This commit is contained in:
@@ -550,9 +550,17 @@
|
|||||||
"path": {
|
"path": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"required": [
|
||||||
|
"path"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"required": [
|
||||||
|
"provider",
|
||||||
|
"bucket",
|
||||||
|
"config"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default": {
|
"default": {
|
||||||
@@ -771,9 +779,17 @@
|
|||||||
"path": {
|
"path": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"required": [
|
||||||
|
"path"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"required": [
|
||||||
|
"provider",
|
||||||
|
"bucket",
|
||||||
|
"config"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default": {
|
"default": {
|
||||||
@@ -1435,9 +1451,17 @@
|
|||||||
"path": {
|
"path": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"required": [
|
||||||
|
"path"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"required": [
|
||||||
|
"provider",
|
||||||
|
"bucket",
|
||||||
|
"config"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default": {
|
"default": {
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
import { randomUUID } from 'node:crypto';
|
import { randomUUID } from 'node:crypto';
|
||||||
|
|
||||||
|
import { Global, Module } from '@nestjs/common';
|
||||||
import type { Prisma } from '@prisma/client';
|
import type { Prisma } from '@prisma/client';
|
||||||
import type { ExecutionContext, TestFn } from 'ava';
|
import type { ExecutionContext, TestFn } from 'ava';
|
||||||
import ava from 'ava';
|
import ava from 'ava';
|
||||||
import Sinon from 'sinon';
|
import Sinon from 'sinon';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
|
import { AppModuleBuilder, FunctionalityModules } from '../../app.module';
|
||||||
|
import { JobModule, JobQueue } from '../../base';
|
||||||
import { ServerFeature, ServerService } from '../../core';
|
import { ServerFeature, ServerService } from '../../core';
|
||||||
import { AuthService } from '../../core/auth';
|
import { AuthModule, AuthService } from '../../core/auth';
|
||||||
import { QuotaModule } from '../../core/quota';
|
import { QuotaModule } from '../../core/quota';
|
||||||
import { Models } from '../../models';
|
import { Models } from '../../models';
|
||||||
import { llmImageDispatchPlan } from '../../native';
|
import { llmImageDispatchPlan } from '../../native';
|
||||||
@@ -25,6 +28,7 @@ import { ChatSession, ChatSessionService } from '../../plugins/copilot/session';
|
|||||||
import { TranscriptPayloadSchema } from '../../plugins/copilot/transcript/schema';
|
import { TranscriptPayloadSchema } from '../../plugins/copilot/transcript/schema';
|
||||||
import { CopilotTranscriptionService } from '../../plugins/copilot/transcript/service';
|
import { CopilotTranscriptionService } from '../../plugins/copilot/transcript/service';
|
||||||
import { TestingPromptService } from '../mocks/prompt-service.mock';
|
import { TestingPromptService } from '../mocks/prompt-service.mock';
|
||||||
|
import { MockJobQueue } from '../mocks/queue.mock';
|
||||||
import { createTestingModule, TestingModule } from '../utils';
|
import { createTestingModule, TestingModule } from '../utils';
|
||||||
import { TestAssets } from '../utils/copilot';
|
import { TestAssets } from '../utils/copilot';
|
||||||
import {
|
import {
|
||||||
@@ -48,6 +52,13 @@ type Tester = {
|
|||||||
|
|
||||||
const test = ava as TestFn<Tester>;
|
const test = ava as TestFn<Tester>;
|
||||||
|
|
||||||
|
@Global()
|
||||||
|
@Module({
|
||||||
|
providers: [{ provide: JobQueue, useClass: MockJobQueue }],
|
||||||
|
exports: [JobQueue],
|
||||||
|
})
|
||||||
|
class MockJobModule {}
|
||||||
|
|
||||||
let isCopilotConfigured = false;
|
let isCopilotConfigured = false;
|
||||||
const runIfCopilotConfigured = test.macro(
|
const runIfCopilotConfigured = test.macro(
|
||||||
async (
|
async (
|
||||||
@@ -64,8 +75,20 @@ const runIfCopilotConfigured = test.macro(
|
|||||||
);
|
);
|
||||||
|
|
||||||
test.serial.before(async t => {
|
test.serial.before(async t => {
|
||||||
|
const appModule = new AppModuleBuilder()
|
||||||
|
.use(
|
||||||
|
...FunctionalityModules.filter(module => {
|
||||||
|
const moduleType = 'module' in module ? module.module : module;
|
||||||
|
return moduleType !== JobModule;
|
||||||
|
}),
|
||||||
|
MockJobModule,
|
||||||
|
AuthModule,
|
||||||
|
QuotaModule,
|
||||||
|
CopilotModule
|
||||||
|
)
|
||||||
|
.compile();
|
||||||
const module = await createTestingModule({
|
const module = await createTestingModule({
|
||||||
imports: [QuotaModule, CopilotModule],
|
imports: [appModule],
|
||||||
tapModule: builder => {
|
tapModule: builder => {
|
||||||
builder.overrideProvider(PromptService).useClass(TestingPromptService);
|
builder.overrideProvider(PromptService).useClass(TestingPromptService);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -8,6 +8,13 @@ import { Redis as IORedis, RedisOptions } from 'ioredis';
|
|||||||
|
|
||||||
import { Config } from '../config';
|
import { Config } from '../config';
|
||||||
|
|
||||||
|
function redisOptions(options: RedisOptions) {
|
||||||
|
return {
|
||||||
|
...(env.testing ? { lazyConnect: true } : {}),
|
||||||
|
...options,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
class Redis extends IORedis implements OnModuleInit, OnModuleDestroy {
|
class Redis extends IORedis implements OnModuleInit, OnModuleDestroy {
|
||||||
private readonly logger = new Logger(this.constructor.name);
|
private readonly logger = new Logger(this.constructor.name);
|
||||||
|
|
||||||
@@ -47,41 +54,47 @@ class Redis extends IORedis implements OnModuleInit, OnModuleDestroy {
|
|||||||
@Injectable()
|
@Injectable()
|
||||||
export class CacheRedis extends Redis {
|
export class CacheRedis extends Redis {
|
||||||
constructor(config: Config) {
|
constructor(config: Config) {
|
||||||
super({ ...config.redis, ...config.redis.ioredis });
|
super(redisOptions({ ...config.redis, ...config.redis.ioredis }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SessionRedis extends Redis {
|
export class SessionRedis extends Redis {
|
||||||
constructor(config: Config) {
|
constructor(config: Config) {
|
||||||
super({
|
super(
|
||||||
...config.redis,
|
redisOptions({
|
||||||
...config.redis.ioredis,
|
...config.redis,
|
||||||
db: (config.redis.db ?? 0) + 2,
|
...config.redis.ioredis,
|
||||||
});
|
db: (config.redis.db ?? 0) + 2,
|
||||||
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SocketIoRedis extends Redis {
|
export class SocketIoRedis extends Redis {
|
||||||
constructor(config: Config) {
|
constructor(config: Config) {
|
||||||
super({
|
super(
|
||||||
...config.redis,
|
redisOptions({
|
||||||
...config.redis.ioredis,
|
...config.redis,
|
||||||
db: (config.redis.db ?? 0) + 3,
|
...config.redis.ioredis,
|
||||||
});
|
db: (config.redis.db ?? 0) + 3,
|
||||||
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class QueueRedis extends Redis {
|
export class QueueRedis extends Redis {
|
||||||
constructor(config: Config) {
|
constructor(config: Config) {
|
||||||
super({
|
super(
|
||||||
...config.redis,
|
redisOptions({
|
||||||
...config.redis.ioredis,
|
...config.redis,
|
||||||
db: (config.redis.db ?? 0) + 4,
|
...config.redis.ioredis,
|
||||||
// required explicitly set to `null` by bullmq
|
db: (config.redis.db ?? 0) + 4,
|
||||||
maxRetriesPerRequest: null,
|
// required explicitly set to `null` by bullmq
|
||||||
});
|
maxRetriesPerRequest: null,
|
||||||
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user