From 73d7202905a62ccdf0235fb04b42533eb6b765b6 Mon Sep 17 00:00:00 2001 From: Cataldo Mazzilli Date: Mon, 28 Aug 2023 15:16:33 +0200 Subject: [PATCH 1/3] fix: update mapToModifyIdentityRequests to properly populate ModifyIdentityRequest array refs: SHELL-155 --- src/settings/accounts-settings.test.tsx | 88 +++++++++++++++++++++++++ src/settings/accounts-settings.tsx | 4 +- 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/src/settings/accounts-settings.test.tsx b/src/settings/accounts-settings.test.tsx index 95aa2603..9e0ed164 100644 --- a/src/settings/accounts-settings.test.tsx +++ b/src/settings/accounts-settings.test.tsx @@ -1328,6 +1328,94 @@ describe('Account setting', () => { ).toBeVisible(); }); + test('When modify an identity, should populate a ModifyIdentityRequest', async () => { + const defaultFirstName = faker.person.firstName(); + const defaultLastName = faker.person.lastName(); + const defaultFullName = faker.person.fullName({ + firstName: defaultFirstName, + lastName: defaultLastName + }); + const defaultEmail = faker.internet.email({ + firstName: defaultFirstName, + lastName: defaultLastName + }); + const defaultId = faker.string.uuid(); + + const identitiesArray: Array = [ + { + id: defaultId, + name: 'DEFAULT', + _attrs: { + zimbraPrefIdentityName: defaultFullName, + zimbraPrefReplyToEnabled: 'FALSE', + zimbraPrefFromDisplay: defaultFirstName, + zimbraPrefFromAddress: defaultEmail, + zimbraPrefIdentityId: defaultId, + zimbraPrefFromAddressType: 'sendAs' + } + } + ]; + + const account: Account = { + name: defaultEmail, + rights: { targets: [] }, + signatures: { signature: [] }, + id: defaultId, + displayName: '', + identities: { + identity: identitiesArray + } + }; + useAccountStore.setState((previousState) => ({ + ...previousState, + account, + settings: { + ...previousState.settings, + attrs: { + ...previousState.settings.attrs, + zimbraIdentityMaxNumEntries: 20 + } + } + })); + + server.use( + rest.post('/service/soap/BatchRequest', (req, res, ctx) => + res( + ctx.json({ + Body: { + BatchResponse: { + ModifyPrefsResponse: [{ _jsns: 'urn:zimbraAccount' }] + } + } + }) + ) + ) + ); + + const batchRequestUrl = '/service/soap/BatchRequest'; + const pendingBatchRequest = waitForRequest('POST', batchRequestUrl); + const { user } = setup(); + await waitForGetRightsRequest(); + + const accountNameInput = screen.getByRole('textbox', { name: /account name/i }); + + const newName = 'Updated Name'; + await user.clear(accountNameInput); + await user.type(accountNameInput, newName); + + await user.click(screen.getByRole('button', { name: /save/i })); + + const request = await pendingBatchRequest; + + const requestBody = (request?.body as { Body: { BatchRequest: BatchRequest } }).Body; + expect(requestBody.BatchRequest.CreateIdentityRequest).toBeUndefined(); + expect(requestBody.BatchRequest.DeleteIdentityRequest).toBeUndefined(); + expect(requestBody.BatchRequest.ModifyIdentityRequest).toHaveLength(1); + + const successSnackbar = await screen.findByText('Edits saved correctly'); + expect(successSnackbar).toBeVisible(); + }); + test('Should reset the updated identity name on discard changes(default case)', async () => { const defaultFirstName = faker.person.firstName(); const defaultLastName = faker.person.lastName(); diff --git a/src/settings/accounts-settings.tsx b/src/settings/accounts-settings.tsx index ff5048c2..df90d506 100644 --- a/src/settings/accounts-settings.tsx +++ b/src/settings/accounts-settings.tsx @@ -78,8 +78,8 @@ function mapToDeleteIdentityRequests(deleteArray: Array): Array> ): Array { - return map( - modifyRecord.current, + return map( + modifyRecord, (item, index): ModifyIdentityRequest => ({ _jsns: 'urn:zimbraAccount', identity: { From 44b67bc75358b1ff57d8ee8aac103d6a201df1a3 Mon Sep 17 00:00:00 2001 From: Cataldo Date: Mon, 28 Aug 2023 16:41:51 +0200 Subject: [PATCH 2/3] Update src/settings/accounts-settings.test.tsx Co-authored-by: Beatrice Guerra --- src/settings/accounts-settings.test.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/settings/accounts-settings.test.tsx b/src/settings/accounts-settings.test.tsx index 9e0ed164..4377ff4f 100644 --- a/src/settings/accounts-settings.test.tsx +++ b/src/settings/accounts-settings.test.tsx @@ -1405,9 +1405,9 @@ describe('Account setting', () => { await user.click(screen.getByRole('button', { name: /save/i })); - const request = await pendingBatchRequest; - - const requestBody = (request?.body as { Body: { BatchRequest: BatchRequest } }).Body; + const { Body: requestBody } = await pendingBatchRequest.then((req) => + req.json<{ Body: { BatchRequest: BatchRequest } }>() + ); expect(requestBody.BatchRequest.CreateIdentityRequest).toBeUndefined(); expect(requestBody.BatchRequest.DeleteIdentityRequest).toBeUndefined(); expect(requestBody.BatchRequest.ModifyIdentityRequest).toHaveLength(1); From 87c78c936fe3067501ffdf7611af0117a2b7f711 Mon Sep 17 00:00:00 2001 From: Cataldo Mazzilli Date: Mon, 28 Aug 2023 16:45:15 +0200 Subject: [PATCH 3/3] refactor: remove resuest body field usage --- src/settings/accounts-settings.test.tsx | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/settings/accounts-settings.test.tsx b/src/settings/accounts-settings.test.tsx index 4377ff4f..f3317d82 100644 --- a/src/settings/accounts-settings.test.tsx +++ b/src/settings/accounts-settings.test.tsx @@ -164,9 +164,9 @@ describe('Account setting', () => { await user.click(screen.getByRole('button', { name: /save/i })); - const request = await pendingBatchRequest; - - const requestBody = (request?.body as { Body: { BatchRequest: BatchRequest } }).Body; + const { Body: requestBody } = await pendingBatchRequest.then((req) => + req.json<{ Body: { BatchRequest: BatchRequest } }>() + ); expect(requestBody.BatchRequest.CreateIdentityRequest).toHaveLength(3); expect(requestBody.BatchRequest.DeleteIdentityRequest).toBeUndefined(); expect(requestBody.BatchRequest.ModifyIdentityRequest).toBeUndefined(); @@ -1123,9 +1123,10 @@ describe('Account setting', () => { await user.click(screen.getByRole('button', { name: /save/i })); - const request = await pendingBatchRequest; + const { Body: requestBody } = await pendingBatchRequest.then((req) => + req.json<{ Body: { BatchRequest: BatchRequest } }>() + ); - const requestBody = (request?.body as { Body: { BatchRequest: BatchRequest } }).Body; expect(requestBody.BatchRequest.CreateIdentityRequest).toHaveLength(1); expect(requestBody.BatchRequest.DeleteIdentityRequest).toBeUndefined(); expect(requestBody.BatchRequest.ModifyIdentityRequest).toBeUndefined(); @@ -1690,8 +1691,11 @@ describe('Account setting', () => { expect(screen.getByRole('button', { name: /save/i })).toBeEnabled(); await user.click(screen.getByRole('button', { name: /save/i })); - const request = await pendingBatchRequest; - const requestBody = (request?.body as { Body: { BatchRequest: BatchRequest } }).Body; + + const { Body: requestBody } = await pendingBatchRequest.then((req) => + req.json<{ Body: { BatchRequest: BatchRequest } }>() + ); + expect(requestBody.BatchRequest.CreateIdentityRequest).toBeUndefined(); expect(requestBody.BatchRequest.DeleteIdentityRequest).toBeUndefined(); expect(requestBody.BatchRequest.ModifyIdentityRequest).toBeUndefined();