From cec2a5af41ed7908e7a53b137ce64d7c4b58820a Mon Sep 17 00:00:00 2001 From: fazilqa <127263470+fazilqa@users.noreply.github.com> Date: Mon, 29 Apr 2024 08:45:02 -0700 Subject: [PATCH] Mhv 57145 refactor save reply draft (#29446) * upd: save-reply-draft test * upd: add TODOs * upd: add methods, simplify code * upd: code cleanup * upd: code cleanup --- .../tests/e2e/pages/PatientInboxPage.js | 2 +- .../e2e/pages/PatientMessageDetailsPage.js | 20 ++++- .../e2e/pages/PatientMessageDraftsPage.js | 14 +++- ...messaging-save-reply-draft.cypress.spec.js | 83 +++++++++---------- 4 files changed, 69 insertions(+), 50 deletions(-) diff --git a/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientInboxPage.js b/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientInboxPage.js index 9cec9445e2ed..9a9eaa69e108 100644 --- a/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientInboxPage.js +++ b/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientInboxPage.js @@ -153,7 +153,7 @@ class PatientInboxPage { loadSingleThread = ( testSingleThread = mockThread, - sentDate = mockThread.data[0].attributes.sentDate, + sentDate = new Date(), draftDate = mockThread.data[0].attributes.draftDate, ) => { this.singleThread = testSingleThread; diff --git a/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientMessageDetailsPage.js b/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientMessageDetailsPage.js index 98156360e556..29b990a8bd89 100644 --- a/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientMessageDetailsPage.js +++ b/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientMessageDetailsPage.js @@ -3,6 +3,7 @@ import mockFolders from '../fixtures/folder-response.json'; import defaultMockThread from '../fixtures/thread-response.json'; import { dateFormat } from '../../../util/helpers'; import { Locators, Paths } from '../utils/constants'; +import PatientInterstitialPage from './PatientInterstitialPage'; class PatientMessageDetailsPage { currentThread = defaultMockThread; @@ -536,14 +537,27 @@ class PatientMessageDetailsPage { }); }; - // temporary changed to 'contain', 'REPLY' - replyToMessageBody = testMessageBody => { - cy.get('[data-testid="message-body"]').should('contain', testMessageBody); + replyToMessageBody = testMessage => { + cy.get(`[data-testid="message-body-${testMessage.data.id}"]`).should( + 'contain', + testMessage.data.attributes.body, + ); }; verifyDeleteMessageConfirmationMessageHasFocus = () => { cy.focused().should('contain.text', 'Draft was successfully deleted.'); }; + + clickReplyButton = singleThreadData => { + cy.intercept( + 'GET', + `${Paths.SM_API_EXTENDED}/${singleThreadData.data[0].id}/thread*`, + singleThreadData, + ).as('replyThread'); + + cy.get(Locators.BUTTONS.REPLY).click({ force: true }); + PatientInterstitialPage.getContinueButton().click(); + }; } export default PatientMessageDetailsPage; diff --git a/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientMessageDraftsPage.js b/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientMessageDraftsPage.js index aa7276d8c82d..14b49d83baab 100644 --- a/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientMessageDraftsPage.js +++ b/src/applications/mhv-secure-messaging/tests/e2e/pages/PatientMessageDraftsPage.js @@ -388,7 +388,19 @@ class PatientMessageDraftsPage { .type(text); }; - saveDraftMessage = mockResponse => { + saveNewDraftMessage = (singleThreadData, singleMessageData) => { + cy.intercept( + 'POST', + `${Paths.SM_API_BASE}/message_drafts/${ + singleThreadData.data[0].id + }/replydraft`, + singleMessageData, + ).as('replyThread'); + + cy.get(Locators.BUTTONS.SAVE_DRAFT).click({ force: true }); + }; + + saveExistingDraftMessage = mockResponse => { cy.intercept( 'PUT', `/my_health/v1/messaging/message_drafts/3163320/replydraft/3163906`, diff --git a/src/applications/mhv-secure-messaging/tests/e2e/secure-messaging-save-reply-draft.cypress.spec.js b/src/applications/mhv-secure-messaging/tests/e2e/secure-messaging-save-reply-draft.cypress.spec.js index ce446b20d523..ecb760576032 100644 --- a/src/applications/mhv-secure-messaging/tests/e2e/secure-messaging-save-reply-draft.cypress.spec.js +++ b/src/applications/mhv-secure-messaging/tests/e2e/secure-messaging-save-reply-draft.cypress.spec.js @@ -1,68 +1,61 @@ import SecureMessagingSite from './sm_site/SecureMessagingSite'; import PatientMessageDetailsPage from './pages/PatientMessageDetailsPage'; import PatientInboxPage from './pages/PatientInboxPage'; -import PatientInterstitialPage from './pages/PatientInterstitialPage'; +import PatientMessageDraftsPage from './pages/PatientMessageDraftsPage'; import PatientReplyPage from './pages/PatientReplyPage'; import mockMessages from './fixtures/messages-response.json'; -import { AXE_CONTEXT } from './utils/constants'; +import mockSingleThread from './fixtures/thread-response.json'; +import { AXE_CONTEXT, Data, Locators } from './utils/constants'; describe('Secure Messaging Reply', () => { it('Axe Check Message Reply', () => { + // declare pages & constants const landingPage = new PatientInboxPage(); - const messageDetailsPage = new PatientMessageDetailsPage(); const site = new SecureMessagingSite(); + const draftPage = new PatientMessageDraftsPage(); + const messageDetailsPage = new PatientMessageDetailsPage(); + + const bodyText = ' Updated body text'; + const singleMessage = { data: mockSingleThread.data[0] }; + singleMessage.data.attributes.body = bodyText; + + // load single thread site.login(); - const messageDetails = landingPage.getNewMessageDetails(); - const messageDetailsBody = messageDetails.data.attributes.body; + landingPage.loadInboxMessages(mockMessages); + landingPage.loadSingleThread(mockSingleThread); - landingPage.loadInboxMessages(mockMessages, messageDetails); - messageDetailsPage.loadMessageDetails(messageDetails); - messageDetailsPage.loadReplyPageDetails(messageDetails); - PatientInterstitialPage.getContinueButton().click(); - const testMessageBody = 'Test message body'; - PatientReplyPage.getMessageBodyField().type(testMessageBody, { + // click reply btn + messageDetailsPage.clickReplyButton(mockSingleThread); + + // change message + PatientReplyPage.getMessageBodyField().type(bodyText, { force: true, }); - cy.injectAxe(); - cy.axeCheck(AXE_CONTEXT, {}); - PatientReplyPage.clickSaveReplyDraftButton(messageDetails, testMessageBody); - cy.log( - `the message details after clickSaveReplyDraftButton ${JSON.stringify( - messageDetails, - )}`, - ); - cy.log( - `the message details before assert${JSON.stringify(messageDetails)}`, - ); - cy.log(`message details Body${messageDetailsBody}`); - cy.log( - `messageDetails.data.attributes.body = ${ - messageDetails.data.attributes.body - }`, + // save changed message as a draft + draftPage.saveNewDraftMessage(mockSingleThread, singleMessage); + + // assert message saved + cy.get(Locators.ALERTS.SAVE_DRAFT).should( + 'include.text', + Data.MESSAGE_WAS_SAVED, ); - messageDetailsPage.replyToMessageTo(messageDetails); - // messageDetailsPage.ReplyToMessagesenderName(messageDetails); // TODO skipped for flakiness - messageDetailsPage.replyToMessageRecipientName(messageDetails); - messageDetailsPage.replyToMessageDate(messageDetails); - messageDetailsPage.replyToMessageId(messageDetails); + // verify reply topic + messageDetailsPage.replyToMessageTo(singleMessage); - messageDetails.data.attributes.body = messageDetailsBody; - // messageDetailsPage.ReplyToMessageBody(messageDetailsBody); // TODO skipped for flakiness + // verify saved draft details + messageDetailsPage.replyToMessageSenderName(singleMessage); - // Possibly move this to another test - PatientReplyPage.clickSendReplyDraftButton( - messageDetails.data.attributes.messageId, - messageDetails.data.attributes.senderId, - messageDetails.data.attributes.category, - messageDetails.data.attributes.subject, - `\n\n\nName\nTitleTest${testMessageBody}`, - ); - PatientReplyPage.verifySendMessageConfirmationMessageText(); - PatientReplyPage.verifySendMessageConfirmationHasFocus(); + messageDetailsPage.replyToMessageRecipientName(singleMessage); + + messageDetailsPage.replyToMessageDate(singleMessage); + + messageDetailsPage.replyToMessageId(singleMessage); + + messageDetailsPage.replyToMessageBody(singleMessage); cy.injectAxe(); - cy.axeCheck(AXE_CONTEXT, {}); + cy.axeCheck(AXE_CONTEXT); }); });