Merged PR 902: POST /files/audio/upload-finished

## 概要
[Task3982: POST /files/audio/upload-finished](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3982)

- /files/audio/upload-finished のバリデーションテスト作成

## レビューポイント
- テストケースで抜けているところはないか
  - IsNotEmpty()は一つに省略

## UIの変更
- Before/Afterのスクショなど
- スクショ置き場

## 動作確認状況
- ローカルで確認、develop環境で確認など
- 行った修正がデグレを発生させていないことを確認できるか
  - テスト追加のため既存機能に影響なし

## 補足
- 相談、参考資料などがあれば
This commit is contained in:
saito.k 2024-05-23 07:26:04 +00:00
parent 5860da285e
commit bd8f035c46
2 changed files with 188 additions and 2 deletions

View File

@ -2,7 +2,7 @@ import { Test, TestingModule } from '@nestjs/testing';
import { FilesController } from './files.controller';
import { FilesService } from './files.service';
import { ConfigModule } from '@nestjs/config';
import { FileRenameRequest } from './types/types';
import { AudioUploadFinishedRequest, FileRenameRequest } from './types/types';
import { plainToClass } from 'class-transformer';
import { validate } from 'class-validator';
@ -111,3 +111,189 @@ describe('valdation FileRenameRequest', () => {
expect(errors.length).toBe(1);
});
});
describe('valdation AudioUploadFinishedRequest', () => {
it('最低限の有効なリクエストが成功する', async () => {
const request = new AudioUploadFinishedRequest();
request.url = 'url';
request.authorId = 'authorId';
request.fileName = 'fileName';
request.duration = '10';
request.createdDate = '2024-12-31T23:59:59.999Z';
request.finishedDate = '2024-12-31T23:59:59.999Z';
request.uploadedDate = '2024-12-31T23:59:59.999Z';
request.fileSize = 1;
request.priority = '00';
request.audioFormat = 'DSS';
request.comment = 'comment';
request.workType = 'workType';
request.optionItemList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((i) => {
return {
optionItemLabel: `optionItemLabel${i}`,
optionItemValue: `optionItemValue${i}`,
};
});
request.isEncrypted = false;
const valdationObject = plainToClass(AudioUploadFinishedRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(0);
});
it('必須パラメータが空文字の場合、リクエストが失敗する', async () => {
const request = new AudioUploadFinishedRequest();
request.url = ''; //空文字
request.authorId = ''; //空文字
request.fileName = ''; //空文字
request.duration = ''; //空文字
request.createdDate = ''; //空文字
request.finishedDate = ''; //空文字
request.uploadedDate = ''; //空文字
request.priority = ''; //空文字
// fileSizeは設定しない
request.audioFormat = ''; //空文字
request.comment = 'comment';
request.workType = 'workType';
request.optionItemList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((i) => {
return {
optionItemLabel: `optionItemLabel${i}`,
optionItemValue: `optionItemValue${i}`,
};
});
request.isEncrypted = false;
const valdationObject = plainToClass(AudioUploadFinishedRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(10);
});
it('durationが数値変換不可の場合、リクエストが失敗する', async () => {
const request = new AudioUploadFinishedRequest();
request.url = 'url';
request.authorId = 'authorId';
request.fileName = 'fileName';
request.duration = 'aaaaa'; //数値変換不可
request.createdDate = '2024-12-31T23:59:59.999Z';
request.finishedDate = '2024-12-31T23:59:59.999Z';
request.uploadedDate = '2024-12-31T23:59:59.999Z';
request.fileSize = 1;
request.priority = '00';
request.audioFormat = 'DSS';
request.comment = 'comment';
request.workType = 'workType';
request.optionItemList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((i) => {
return {
optionItemLabel: `optionItemLabel${i}`,
optionItemValue: `optionItemValue${i}`,
};
});
request.isEncrypted = false;
const valdationObject = plainToClass(AudioUploadFinishedRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('fileSizeが数値でない場合、リクエストが失敗する', async () => {
const request = new AudioUploadFinishedRequest();
request.url = 'url';
request.authorId = 'authorId';
request.fileName = 'fileName';
request.duration = '10';
request.createdDate = '2024-12-31T23:59:59.999Z';
request.finishedDate = '2024-12-31T23:59:59.999Z';
request.uploadedDate = '2024-12-31T23:59:59.999Z';
request.fileSize = 'aaaa' as any; //数値でない
request.priority = '00';
request.audioFormat = 'DSS';
request.comment = 'comment';
request.workType = 'workType';
request.optionItemList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((i) => {
return {
optionItemLabel: `optionItemLabel${i}`,
optionItemValue: `optionItemValue${i}`,
};
});
request.isEncrypted = false;
const valdationObject = plainToClass(AudioUploadFinishedRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('fileSizeがintではない場合、リクエストが失敗する', async () => {
const request = new AudioUploadFinishedRequest();
request.url = 'url';
request.authorId = 'authorId';
request.fileName = 'fileName';
request.duration = '10';
request.createdDate = '2024-12-31T23:59:59.999Z';
request.finishedDate = '2024-12-31T23:59:59.999Z';
request.uploadedDate = '2024-12-31T23:59:59.999Z';
request.fileSize = 5.01; //integerでない
request.priority = '00';
request.audioFormat = 'DSS';
request.comment = 'comment';
request.workType = 'workType';
request.optionItemList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((i) => {
return {
optionItemLabel: `optionItemLabel${i}`,
optionItemValue: `optionItemValue${i}`,
};
});
request.isEncrypted = false;
const valdationObject = plainToClass(AudioUploadFinishedRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('priorityが00,01ではない場合、リクエストが失敗する', async () => {
const request = new AudioUploadFinishedRequest();
request.url = 'url';
request.authorId = 'authorId';
request.fileName = 'fileName';
request.duration = '10';
request.createdDate = '2024-12-31T23:59:59.999Z';
request.finishedDate = '2024-12-31T23:59:59.999Z';
request.uploadedDate = '2024-12-31T23:59:59.999Z';
request.fileSize = 1;
request.priority = '001';
request.audioFormat = 'DSS';
request.comment = 'comment';
request.workType = 'workType';
request.optionItemList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((i) => {
return {
optionItemLabel: `optionItemLabel${i}`,
optionItemValue: `optionItemValue${i}`,
};
});
request.isEncrypted = false;
const valdationObject = plainToClass(AudioUploadFinishedRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('optionItemListが10件ではない場合、リクエストが失敗する', async () => {
const request = new AudioUploadFinishedRequest();
request.url = 'url';
request.authorId = 'authorId';
request.fileName = 'fileName';
request.duration = '10';
request.createdDate = '2024-12-31T23:59:59.999Z';
request.finishedDate = '2024-12-31T23:59:59.999Z';
request.uploadedDate = '2024-12-31T23:59:59.999Z';
request.fileSize = 1;
request.priority = '01';
request.audioFormat = 'DSS';
request.comment = 'comment';
request.workType = 'workType';
request.optionItemList = [1, 2, 3, 4, 5, 6, 7, 8, 9].map((i) => {
return {
optionItemLabel: `optionItemLabel${i}`,
optionItemValue: `optionItemValue${i}`,
};
});
request.isEncrypted = false;
const valdationObject = plainToClass(AudioUploadFinishedRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
});

View File

@ -36,7 +36,7 @@ describe('getWorkflows', () => {
database: 'odms',
entities: [__dirname + '/../../**/*.entity{.ts,.js}'],
synchronize: false, // trueにすると自動的にmigrationが行われるため注意
logger: new TestLogger('file'),
logger: new TestLogger('none'),
logging: true,
});
return await s.initialize();