OMDSCloud/dictation_server/src/features/accounts/accounts.controller.spec.ts
maruyama.t 114ded790e Merged PR 855: API IF実装(パートナーを編集したい)
## 概要
[Task3930: API IF実装](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3930)

- 元PBI or タスクへのリンク(内容・目的などはそちらにあるはず)
- 新規追加API2本のIFを作成、controllerの返却値は仮実装(別タスクで実装)
- 影響範囲(他の機能にも影響があるか)
 新規追加のみなので影響はなし

## レビューポイント
- 特筆する点はありません

## UIの変更
なし

## クエリの変更
なし

## 動作確認状況
- ローカルで確認
 バリデーションテストとPOSTMANからの起動の確認
- 行った修正がデグレを発生させていないことを確認できるか
  - 具体的にどのような確認をしたか
    - どのケースに対してどのような手段でデグレがないことを担保しているか
完全新規のIFの実装のみなのでデグレはない想定

## 補足
- 相談、参考資料などがあれば
2024-03-26 06:22:07 +00:00

281 lines
8.7 KiB
TypeScript

import { Test, TestingModule } from '@nestjs/testing';
import { AccountsController } from './accounts.controller';
import { AccountsService } from './accounts.service';
import { ConfigModule } from '@nestjs/config';
import { AuthService } from '../auth/auth.service';
import {
SwitchParentRequest,
DeletePartnerAccountRequest,
GetPartnerUsersRequest,
UpdatePartnerInfoRequest,
} from './types/types';
import { plainToClass } from 'class-transformer';
import { validate } from 'class-validator';
describe('AccountsController', () => {
let controller: AccountsController;
const mockAccountService = {};
const mockAuthService = {};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [
ConfigModule.forRoot({
envFilePath: ['.env.test', '.env'],
isGlobal: true,
}),
],
controllers: [AccountsController],
providers: [AccountsService, AuthService],
})
.overrideProvider(AccountsService)
.useValue(mockAccountService)
.overrideProvider(AuthService)
.useValue(mockAuthService)
.compile();
controller = module.get<AccountsController>(AccountsController);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
describe('valdation switchParentRequest', () => {
it('最低限の有効なリクエストが成功する', async () => {
const request = new SwitchParentRequest();
request.to = 1;
request.children = [2];
const valdationObject = plainToClass(SwitchParentRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(0);
});
it('子アカウントが指定されていない場合、リクエストが失敗する', async () => {
const request = new SwitchParentRequest();
request.to = 1;
request.children = [];
const valdationObject = plainToClass(SwitchParentRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('子アカウントが重複指定されている場合、リクエストが失敗する', async () => {
const request = new SwitchParentRequest();
request.to = 1;
request.children = [2, 2];
const valdationObject = plainToClass(SwitchParentRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
});
describe('valdation deletePartnerAccount', () => {
it('最低限の有効なリクエストが成功する', async () => {
const request = new DeletePartnerAccountRequest();
request.targetAccountId = 1;
const valdationObject = plainToClass(
DeletePartnerAccountRequest,
request,
);
const errors = await validate(valdationObject);
expect(errors.length).toBe(0);
});
it('削除対象アカウントが指定されていない場合、リクエストが失敗する', async () => {
const request = new DeletePartnerAccountRequest();
const valdationObject = plainToClass(
DeletePartnerAccountRequest,
request,
);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('削除対象アカウントが0の場合、リクエストが失敗する', async () => {
const request = new DeletePartnerAccountRequest();
request.targetAccountId = 0;
const valdationObject = plainToClass(
DeletePartnerAccountRequest,
request,
);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('削除対象アカウントが文字列(数値以外)の場合、リクエストが失敗する', async () => {
class DeletePartnerAccountRequestString {
targetAccountId: string;
}
const request = new DeletePartnerAccountRequestString();
request.targetAccountId = 'a';
const valdationObject = plainToClass(
DeletePartnerAccountRequest,
request,
);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
});
describe('valdation getPartnerUsers', () => {
it('最低限の有効なリクエストが成功する', async () => {
const request = {
targetAccountId: 1,
};
const valdationObject = plainToClass(GetPartnerUsersRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(0);
});
it('取得対象アカウントが指定されていない場合、リクエストが失敗する', async () => {
const request = {};
const valdationObject = plainToClass(GetPartnerUsersRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('取得対象アカウントが0の場合、リクエストが失敗する', async () => {
const request = {
userId: 0,
};
const valdationObject = plainToClass(GetPartnerUsersRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('取得対象アカウントが文字列(数値以外)の場合、リクエストが失敗する', async () => {
const request = {
userId: 'a',
};
const valdationObject = plainToClass(GetPartnerUsersRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
});
describe('valdation updatePartnerInfo', () => {
it('最低限の有効なリクエストが成功する', async () => {
const request = {
targetAccountId: 1,
primaryAdminUserId: 2,
companyName: 'test',
};
const valdationObject = plainToClass(UpdatePartnerInfoRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(0);
});
it('更新対象アカウントが指定されていない場合、リクエストが失敗する', async () => {
const request = {
targetAccountId: undefined,
primaryAdminUserId: 2,
companyName: 'test',
};
const valdationObject = plainToClass(UpdatePartnerInfoRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('更新対象アカウントが0の場合、リクエストが失敗する', async () => {
const request = {
targetAccountId: 0,
primaryAdminUserId: 2,
companyName: 'test',
};
const valdationObject = plainToClass(UpdatePartnerInfoRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('更新対象アカウントが文字列(数値以外)の場合、リクエストが失敗する', async () => {
const request = {
targetAccountId: 'a',
primaryAdminUserId: 2,
companyName: 'test',
};
const valdationObject = plainToClass(UpdatePartnerInfoRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
});
// primaryAdminUserIdのテスト
it('更新対象アカウントが指定されていない場合、リクエストが失敗する', async () => {
const request = {
targetAccountId: 1,
primaryAdminUserId: undefined,
companyName: 'test',
};
const valdationObject = plainToClass(UpdatePartnerInfoRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('更新対象アカウントが0の場合、リクエストが失敗する', async () => {
const request = {
targetAccountId: 1,
primaryAdminUserId: 0,
companyName: 'test',
};
const valdationObject = plainToClass(UpdatePartnerInfoRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
it('更新対象アカウントが文字列(数値以外)の場合、リクエストが失敗する', async () => {
const request = {
targetAccountId: 1,
primaryAdminUserId: 'a',
companyName: 'test',
};
const valdationObject = plainToClass(UpdatePartnerInfoRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
// companyNameのテスト
it('更新対象アカウントが文字列以外場合、リクエストが失敗する', async () => {
const request = {
targetAccountId: 1,
primaryAdminUserId: 2,
companyName: 1,
};
const valdationObject = plainToClass(UpdatePartnerInfoRequest, request);
const errors = await validate(valdationObject);
expect(errors.length).toBe(1);
});
});