From 493dbadb8e17208e0b020dcd9fc453e12b9e4b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B9=AF=E6=9C=AC=20=E9=96=8B?= Date: Mon, 21 Aug 2023 01:51:04 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20PR=20339:=20=E3=83=91=E3=83=BC?= =?UTF-8?q?=E3=83=88=E3=83=8A=E3=83=BC=E8=BF=BD=E5=8A=A0=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=81=8C=E5=A2=97=E3=81=88=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=82=8B=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task2443: パートナー追加のテストが増えている問題を修正](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/2443) - 重複しているテストを削除 - 重複していないテスト(blob storageで失敗したケース)を移動 ## レビューポイント - 対処として問題ないか ## 動作確認状況 - ローカル環境でnpm run test で成功 --- .../accounts/accounts.service.spec.ts | 309 ++++-------------- 1 file changed, 55 insertions(+), 254 deletions(-) diff --git a/dictation_server/src/features/accounts/accounts.service.spec.ts b/dictation_server/src/features/accounts/accounts.service.spec.ts index 39a78df..88bb200 100644 --- a/dictation_server/src/features/accounts/accounts.service.spec.ts +++ b/dictation_server/src/features/accounts/accounts.service.spec.ts @@ -528,6 +528,61 @@ describe('createPartnerAccount', () => { expect(users.length).toBe(1); } }); + + it('BlobStorageへの通信失敗が原因でアカウントの追加に失敗した場合、エラーとなる(500エラー)', async () => { + const module = await makeTestingModule(source); + const service = module.get(AccountsService); + + const parentExternalId = 'parent_external_id'; + + await createAccountAndAdminUser(source, parentExternalId); + + const context = makeContext(parentExternalId); + const partnerExternalId = 'partner_external_id'; + const companyName = 'partner_company_name'; + const country = 'US'; + const email = 'partner@example.com'; + const username = 'partner_username'; + + overrideAdB2cService(service, { + createUser: async () => { + return { sub: partnerExternalId }; + }, + }); + + overrideSendgridService(service, { + sendMail: async () => { + return; + }, + createMailContentFromEmailConfirmForNormalUser: async () => { + return { html: '', text: '', subject: '' }; + }, + }); + overrideBlobstorageService(service, { + createContainer: async () => { + throw new Error(); + }, + }); + + try { + await service.createPartnerAccount( + context, + companyName, + country, + email, + username, + parentExternalId, + TIERS.TIER1, + ); + } catch (e) { + if (e instanceof HttpException) { + expect(e.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR); + expect(e.getResponse()).toEqual(makeErrorResponse('E009999')); + } else { + fail(); + } + } + }); }); describe('AccountsService', () => { @@ -1394,257 +1449,3 @@ describe('getDealers', () => { }); }); }); - -describe('createPartnerAccount', () => { - let source: DataSource = null; - beforeEach(async () => { - source = new DataSource({ - type: 'sqlite', - database: ':memory:', - logging: false, - entities: [__dirname + '/../../**/*.entity{.ts,.js}'], - synchronize: true, // trueにすると自動的にmigrationが行われるため注意 - }); - return source.initialize(); - }); - - afterEach(async () => { - await source.destroy(); - source = null; - }); - - it('パートナーを追加できる', async () => { - const module = await makeTestingModule(source); - const service = module.get(AccountsService); - - const parentExternalId = 'parent_external_id'; - - const { accountId: parentAccountId } = await createAccountAndAdminUser( - source, - parentExternalId, - ); - - const context = makeContext(parentExternalId); - const partnerExternalId = 'partner_external_id'; - const companyName = 'partner_company_name'; - const country = 'US'; - const email = 'partner@example.com'; - const username = 'partner_username'; - - overrideAdB2cService(service, { - createUser: async () => { - return { sub: partnerExternalId }; - }, - }); - - overrideSendgridService(service, { - sendMail: async () => { - return; - }, - createMailContentFromEmailConfirmForNormalUser: async () => { - return { html: '', text: '', subject: '' }; - }, - }); - overrideBlobstorageService(service, { - createContainer: async () => { - return; - }, - }); - - { - const accounts = await getAccounts(source); - expect(accounts.length).toBe(1); - } - - await service.createPartnerAccount( - context, - companyName, - country, - email, - username, - parentExternalId, - TIERS.TIER1, - ); - - { - const accounts = await getAccounts(source); - expect(accounts.length).toBe(2); - - const partnerUser = await getUserFromExternalID( - source, - partnerExternalId, - ); - const partnerAccount = await getAccount(source, partnerUser.account_id); - expect(partnerAccount.company_name).toBe(companyName); - expect(partnerAccount.country).toBe(country); - expect(partnerAccount.parent_account_id).toBe(parentAccountId); - expect(partnerAccount.tier).toBe(TIERS.TIER2); - expect(partnerAccount.primary_admin_user_id).toBe(partnerUser.id); - expect(partnerAccount.secondary_admin_user_id).toBe(null); - } - }); - - it('パートナーアカウントを作成がAzure AD B2Cへの通信失敗によって失敗すると500エラーが発生する', async () => { - const module = await makeTestingModule(source); - const service = module.get(AccountsService); - - const parentExternalId = 'parent_external_id'; - - await createAccountAndAdminUser(source, parentExternalId); - - const context = makeContext(parentExternalId); - const companyName = 'partner_company_name'; - const country = 'US'; - const email = 'partner@example.com'; - const username = 'partner_username'; - - overrideAdB2cService(service, { - createUser: async () => { - throw new Error(); - }, - }); - - overrideSendgridService(service, { - sendMail: async () => { - return; - }, - createMailContentFromEmailConfirmForNormalUser: async () => { - return { html: '', text: '', subject: '' }; - }, - }); - overrideBlobstorageService(service, { - createContainer: async () => { - return; - }, - }); - - try { - await service.createPartnerAccount( - context, - companyName, - country, - email, - username, - parentExternalId, - TIERS.TIER1, - ); - } catch (e) { - if (e instanceof HttpException) { - expect(e.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR); - expect(e.getResponse()).toEqual(makeErrorResponse('E009999')); - } else { - fail(); - } - } - }); - - it('パートナーアカウントを作成がメールアドレス重複によって失敗すると400エラーが発生する', async () => { - const module = await makeTestingModule(source); - const service = module.get(AccountsService); - - const parentExternalId = 'parent_external_id'; - - await createAccountAndAdminUser(source, parentExternalId); - - const context = makeContext(parentExternalId); - const companyName = 'partner_company_name'; - const country = 'US'; - const email = 'partner@example.com'; - const username = 'partner_username'; - - overrideAdB2cService(service, { - createUser: async () => { - // EmailのConflictエラーを返す - return { reason: 'email', message: 'dummy' }; - }, - }); - - overrideSendgridService(service, { - sendMail: async () => { - return; - }, - createMailContentFromEmailConfirmForNormalUser: async () => { - return { html: '', text: '', subject: '' }; - }, - }); - overrideBlobstorageService(service, { - createContainer: async () => { - return; - }, - }); - - try { - await service.createPartnerAccount( - context, - companyName, - country, - email, - username, - parentExternalId, - TIERS.TIER1, - ); - } catch (e) { - if (e instanceof HttpException) { - expect(e.getStatus()).toBe(HttpStatus.BAD_REQUEST); - expect(e.getResponse()).toEqual(makeErrorResponse('E010301')); - } else { - fail(); - } - } - }); - - it('パートナーアカウントを作成がBlobStorageへの通信失敗によって失敗すると500エラーが発生する', async () => { - const module = await makeTestingModule(source); - const service = module.get(AccountsService); - - const parentExternalId = 'parent_external_id'; - - await createAccountAndAdminUser(source, parentExternalId); - - const context = makeContext(parentExternalId); - const partnerExternalId = 'partner_external_id'; - const companyName = 'partner_company_name'; - const country = 'US'; - const email = 'partner@example.com'; - const username = 'partner_username'; - - overrideAdB2cService(service, { - createUser: async () => { - return { sub: partnerExternalId }; - }, - }); - - overrideSendgridService(service, { - sendMail: async () => { - return; - }, - createMailContentFromEmailConfirmForNormalUser: async () => { - return { html: '', text: '', subject: '' }; - }, - }); - overrideBlobstorageService(service, { - createContainer: async () => { - throw new Error(); - }, - }); - - try { - await service.createPartnerAccount( - context, - companyName, - country, - email, - username, - parentExternalId, - TIERS.TIER1, - ); - } catch (e) { - if (e instanceof HttpException) { - expect(e.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR); - expect(e.getResponse()).toEqual(makeErrorResponse('E009999')); - } else { - fail(); - } - } - }); -});