From 43561f237eb46d7b6701d27cc60707f4d8aadeb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B9=AF=E6=9C=AC=20=E9=96=8B?= Date: Tue, 12 Mar 2024 03:57:29 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20PR=20822:=20=E3=82=AF=E3=82=A8?= =?UTF-8?q?=E3=83=AA=E6=AF=94=E8=BC=83=E7=94=A8=E3=83=AD=E3=82=B0=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=E3=81=AE=E4=BB=95=E7=B5=84=E3=81=BF=E3=82=92=E6=94=B9?= =?UTF-8?q?=E8=89=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task3889: クエリ比較用ログ出力の仕組みを改良](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3889) - SQLクエリを比較可能とするための仕組みを導入 - UUIDや日付等の実行の度に変更される要素を出力段階で置き換えてしまうロガーを追加 - テストで上記ロガーを使うよう修正 - テストで使用する環境変数が必要がないのにlocalを指定するようになっていたため、production想定でテストが実施されるようテスト用環境変数ファイルを変更 ## レビューポイント - この仕組みを使ってデグレを防ぐための「クエリの変更内容を確認する」事が問題なく出来そうか ## UIの変更 - なし ## クエリの変更 - なし ## 動作確認状況 - npm run test が正常に実施されることを確認 - 行った修正がデグレを発生させていないことを確認できるか - testファイルにしか参照されない変更なので、デグレは原理的に発生しないはず - testも正常に成功したことを確認したので、デグレは発生していないはず --- dictation_server/.env.test | 2 +- dictation_server/.gitignore | 1 + dictation_server/src/common/test/logger.ts | 94 ++++++++++++++++--- .../accounts/accounts.service.spec.ts | 59 ++++++++++++ .../src/features/auth/auth.service.spec.ts | 9 ++ .../src/features/files/files.service.spec.ts | 13 +++ .../licenses/licenses.service.spec.ts | 13 +++ .../src/features/tasks/tasks.service.spec.ts | 19 ++++ .../templates/templates.service.spec.ts | 5 + .../src/features/terms/terms.service.spec.ts | 3 + .../src/features/users/users.service.spec.ts | 22 ++++- .../workflows/workflows.service.spec.ts | 9 ++ 12 files changed, 232 insertions(+), 17 deletions(-) diff --git a/dictation_server/.env.test b/dictation_server/.env.test index 81bb261..07d483e 100644 --- a/dictation_server/.env.test +++ b/dictation_server/.env.test @@ -1,4 +1,4 @@ -STAGE=local +STAGE=production NO_COLOR=TRUE CORS=TRUE PORT=8081 diff --git a/dictation_server/.gitignore b/dictation_server/.gitignore index 63e9c25..21d6308 100644 --- a/dictation_server/.gitignore +++ b/dictation_server/.gitignore @@ -3,6 +3,7 @@ /dump.rdb /build /openapi/build +/.test # credentials credentials diff --git a/dictation_server/src/common/test/logger.ts b/dictation_server/src/common/test/logger.ts index a6f3ba1..93067ff 100644 --- a/dictation_server/src/common/test/logger.ts +++ b/dictation_server/src/common/test/logger.ts @@ -2,27 +2,91 @@ import { Logger, QueryRunner } from 'typeorm'; import * as fs from 'fs'; import * as path from 'path'; -export class FileLogger implements Logger { - private logPath = path.join(__dirname, 'logs'); +interface IOutput { + initialize(): void; + write(message: string): void; +} - constructor() { +class ConsoleOutput implements IOutput { + initialize(): void { + // do nothing + } + + write(message: string): void { + console.log(message); + } +} + +class FileOutput implements IOutput { + private logPath = path.join('/app/dictation_server/.test', 'logs'); + private fileName = new Date().getTime(); + + initialize(): void { if (!fs.existsSync(this.logPath)) { fs.mkdirSync(this.logPath, { recursive: true }); } } - private writeToFile(message: string): void { - const logFile = path.join( - this.logPath, - `${new Date().toISOString().split('T')[0]}.log`, - ); + write(message: string): void { + const logFile = path.join(this.logPath, `${this.fileName}.log`); fs.appendFileSync(logFile, `${message}\n`); } +} + +class NoneOutput implements IOutput { + initialize(): void { + // do nothing + } + + write(message: string): void { + // do nothing + } +} + +export class TestLogger implements Logger { + out: IOutput; + + constructor(output: 'none' | 'file' | 'console') { + switch (output) { + case 'none': + this.out = new NoneOutput(); + break; + case 'file': + this.out = new FileOutput(); + break; + case 'console': + this.out = new ConsoleOutput(); + break; + default: + this.out = new NoneOutput(); + break; + } + this.out.initialize(); + } + + private write(message: string): void { + this.out.write(message); + } logQuery(query: string, parameters?: any[], queryRunner?: QueryRunner) { - this.writeToFile( - `Query: ${query} -- Parameters: ${JSON.stringify(parameters)}`, + const raw = `Query: ${query} -- Parameters: ${JSON.stringify(parameters)}`; + // ex: 2024-03-08T06:38:43.125Z を TIME という文字列に置換 + const dateRemoved = raw.replace( + /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/g, + 'TIME', ); + // ex: /* コメント内容 */ を /* コメント */ という文字列に置換 + const commentRemoved = dateRemoved.replace( + /\/\*.*\*\//g, + '/* RequestID */', + ); + + // UUIDを固定文字列に置換する ex: 88a9c78e-115a-439c-9e23-731d649f0c27 を XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX という文字列に置換 + const uuidRemoved = commentRemoved.replace( + /[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/g, + 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', + ); + this.write(uuidRemoved); } logQueryError( @@ -31,7 +95,7 @@ export class FileLogger implements Logger { parameters?: any[], queryRunner?: QueryRunner, ) { - this.writeToFile( + this.write( `ERROR: ${error} -- Query: ${query} -- Parameters: ${JSON.stringify( parameters, )}`, @@ -44,7 +108,7 @@ export class FileLogger implements Logger { parameters?: any[], queryRunner?: QueryRunner, ) { - this.writeToFile( + this.write( `SLOW QUERY: ${time}ms -- Query: ${query} -- Parameters: ${JSON.stringify( parameters, )}`, @@ -52,14 +116,14 @@ export class FileLogger implements Logger { } logSchemaBuild(message: string, queryRunner?: QueryRunner) { - this.writeToFile(`Schema Build: ${message}`); + this.write(`Schema Build: ${message}`); } logMigration(message: string, queryRunner?: QueryRunner) { - this.writeToFile(`Migration: ${message}`); + this.write(`Migration: ${message}`); } log(level: 'log' | 'info' | 'warn', message: any, queryRunner?: QueryRunner) { - this.writeToFile(`${level.toUpperCase()}: ${message}`); + this.write(`${level.toUpperCase()}: ${message}`); } } diff --git a/dictation_server/src/features/accounts/accounts.service.spec.ts b/dictation_server/src/features/accounts/accounts.service.spec.ts index 6eb5918..c20e6e6 100644 --- a/dictation_server/src/features/accounts/accounts.service.spec.ts +++ b/dictation_server/src/features/accounts/accounts.service.spec.ts @@ -91,6 +91,7 @@ import { UsersService } from '../users/users.service'; import { truncateAllTable } from '../../common/test/init'; import { createTask, getCheckoutPermissions } from '../tasks/test/utility'; import { createCheckoutPermissions } from '../tasks/test/utility'; +import { TestLogger } from '../../common/test/logger'; describe('createAccount', () => { let source: DataSource | null = null; @@ -106,6 +107,8 @@ describe('createAccount', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -818,6 +821,8 @@ describe('createPartnerAccount', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -1816,6 +1821,8 @@ describe('getLicenseSummary', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2098,6 +2105,8 @@ describe('getPartnerAccount', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2252,6 +2261,8 @@ describe('getOrderHistories', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2396,6 +2407,8 @@ describe('issueLicense', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2724,6 +2737,8 @@ describe('getDealers', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2819,6 +2834,8 @@ describe('createTypistGroup', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -3131,6 +3148,8 @@ describe('getTypistGroup', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -3343,6 +3362,8 @@ describe('updateTypistGroup', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -3771,6 +3792,8 @@ describe('deleteTypistGroup', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -4084,6 +4107,8 @@ describe('getWorktypes', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -4216,6 +4241,8 @@ describe('createWorktype', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -4381,6 +4408,8 @@ describe('updateWorktype', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -4672,6 +4701,8 @@ describe('deleteWorktype', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -4932,6 +4963,8 @@ describe('getOptionItems', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -5083,6 +5116,8 @@ describe('updateOptionItems', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -5421,6 +5456,8 @@ describe('updateActiveWorktype', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -5661,6 +5698,8 @@ describe('ライセンス発行キャンセル', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -6005,6 +6044,8 @@ describe('パートナー一覧取得', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -6185,6 +6226,8 @@ describe('アカウント情報更新', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -6473,6 +6516,8 @@ describe('getAccountInfo', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -6548,6 +6593,8 @@ describe('getAuthors', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -6712,6 +6759,8 @@ describe('getTypists', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -6906,6 +6955,8 @@ describe('deleteAccountAndData', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -7405,6 +7456,8 @@ describe('getAccountInfoMinimalAccess', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -7551,6 +7604,8 @@ describe('getCompanyName', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -7621,6 +7676,8 @@ describe('updateFileDeleteSetting', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -7760,6 +7817,8 @@ describe('updateRestrictionStatus', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); diff --git a/dictation_server/src/features/auth/auth.service.spec.ts b/dictation_server/src/features/auth/auth.service.spec.ts index 85473b3..7843214 100644 --- a/dictation_server/src/features/auth/auth.service.spec.ts +++ b/dictation_server/src/features/auth/auth.service.spec.ts @@ -21,6 +21,7 @@ import { TIERS, USER_ROLES } from '../../constants'; import { decode, isVerifyError } from '../../common/jwt'; import { RefreshToken, AccessToken } from '../../common/token'; import { truncateAllTable } from '../../common/test/init'; +import { TestLogger } from '../../common/test/logger'; describe('AuthService', () => { it('IDトークンの検証とペイロードの取得に成功する', async () => { @@ -175,6 +176,8 @@ describe('checkIsAcceptedLatestVersion', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -350,6 +353,8 @@ describe('generateDelegationRefreshToken', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -496,6 +501,8 @@ describe('generateDelegationAccessToken', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -607,6 +614,8 @@ describe('updateDelegationAccessToken', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); diff --git a/dictation_server/src/features/files/files.service.spec.ts b/dictation_server/src/features/files/files.service.spec.ts index a849975..c0ce84a 100644 --- a/dictation_server/src/features/files/files.service.spec.ts +++ b/dictation_server/src/features/files/files.service.spec.ts @@ -44,6 +44,7 @@ import { USER_ROLES, } from '../../constants'; import { truncateAllTable } from '../../common/test/init'; +import { TestLogger } from '../../common/test/logger'; describe('publishUploadSas', () => { let source: DataSource | null = null; @@ -59,6 +60,8 @@ describe('publishUploadSas', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -254,6 +257,8 @@ describe('タスク作成から自動ルーティング(DB使用)', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -1323,6 +1328,8 @@ describe('音声ファイルダウンロードURL取得', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -1631,6 +1638,8 @@ describe('テンプレートファイルダウンロードURL取得', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -1894,6 +1903,8 @@ describe('publishTemplateFileUploadSas', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2009,6 +2020,8 @@ describe('templateUploadFinished', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); diff --git a/dictation_server/src/features/licenses/licenses.service.spec.ts b/dictation_server/src/features/licenses/licenses.service.spec.ts index 69b6530..72ac6ea 100644 --- a/dictation_server/src/features/licenses/licenses.service.spec.ts +++ b/dictation_server/src/features/licenses/licenses.service.spec.ts @@ -34,6 +34,7 @@ import { overrideSendgridService, } from '../../common/test/overrides'; import { truncateAllTable } from '../../common/test/init'; +import { TestLogger } from '../../common/test/logger'; describe('ライセンス注文', () => { let source: DataSource | null = null; @@ -49,6 +50,8 @@ describe('ライセンス注文', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -222,6 +225,8 @@ describe('カードライセンス発行', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -312,6 +317,8 @@ describe('カードライセンスを取り込む', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -657,6 +664,8 @@ describe('ライセンス割り当て', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -1302,6 +1311,8 @@ describe('ライセンス割り当て解除', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -1471,6 +1482,8 @@ describe('ライセンス注文キャンセル', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); diff --git a/dictation_server/src/features/tasks/tasks.service.spec.ts b/dictation_server/src/features/tasks/tasks.service.spec.ts index ecefac5..304b8ad 100644 --- a/dictation_server/src/features/tasks/tasks.service.spec.ts +++ b/dictation_server/src/features/tasks/tasks.service.spec.ts @@ -52,6 +52,7 @@ import { truncateAllTable } from '../../common/test/init'; import { makeDefaultLicensesRepositoryMockValue } from '../accounts/test/accounts.service.mock'; import { DateWithZeroTime } from '../licenses/types/types'; import { createLicense } from '../licenses/test/utility'; +import { TestLogger } from '../../common/test/logger'; describe('TasksService', () => { it('タスク一覧を取得できる(admin)', async () => { @@ -638,6 +639,8 @@ describe('TasksService', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -1033,6 +1036,8 @@ describe('changeCheckoutPermission', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -1675,6 +1680,8 @@ describe('checkout', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2446,6 +2453,8 @@ describe('checkin', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2661,6 +2670,8 @@ describe('suspend', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2872,6 +2883,8 @@ describe('cancel', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -3500,6 +3513,8 @@ describe('backup', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -3806,6 +3821,8 @@ describe('getNextTask', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -4295,6 +4312,8 @@ describe('deleteTask', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); diff --git a/dictation_server/src/features/templates/templates.service.spec.ts b/dictation_server/src/features/templates/templates.service.spec.ts index 46dadf7..37c3813 100644 --- a/dictation_server/src/features/templates/templates.service.spec.ts +++ b/dictation_server/src/features/templates/templates.service.spec.ts @@ -21,6 +21,7 @@ import { getWorkflow, } from '../workflows/test/utility'; import { BlobstorageService } from '../../gateways/blobstorage/blobstorage.service'; +import { TestLogger } from '../../common/test/logger'; describe('getTemplates', () => { let source: DataSource | null = null; @@ -36,6 +37,8 @@ describe('getTemplates', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -157,6 +160,8 @@ describe('deleteTemplate', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); diff --git a/dictation_server/src/features/terms/terms.service.spec.ts b/dictation_server/src/features/terms/terms.service.spec.ts index 3607f41..79552ba 100644 --- a/dictation_server/src/features/terms/terms.service.spec.ts +++ b/dictation_server/src/features/terms/terms.service.spec.ts @@ -7,6 +7,7 @@ import { v4 as uuidv4 } from 'uuid'; import { HttpException, HttpStatus } from '@nestjs/common'; import { makeErrorResponse } from '../../common/error/makeErrorResponse'; import { truncateAllTable } from '../../common/test/init'; +import { TestLogger } from '../../common/test/logger'; describe('利用規約取得', () => { let source: DataSource | null = null; @@ -22,6 +23,8 @@ describe('利用規約取得', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); diff --git a/dictation_server/src/features/users/users.service.spec.ts b/dictation_server/src/features/users/users.service.spec.ts index 503329d..5246e06 100644 --- a/dictation_server/src/features/users/users.service.spec.ts +++ b/dictation_server/src/features/users/users.service.spec.ts @@ -57,8 +57,8 @@ import { import { truncateAllTable } from '../../common/test/init'; import { createTask } from '../files/test/utility'; import { createCheckoutPermissions } from '../tasks/test/utility'; -import { SendGridService } from '../../gateways/sendgrid/sendgrid.service'; import { MultipleImportErrors } from './types/types'; +import { TestLogger } from '../../common/test/logger'; describe('UsersService.confirmUser', () => { let source: DataSource | null = null; @@ -74,6 +74,8 @@ describe('UsersService.confirmUser', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -479,6 +481,8 @@ describe('UsersService.createUser', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -1460,6 +1464,8 @@ describe('UsersService.getUsers', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -1949,6 +1955,8 @@ describe('UsersService.updateUser', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2545,6 +2553,8 @@ describe('UsersService.updateAcceptedVersion', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2645,6 +2655,8 @@ describe('UsersService.getUserName', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2699,6 +2711,8 @@ describe('UsersService.getRelations', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2905,6 +2919,8 @@ describe('UsersService.deleteUser', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -3672,6 +3688,8 @@ describe('UsersService.multipleImports', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -3872,6 +3890,8 @@ describe('UsersService.multipleImportsComplate', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); diff --git a/dictation_server/src/features/workflows/workflows.service.spec.ts b/dictation_server/src/features/workflows/workflows.service.spec.ts index 5c464aa..633c13b 100644 --- a/dictation_server/src/features/workflows/workflows.service.spec.ts +++ b/dictation_server/src/features/workflows/workflows.service.spec.ts @@ -20,6 +20,7 @@ import { WorkflowsRepositoryService } from '../../repositories/workflows/workflo import { HttpException, HttpStatus } from '@nestjs/common'; import { makeErrorResponse } from '../../common/error/makeErrorResponse'; import { truncateAllTable } from '../../common/test/init'; +import { TestLogger } from '../../common/test/logger'; describe('getWorkflows', () => { let source: DataSource | null = null; @@ -35,6 +36,8 @@ describe('getWorkflows', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('file'), + logging: true, }); return await s.initialize(); })(); @@ -292,6 +295,8 @@ describe('createWorkflows', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -1231,6 +1236,8 @@ describe('updateWorkflow', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })(); @@ -2433,6 +2440,8 @@ describe('deleteWorkflows', () => { database: 'odms', entities: [__dirname + '/../../**/*.entity{.ts,.js}'], synchronize: false, // trueにすると自動的にmigrationが行われるため注意 + logger: new TestLogger('none'), + logging: true, }); return await s.initialize(); })();