Merged PR 199: [12-1着手]タイピスト割り当て変更APIのテスト実装
## 概要 [Task2010: [12-1着手]タイピスト割り当て変更APIのテスト実装](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/2010) - タイピスト割り当て変更APIのテスト実装 ## レビューポイント - テストケースは足りているか - テスト名に不足・違和感はないか - 各テストでチェックしている内容は妥当か ## UIの変更 ## 動作確認状況 - ローカルで確認 ## 補足 - 相談、参考資料などがあれば
This commit is contained in:
parent
279633ec4b
commit
8c5f5b61c1
@ -683,49 +683,386 @@ describe('TasksService', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('changeCheckoutPermission', () => {
|
describe('changeCheckoutPermission', () => {
|
||||||
// TODO sqliteを用いたテストを別途実装予定
|
let source: DataSource = null;
|
||||||
/*
|
beforeEach(async () => {
|
||||||
指定したユーザーグループがない場合
|
source = new DataSource({
|
||||||
指定したユーザーがいない場合
|
type: 'sqlite',
|
||||||
指定したタスクがない場合
|
database: ':memory:',
|
||||||
タスクのステータスがUploadedでない場合
|
logging: false,
|
||||||
*/
|
entities: [__dirname + '/../../**/*.entity{.ts,.js}'],
|
||||||
it('タスクのチェックアウト権限を変更できる', async () => {
|
synchronize: true, // trueにすると自動的にmigrationが行われるため注意
|
||||||
const tasksRepositoryMockValue = makeDefaultTasksRepositoryMockValue();
|
});
|
||||||
const usersRepositoryMockValue = makeDefaultUsersRepositoryMockValue();
|
return source.initialize();
|
||||||
const adb2cServiceMockValue = makeDefaultAdb2cServiceMockValue();
|
});
|
||||||
const service = await makeTasksServiceMock(
|
|
||||||
tasksRepositoryMockValue,
|
|
||||||
usersRepositoryMockValue,
|
|
||||||
adb2cServiceMockValue,
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(
|
afterEach(async () => {
|
||||||
await service.tasksService.changeCheckoutPermission(
|
await source.destroy();
|
||||||
1,
|
source = null;
|
||||||
[],
|
});
|
||||||
'xxx-xxx-xxxx',
|
|
||||||
['admin'],
|
it('タスクのチェックアウト権限を変更できる。(個人指定)', async () => {
|
||||||
),
|
const module = await makeTestingModule(source);
|
||||||
).toEqual(undefined);
|
const { accountId } = await createAccount(source);
|
||||||
|
const { userId: typistUserId_1 } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'typist-user-external-id',
|
||||||
|
'typist',
|
||||||
|
);
|
||||||
|
const { userId: typistUserId_2 } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'typist-user-2-external-id',
|
||||||
|
'typist',
|
||||||
|
);
|
||||||
|
const { userId: authorUserId } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'author-user-external-id',
|
||||||
|
'author',
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
);
|
||||||
|
const { taskId } = await createTask(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
authorUserId,
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
'',
|
||||||
|
'01',
|
||||||
|
'00000001',
|
||||||
|
'Uploaded',
|
||||||
|
);
|
||||||
|
const { userGroupId } = await createUserGroup(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'USER_GROUP_A',
|
||||||
|
[typistUserId_1],
|
||||||
|
);
|
||||||
|
await createCheckoutPermissions(source, taskId, typistUserId_1);
|
||||||
|
await createCheckoutPermissions(source, taskId, undefined, userGroupId);
|
||||||
|
const service = module.get<TasksService>(TasksService);
|
||||||
|
await service.changeCheckoutPermission(
|
||||||
|
1,
|
||||||
|
[{ typistName: 'typist-user-2', typistUserId: typistUserId_2 }],
|
||||||
|
'author-user-external-id',
|
||||||
|
['admin'],
|
||||||
|
);
|
||||||
|
const permisions = await getCheckoutPermissions(source, taskId);
|
||||||
|
expect(permisions.length).toEqual(1);
|
||||||
|
expect(permisions[0]).toEqual({
|
||||||
|
id: 3,
|
||||||
|
task_id: taskId,
|
||||||
|
user_id: typistUserId_2,
|
||||||
|
user_group_id: null,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('タスクのチェックアウト権限を変更できる。(グループ指定)', async () => {
|
||||||
|
const module = await makeTestingModule(source);
|
||||||
|
const { accountId } = await createAccount(source);
|
||||||
|
const { userId: typistUserId_1 } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'typist-user-external-id',
|
||||||
|
'typist',
|
||||||
|
);
|
||||||
|
const { userId: typistUserId_2 } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'typist-user-2-external-id',
|
||||||
|
'typist',
|
||||||
|
);
|
||||||
|
const { userId: authorUserId } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'author-user-external-id',
|
||||||
|
'author',
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
);
|
||||||
|
const { taskId } = await createTask(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
authorUserId,
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
'',
|
||||||
|
'01',
|
||||||
|
'00000001',
|
||||||
|
'Uploaded',
|
||||||
|
);
|
||||||
|
const { userGroupId: userGroupId_1 } = await createUserGroup(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'USER_GROUP_A',
|
||||||
|
[typistUserId_1],
|
||||||
|
);
|
||||||
|
const { userGroupId: userGroupId_2 } = await createUserGroup(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'USER_GROUP_B',
|
||||||
|
[typistUserId_2],
|
||||||
|
);
|
||||||
|
await createCheckoutPermissions(source, taskId, typistUserId_1);
|
||||||
|
await createCheckoutPermissions(source, taskId, undefined, userGroupId_1);
|
||||||
|
const service = module.get<TasksService>(TasksService);
|
||||||
|
await service.changeCheckoutPermission(
|
||||||
|
1,
|
||||||
|
[{ typistName: 'USER_GROUP_B', typistGroupId: userGroupId_2 }],
|
||||||
|
'author-user-external-id',
|
||||||
|
['admin'],
|
||||||
|
);
|
||||||
|
const permisions = await getCheckoutPermissions(source, taskId);
|
||||||
|
expect(permisions.length).toEqual(1);
|
||||||
|
expect(permisions[0]).toEqual({
|
||||||
|
id: 3,
|
||||||
|
task_id: taskId,
|
||||||
|
user_id: null,
|
||||||
|
user_group_id: userGroupId_2,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('タスクのチェックアウト権限を変更できる。(チェックアウト権限を外す)', async () => {
|
||||||
|
const module = await makeTestingModule(source);
|
||||||
|
const { accountId } = await createAccount(source);
|
||||||
|
const { userId: typistUserId_1 } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'typist-user-external-id',
|
||||||
|
'typist',
|
||||||
|
);
|
||||||
|
const { userId: authorUserId } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'author-user-external-id',
|
||||||
|
'author',
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
);
|
||||||
|
const { taskId } = await createTask(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
authorUserId,
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
'',
|
||||||
|
'01',
|
||||||
|
'00000001',
|
||||||
|
'Uploaded',
|
||||||
|
);
|
||||||
|
const { userGroupId } = await createUserGroup(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'USER_GROUP_A',
|
||||||
|
[typistUserId_1],
|
||||||
|
);
|
||||||
|
await createCheckoutPermissions(source, taskId, typistUserId_1);
|
||||||
|
await createCheckoutPermissions(source, taskId, undefined, userGroupId);
|
||||||
|
const service = module.get<TasksService>(TasksService);
|
||||||
|
await service.changeCheckoutPermission(1, [], 'author-user-external-id', [
|
||||||
|
'admin',
|
||||||
|
]);
|
||||||
|
const permisions = await getCheckoutPermissions(source, taskId);
|
||||||
|
expect(permisions.length).toEqual(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('ユーザーが存在しない場合、タスクのチェックアウト権限を変更できない', async () => {
|
it('ユーザーが存在しない場合、タスクのチェックアウト権限を変更できない', async () => {
|
||||||
const tasksRepositoryMockValue = makeDefaultTasksRepositoryMockValue();
|
const module = await makeTestingModule(source);
|
||||||
const usersRepositoryMockValue = makeDefaultUsersRepositoryMockValue();
|
const { accountId } = await createAccount(source);
|
||||||
const adb2cServiceMockValue = makeDefaultAdb2cServiceMockValue();
|
const { userId: typistUserId_1 } = await createUser(
|
||||||
tasksRepositoryMockValue.changeCheckoutPermission =
|
source,
|
||||||
new TasksNotFoundError();
|
accountId,
|
||||||
const service = await makeTasksServiceMock(
|
'typist-user-external-id',
|
||||||
tasksRepositoryMockValue,
|
'typist',
|
||||||
usersRepositoryMockValue,
|
|
||||||
adb2cServiceMockValue,
|
|
||||||
);
|
);
|
||||||
|
const { userId: authorUserId } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'author-user-external-id',
|
||||||
|
'author',
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
);
|
||||||
|
const { taskId } = await createTask(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
authorUserId,
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
'',
|
||||||
|
'01',
|
||||||
|
'00000001',
|
||||||
|
'Uploaded',
|
||||||
|
);
|
||||||
|
const { userGroupId } = await createUserGroup(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'USER_GROUP_A',
|
||||||
|
[typistUserId_1],
|
||||||
|
);
|
||||||
|
await createCheckoutPermissions(source, taskId, typistUserId_1);
|
||||||
|
await createCheckoutPermissions(source, taskId, undefined, userGroupId);
|
||||||
|
const service = module.get<TasksService>(TasksService);
|
||||||
|
|
||||||
await expect(
|
await expect(
|
||||||
service.tasksService.changeCheckoutPermission(1, [], 'xxx-xxxx-xxxx', [
|
service.changeCheckoutPermission(
|
||||||
'admin',
|
1,
|
||||||
]),
|
[{ typistName: 'not-exist-user', typistUserId: 999 }],
|
||||||
|
'author-user-external-id',
|
||||||
|
['admin'],
|
||||||
|
),
|
||||||
|
).rejects.toEqual(
|
||||||
|
new HttpException(makeErrorResponse('E010204'), HttpStatus.BAD_REQUEST),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('ユーザーグループが存在しない場合、タスクのチェックアウト権限を変更できない', async () => {
|
||||||
|
const module = await makeTestingModule(source);
|
||||||
|
const { accountId } = await createAccount(source);
|
||||||
|
const { userId: typistUserId_1 } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'typist-user-external-id',
|
||||||
|
'typist',
|
||||||
|
);
|
||||||
|
const { userId: authorUserId } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'author-user-external-id',
|
||||||
|
'author',
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
);
|
||||||
|
const { taskId } = await createTask(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
authorUserId,
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
'',
|
||||||
|
'01',
|
||||||
|
'00000001',
|
||||||
|
'Uploaded',
|
||||||
|
);
|
||||||
|
const { userGroupId } = await createUserGroup(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'USER_GROUP_A',
|
||||||
|
[typistUserId_1],
|
||||||
|
);
|
||||||
|
await createCheckoutPermissions(source, taskId, typistUserId_1);
|
||||||
|
await createCheckoutPermissions(source, taskId, undefined, userGroupId);
|
||||||
|
const service = module.get<TasksService>(TasksService);
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
service.changeCheckoutPermission(
|
||||||
|
1,
|
||||||
|
[{ typistName: 'not-exist-user-group', typistGroupId: 999 }],
|
||||||
|
'author-user-external-id',
|
||||||
|
['admin'],
|
||||||
|
),
|
||||||
|
).rejects.toEqual(
|
||||||
|
new HttpException(makeErrorResponse('E010204'), HttpStatus.BAD_REQUEST),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('タスクが存在しない場合、タスクのチェックアウト権限を変更できない', async () => {
|
||||||
|
const module = await makeTestingModule(source);
|
||||||
|
const { accountId } = await createAccount(source);
|
||||||
|
const { userId: typistUserId } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'typist-user-external-id',
|
||||||
|
'typist',
|
||||||
|
);
|
||||||
|
await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'author-user-external-id',
|
||||||
|
'author',
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
);
|
||||||
|
const service = module.get<TasksService>(TasksService);
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
service.changeCheckoutPermission(
|
||||||
|
1,
|
||||||
|
[{ typistName: 'typist-user', typistUserId: typistUserId }],
|
||||||
|
'author-user-external-id',
|
||||||
|
['admin'],
|
||||||
|
),
|
||||||
|
).rejects.toEqual(
|
||||||
|
new HttpException(makeErrorResponse('E010601'), HttpStatus.BAD_REQUEST),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('タスクのステータスがUploadedでない場合、タスクのチェックアウト権限を変更できない', async () => {
|
||||||
|
const module = await makeTestingModule(source);
|
||||||
|
const { accountId } = await createAccount(source);
|
||||||
|
const { userId: typistUserId } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'typist-user-external-id',
|
||||||
|
'typist',
|
||||||
|
);
|
||||||
|
const { userId: authorUserId } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'author-user-external-id',
|
||||||
|
'author',
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
);
|
||||||
|
await createTask(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
authorUserId,
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
'',
|
||||||
|
'01',
|
||||||
|
'00000001',
|
||||||
|
'Inprogress',
|
||||||
|
);
|
||||||
|
const service = module.get<TasksService>(TasksService);
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
service.changeCheckoutPermission(
|
||||||
|
1,
|
||||||
|
[{ typistName: 'typist-user', typistUserId: typistUserId }],
|
||||||
|
'author-user-external-id',
|
||||||
|
['admin'],
|
||||||
|
),
|
||||||
|
).rejects.toEqual(
|
||||||
|
new HttpException(makeErrorResponse('E010601'), HttpStatus.BAD_REQUEST),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('ユーザーのRoleがAuthorでタスクのAuthorIDと自身のAuthorIDが一致しない場合、タスクのチェックアウト権限を変更できない', async () => {
|
||||||
|
const module = await makeTestingModule(source);
|
||||||
|
const { accountId } = await createAccount(source);
|
||||||
|
const { userId: typistUserId } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'typist-user-external-id',
|
||||||
|
'typist',
|
||||||
|
);
|
||||||
|
const { userId: authorUserId } = await createUser(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
'author-user-external-id',
|
||||||
|
'author',
|
||||||
|
'MY_AUTHOR_ID',
|
||||||
|
);
|
||||||
|
await createTask(
|
||||||
|
source,
|
||||||
|
accountId,
|
||||||
|
authorUserId,
|
||||||
|
'OTHER_AUTHOR_ID',
|
||||||
|
'',
|
||||||
|
'01',
|
||||||
|
'00000001',
|
||||||
|
'Uploaded',
|
||||||
|
);
|
||||||
|
const service = module.get<TasksService>(TasksService);
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
service.changeCheckoutPermission(
|
||||||
|
1,
|
||||||
|
[{ typistName: 'typist-user', typistUserId: typistUserId }],
|
||||||
|
'author-user-external-id',
|
||||||
|
['author'],
|
||||||
|
),
|
||||||
).rejects.toEqual(
|
).rejects.toEqual(
|
||||||
new HttpException(makeErrorResponse('E010601'), HttpStatus.BAD_REQUEST),
|
new HttpException(makeErrorResponse('E010601'), HttpStatus.BAD_REQUEST),
|
||||||
);
|
);
|
||||||
@ -779,7 +1116,7 @@ describe('checkout', () => {
|
|||||||
source,
|
source,
|
||||||
accountId,
|
accountId,
|
||||||
'USER_GROUP_A',
|
'USER_GROUP_A',
|
||||||
typistUserId,
|
[typistUserId],
|
||||||
);
|
);
|
||||||
await createCheckoutPermissions(source, taskId, typistUserId);
|
await createCheckoutPermissions(source, taskId, typistUserId);
|
||||||
await createCheckoutPermissions(source, taskId, undefined, userGroupId);
|
await createCheckoutPermissions(source, taskId, undefined, userGroupId);
|
||||||
@ -805,7 +1142,7 @@ describe('checkout', () => {
|
|||||||
user_id: 1,
|
user_id: 1,
|
||||||
user_group_id: null,
|
user_group_id: null,
|
||||||
});
|
});
|
||||||
}, 600000);
|
});
|
||||||
|
|
||||||
it('ユーザーのRoleがTypistで、タスクのチェックアウト権限がグループ指定である時、タスクをチェックアウトできる', async () => {
|
it('ユーザーのRoleがTypistで、タスクのチェックアウト権限がグループ指定である時、タスクをチェックアウトできる', async () => {
|
||||||
const module = await makeTestingModule(source);
|
const module = await makeTestingModule(source);
|
||||||
@ -837,7 +1174,7 @@ describe('checkout', () => {
|
|||||||
source,
|
source,
|
||||||
accountId,
|
accountId,
|
||||||
'USER_GROUP_A',
|
'USER_GROUP_A',
|
||||||
typistUserId,
|
[typistUserId],
|
||||||
);
|
);
|
||||||
await createCheckoutPermissions(source, taskId, typistUserId);
|
await createCheckoutPermissions(source, taskId, typistUserId);
|
||||||
await createCheckoutPermissions(source, taskId, undefined, userGroupId);
|
await createCheckoutPermissions(source, taskId, undefined, userGroupId);
|
||||||
|
|||||||
@ -129,7 +129,7 @@ export const createUserGroup = async (
|
|||||||
datasource: DataSource,
|
datasource: DataSource,
|
||||||
account_id: number,
|
account_id: number,
|
||||||
user_group_name: string,
|
user_group_name: string,
|
||||||
user_id: number,
|
user_id: number[],
|
||||||
): Promise<{ userGroupId: number }> => {
|
): Promise<{ userGroupId: number }> => {
|
||||||
const { identifiers: userGroupIdentifiers } = await datasource
|
const { identifiers: userGroupIdentifiers } = await datasource
|
||||||
.getRepository(UserGroup)
|
.getRepository(UserGroup)
|
||||||
@ -140,12 +140,15 @@ export const createUserGroup = async (
|
|||||||
updated_by: 'test',
|
updated_by: 'test',
|
||||||
});
|
});
|
||||||
const userGroup = userGroupIdentifiers.pop() as UserGroup;
|
const userGroup = userGroupIdentifiers.pop() as UserGroup;
|
||||||
await datasource.getRepository(UserGroupMember).insert({
|
const userGroupMenber = user_id.map((id) => {
|
||||||
user_group_id: userGroup.id,
|
return {
|
||||||
user_id: user_id,
|
user_group_id: userGroup.id,
|
||||||
created_by: 'test',
|
user_id: id,
|
||||||
updated_by: 'test',
|
created_by: 'test',
|
||||||
|
updated_by: 'test',
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
await datasource.getRepository(UserGroupMember).save(userGroupMenber);
|
||||||
|
|
||||||
return { userGroupId: userGroup.id };
|
return { userGroupId: userGroup.id };
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user