diff --git a/dictation_server/src/features/tasks/tasks.controller.spec.ts b/dictation_server/src/features/tasks/tasks.controller.spec.ts index 72b8ac5..c753ab4 100644 --- a/dictation_server/src/features/tasks/tasks.controller.spec.ts +++ b/dictation_server/src/features/tasks/tasks.controller.spec.ts @@ -2,6 +2,9 @@ import { Test, TestingModule } from '@nestjs/testing'; import { TasksController } from './tasks.controller'; import { TasksService } from './tasks.service'; import { ConfigModule } from '@nestjs/config'; +import { TasksRequest } from './types/types'; +import { validate } from 'class-validator'; +import { plainToClass } from 'class-transformer'; describe('TasksController', () => { let controller: TasksController; @@ -27,4 +30,89 @@ describe('TasksController', () => { it('should be defined', () => { expect(controller).toBeDefined(); }); + + describe('valdation getTasks', () => { + it('最低限の有効なリクエストが成功する', async () => { + const request = new TasksRequest(); + + const valdationObject = plainToClass(TasksRequest, request); + + const errors = await validate(valdationObject); + expect(errors.length).toBe(0); + }); + it('設定可能な全てのパラメータが指定されている場合、リクエストが成功する', async () => { + const request = new TasksRequest(); + request.limit = 1; + request.offset = 1; + request.status = 'Uploaded'; + request.direction = 'ASC'; + request.paramName = 'JOB_NUMBER'; + + const valdationObject = plainToClass(TasksRequest, request); + + const errors = await validate(valdationObject); + expect(errors.length).toBe(0); + }); + it('limitが0より小さい場合、リクエストが失敗する', async () => { + const request = new TasksRequest(); + request.limit = -1; + + const valdationObject = plainToClass(TasksRequest, request); + + const errors = await validate(valdationObject); + expect(errors.length).toBe(1); + }); + it('limitが文字列の場合、リクエストが失敗する', async () => { + const request = { limit: 'test' }; + + const valdationObject = plainToClass(TasksRequest, request); + + const errors = await validate(valdationObject); + expect(errors.length).toBe(1); + }); + it('offsetが0より小さい場合、リクエストが失敗する', async () => { + const request = new TasksRequest(); + request.offset = -1; + + const valdationObject = plainToClass(TasksRequest, request); + + const errors = await validate(valdationObject); + expect(errors.length).toBe(1); + }); + it('offsetが文字列の場合、リクエストが失敗する', async () => { + const request = { offset: 'test' }; + + const valdationObject = plainToClass(TasksRequest, request); + + const errors = await validate(valdationObject); + expect(errors.length).toBe(1); + }); + it('statusがタスクのステータス文字列以外の場合、リクエストが失敗する', async () => { + const request = new TasksRequest(); + request.status = 'test'; + + const valdationObject = plainToClass(TasksRequest, request); + + const errors = await validate(valdationObject); + expect(errors.length).toBe(1); + }); + it('directionがASC,DESC以外の場合、リクエストが失敗する', async () => { + const request = new TasksRequest(); + request.direction = 'test'; + + const valdationObject = plainToClass(TasksRequest, request); + + const errors = await validate(valdationObject); + expect(errors.length).toBe(1); + }); + it('paramNameがTASK_LIST_SORTABLE_ATTRIBUTES以外の場合、リクエストが失敗する', async () => { + const request = new TasksRequest(); + request.paramName = 'test'; + + const valdationObject = plainToClass(TasksRequest, request); + + const errors = await validate(valdationObject); + expect(errors.length).toBe(1); + }); + }); });