## 概要 [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の実装のみなのでデグレはない想定 ## 補足 - 相談、参考資料などがあれば
281 lines
8.7 KiB
TypeScript
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);
|
|
});
|
|
});
|