From 0ab6488f58890239d21400bdb663de7690a99e06 Mon Sep 17 00:00:00 2001 From: "saito.k" Date: Mon, 26 Feb 2024 11:48:02 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20PR=20779:=20=E3=82=BF=E3=82=B9?= =?UTF-8?q?=E3=82=AF=E4=B8=80=E8=A6=A7=E7=94=BB=E9=9D=A2=E3=81=AEOptionIte?= =?UTF-8?q?m=E3=81=8C=E3=82=BD=E3=83=BC=E3=83=88=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E3=81=AB=E3=82=88=E3=81=A3=E3=81=A6=E8=A1=A8=E7=A4=BA=E9=A0=86?= =?UTF-8?q?=E3=81=8C=E3=81=8A=E3=81=8B=E3=81=97=E3=81=8F=E3=81=AA=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task3787: タスク一覧画面のOptionItemがソート条件によって表示順がおかしくなる](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3787) - タスク一覧取得APIレスポンスにあるOptionItemの順番を固定する(idの昇順) - テスト修正 ## レビューポイント - 特になし ## 動作確認状況 - ローカルで確認 ## 補足 - 相談、参考資料などがあれば --- .../src/features/tasks/tasks.service.spec.ts | 97 +++++++++++++++++++ .../tasks/tasks.repository.service.ts | 13 +++ 2 files changed, 110 insertions(+) diff --git a/dictation_server/src/features/tasks/tasks.service.spec.ts b/dictation_server/src/features/tasks/tasks.service.spec.ts index 0b77c95..1531077 100644 --- a/dictation_server/src/features/tasks/tasks.service.spec.ts +++ b/dictation_server/src/features/tasks/tasks.service.spec.ts @@ -782,6 +782,103 @@ describe('TasksService', () => { expect(task.optionItemList).toEqual(audioOptionItems); } }); + + it('[Author] Authorは自分が作成者のTask一覧を取得できる(ソート条件がJob_number以外)', async () => { + const notificationhubServiceMockValue = + makeDefaultNotificationhubServiceMockValue(); + if (!source) fail(); + const module = await makeTaskTestingModuleWithNotificaiton( + source, + notificationhubServiceMockValue, + ); + if (!module) fail(); + const { id: accountId } = await makeTestSimpleAccount(source); + const { id: userId, external_id } = await makeTestUser(source, { + account_id: accountId, + external_id: 'userId', + role: 'author', + author_id: 'MY_AUTHOR_ID', + }); + + //「バグ 3661: [FB対応]Option Itemにチェックを付けると真っ白な画面になる」の確認のため + // audio_file_idをTaskIdと異なる値にするために、AudioFileを作成 + await createAudioFile( + source, + accountId, + userId, + 'MY_AUTHOR_ID', + '', + '00', + ); + + // Taskを作成 + await createTask( + source, + accountId, + userId, + 'MY_AUTHOR_ID', + 'WORKTYPE1', + '01', + '00000001', + 'Uploaded', + ); + await createTask( + source, + accountId, + userId, + 'MY_AUTHOR_ID', + 'WORKTYPE2', + '01', + '00000002', + 'Uploaded', + ); + + const service = module.get(TasksService); + const offset = 0; + const limit = 20; + const status = ['Uploaded', 'Backup']; + // バグ 3786: [FB対応]タスク一覧画面のOptionItemがソート条件によって表示順がおかしくなる の確認のため + // Job_number以外のソート条件を指定 + const paramName = 'WORK_TYPE'; + const direction = 'DESC'; + + const { tasks, total } = await service.getTasks( + makeContext('trackingId', 'requestId'), + external_id, + [USER_ROLES.AUTHOR], + offset, + limit, + status, + paramName, + direction, + ); + + expect(total).toEqual(2); + { + const task = tasks[0]; + expect(task.jobNumber).toEqual('00000002'); + // ソート条件がJob_number以外でもOptionItemがid順に取得されていることを確認 + const audioOptionItems = Array.from({ length: 10 }).map((_, i) => { + return { + optionItemLabel: `label${i}:audio_file_id${task.audioFileId}`, + optionItemValue: `value${i}:audio_file_id${task.audioFileId}`, + }; + }); + expect(task.optionItemList).toEqual(audioOptionItems); + } + { + const task = tasks[1]; + expect(task.jobNumber).toEqual('00000001'); + // ソート条件がJob_number以外でもOptionItemがid順に取得されていることを確認 + const audioOptionItems = Array.from({ length: 10 }).map((_, i) => { + return { + optionItemLabel: `label${i}:audio_file_id${task.audioFileId}`, + optionItemValue: `value${i}:audio_file_id${task.audioFileId}`, + }; + }); + expect(task.optionItemList).toEqual(audioOptionItems); + } + }); it('[Author] Authorは同一アカウントであっても自分以外のAuhtorのTaskは取得できない', async () => { const notificationhubServiceMockValue = makeDefaultNotificationhubServiceMockValue(); diff --git a/dictation_server/src/repositories/tasks/tasks.repository.service.ts b/dictation_server/src/repositories/tasks/tasks.repository.service.ts index a95a8ab..e2bbefa 100644 --- a/dictation_server/src/repositories/tasks/tasks.repository.service.ts +++ b/dictation_server/src/repositories/tasks/tasks.repository.service.ts @@ -1462,78 +1462,91 @@ const makeOrder = ( priority: 'DESC', job_number: direction, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'STATUS': return { priority: 'DESC', status: direction, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'TRANSCRIPTION_FINISHED_DATE': return { priority: 'DESC', finished_at: direction, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'TRANSCRIPTION_STARTED_DATE': return { priority: 'DESC', started_at: direction, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'AUTHOR_ID': return { priority: 'DESC', file: { author_id: direction }, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'ENCRYPTION': return { priority: 'DESC', file: { is_encrypted: direction }, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'FILE_LENGTH': return { priority: 'DESC', file: { duration: direction }, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'FILE_NAME': return { priority: 'DESC', file: { file_name: direction }, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'FILE_SIZE': return { priority: 'DESC', file: { file_size: direction }, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'RECORDING_FINISHED_DATE': return { priority: 'DESC', file: { finished_at: direction }, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'RECORDING_STARTED_DATE': return { priority: 'DESC', file: { started_at: direction }, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'UPLOAD_DATE': return { priority: 'DESC', file: { uploaded_at: direction }, id: 'ASC', + option_items: { id: 'ASC' }, }; case 'WORK_TYPE': return { priority: 'DESC', file: { work_type_id: direction }, id: 'ASC', + option_items: { id: 'ASC' }, }; default: // switchのcase漏れが発生した場合に型エラーになるようにする