From 82ec8d721538792a187b21eed4390ce20133d342 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Mon, 5 Dec 2022 10:30:10 -0700 Subject: [PATCH 01/33] 9684: adding barebones test for story [skip ci] --- .../messagesTableJourney.test.js | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 web-client/integration-tests/messagesTableJourney.test.js diff --git a/web-client/integration-tests/messagesTableJourney.test.js b/web-client/integration-tests/messagesTableJourney.test.js new file mode 100644 index 00000000000..c6c4a83c68f --- /dev/null +++ b/web-client/integration-tests/messagesTableJourney.test.js @@ -0,0 +1,73 @@ +import { applicationContextForClient as applicationContext } from '../../shared/src/business/test/createTestApplicationContext'; +import { createNewMessageOnCase } from './journey/createNewMessageOnCase'; +import { docketClerkAddsDocketEntryFromMessage } from './journey/docketClerkAddsDocketEntryFromMessage'; +import { docketClerkAppliesSignatureFromMessage } from './journey/docketClerkAppliesSignatureFromMessage'; +import { docketClerkCompletesMessageThread } from './journey/docketClerkCompletesMessageThread'; +import { docketClerkEditsOrderFromMessage } from './journey/docketClerkEditsOrderFromMessage'; +import { docketClerkRemovesSignatureFromMessage } from './journey/docketClerkRemovesSignatureFromMessage'; +import { docketClerkUpdatesCaseStatusToReadyForTrial } from './journey/docketClerkUpdatesCaseStatusToReadyForTrial'; +import { docketClerkViewsCompletedMessagesOnCaseDetail } from './journey/docketClerkViewsCompletedMessagesOnCaseDetail'; +import { docketClerkViewsForwardedMessageInInbox } from './journey/docketClerkViewsForwardedMessageInInbox'; +import { loginAs, setupTest, uploadPetition } from './helpers'; +import { petitionsClerk1CreatesNoticeFromMessageDetail } from './journey/petitionsClerk1CreatesNoticeFromMessageDetail'; +import { petitionsClerk1RepliesToMessage } from './journey/petitionsClerk1RepliesToMessage'; +import { petitionsClerk1VerifiesCaseStatusOnMessage } from './journey/petitionsClerk1VerifiesCaseStatusOnMessage'; +import { petitionsClerk1ViewsMessageDetail } from './journey/petitionsClerk1ViewsMessageDetail'; +import { petitionsClerk1ViewsMessageInbox } from './journey/petitionsClerk1ViewsMessageInbox'; +import { petitionsClerkCreatesNewMessageOnCaseWithMaxAttachments } from './journey/petitionsClerkCreatesNewMessageOnCaseWithMaxAttachments'; +import { petitionsClerkCreatesNewMessageOnCaseWithNoAttachments } from './journey/petitionsClerkCreatesNewMessageOnCaseWithNoAttachments'; +import { petitionsClerkCreatesOrderFromMessage } from './journey/petitionsClerkCreatesOrderFromMessage'; +import { petitionsClerkForwardsMessageToDocketClerk } from './journey/petitionsClerkForwardsMessageToDocketClerk'; +import { petitionsClerkForwardsMessageWithAttachment } from './journey/petitionsClerkForwardsMessageWithAttachment'; +import { petitionsClerkVerifiesCompletedMessageNotInInbox } from './journey/petitionsClerkVerifiesCompletedMessageNotInInbox'; +import { petitionsClerkVerifiesCompletedMessageNotInSection } from './journey/petitionsClerkVerifiesCompletedMessageNotInSection'; +import { petitionsClerkViewsInProgressMessagesOnCaseDetail } from './journey/petitionsClerkViewsInProgressMessagesOnCaseDetail'; +import { petitionsClerkViewsRepliesAndCompletesMessageInInbox } from './journey/petitionsClerkViewsRepliesAndCompletesMessageInInbox'; +import { petitionsClerkViewsReplyInInbox } from './journey/petitionsClerkViewsReplyInInbox'; +import { petitionsClerkViewsSentMessagesBox } from './journey/petitionsClerkViewsSentMessagesBox'; +const { PETITIONS_SECTION, STATUS_TYPES } = applicationContext.getConstants(); + +describe('messages table journey', () => { + const cerebralTest = setupTest(); + + beforeAll(() => { + jest.setTimeout(40000); + jest.spyOn( + cerebralTest.applicationContext.getUseCases(), + 'createMessageInteractor', + ); + }); + + afterAll(() => { + cerebralTest.closeSocket(); + }); + + loginAs(cerebralTest, 'petitioner@example.com'); + it('Create test case to send messages', async () => { + const caseDetail = await uploadPetition(cerebralTest); + expect(caseDetail.docketNumber).toBeDefined(); + cerebralTest.docketNumber = caseDetail.docketNumber; + cerebralTest.documentId = caseDetail.docketEntries[0].docketEntryId; + }); + + loginAs(cerebralTest, 'petitionsclerk@example.com'); + createNewMessageOnCase(cerebralTest); + + it('petitions clerk views case trial information on sent messages view', async () => { + await cerebralTest.runSequence('gotoMessagesSequence', { + box: 'outbox', + queue: 'my', + }); + + const messages = cerebralTest.getState('messages'); + + const foundMessage = messages.find( + message => message.subject === cerebralTest.testMessageSubject, + ); + //add checks for trial info + expect(foundMessage).toBeDefined(); + }); + + petitionsClerkViewsSentMessagesBox(cerebralTest); + petitionsClerk1VerifiesCaseStatusOnMessage(cerebralTest, STATUS_TYPES.new); +}); From ee7cc4409f0022ab1202be6f8d17e1a5d81b31d2 Mon Sep 17 00:00:00 2001 From: Rachel Schneiderman Date: Mon, 5 Dec 2022 09:50:33 -0800 Subject: [PATCH 02/33] 9684: Add more setup to integration test [skip ci] --- .../messagesTableJourney.test.js | 70 ++++++++++++------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/web-client/integration-tests/messagesTableJourney.test.js b/web-client/integration-tests/messagesTableJourney.test.js index c6c4a83c68f..dd4389ae566 100644 --- a/web-client/integration-tests/messagesTableJourney.test.js +++ b/web-client/integration-tests/messagesTableJourney.test.js @@ -1,31 +1,16 @@ -import { applicationContextForClient as applicationContext } from '../../shared/src/business/test/createTestApplicationContext'; +import { CASE_STATUS_TYPES } from '../../shared/src/business/entities/EntityConstants'; import { createNewMessageOnCase } from './journey/createNewMessageOnCase'; -import { docketClerkAddsDocketEntryFromMessage } from './journey/docketClerkAddsDocketEntryFromMessage'; -import { docketClerkAppliesSignatureFromMessage } from './journey/docketClerkAppliesSignatureFromMessage'; -import { docketClerkCompletesMessageThread } from './journey/docketClerkCompletesMessageThread'; -import { docketClerkEditsOrderFromMessage } from './journey/docketClerkEditsOrderFromMessage'; -import { docketClerkRemovesSignatureFromMessage } from './journey/docketClerkRemovesSignatureFromMessage'; -import { docketClerkUpdatesCaseStatusToReadyForTrial } from './journey/docketClerkUpdatesCaseStatusToReadyForTrial'; -import { docketClerkViewsCompletedMessagesOnCaseDetail } from './journey/docketClerkViewsCompletedMessagesOnCaseDetail'; -import { docketClerkViewsForwardedMessageInInbox } from './journey/docketClerkViewsForwardedMessageInInbox'; -import { loginAs, setupTest, uploadPetition } from './helpers'; -import { petitionsClerk1CreatesNoticeFromMessageDetail } from './journey/petitionsClerk1CreatesNoticeFromMessageDetail'; -import { petitionsClerk1RepliesToMessage } from './journey/petitionsClerk1RepliesToMessage'; +import { docketClerkCreatesATrialSession } from './journey/docketClerkCreatesATrialSession'; +import { + loginAs, + refreshElasticsearchIndex, + setupTest, + uploadPetition, +} from './helpers'; import { petitionsClerk1VerifiesCaseStatusOnMessage } from './journey/petitionsClerk1VerifiesCaseStatusOnMessage'; -import { petitionsClerk1ViewsMessageDetail } from './journey/petitionsClerk1ViewsMessageDetail'; -import { petitionsClerk1ViewsMessageInbox } from './journey/petitionsClerk1ViewsMessageInbox'; -import { petitionsClerkCreatesNewMessageOnCaseWithMaxAttachments } from './journey/petitionsClerkCreatesNewMessageOnCaseWithMaxAttachments'; -import { petitionsClerkCreatesNewMessageOnCaseWithNoAttachments } from './journey/petitionsClerkCreatesNewMessageOnCaseWithNoAttachments'; -import { petitionsClerkCreatesOrderFromMessage } from './journey/petitionsClerkCreatesOrderFromMessage'; -import { petitionsClerkForwardsMessageToDocketClerk } from './journey/petitionsClerkForwardsMessageToDocketClerk'; -import { petitionsClerkForwardsMessageWithAttachment } from './journey/petitionsClerkForwardsMessageWithAttachment'; -import { petitionsClerkVerifiesCompletedMessageNotInInbox } from './journey/petitionsClerkVerifiesCompletedMessageNotInInbox'; -import { petitionsClerkVerifiesCompletedMessageNotInSection } from './journey/petitionsClerkVerifiesCompletedMessageNotInSection'; -import { petitionsClerkViewsInProgressMessagesOnCaseDetail } from './journey/petitionsClerkViewsInProgressMessagesOnCaseDetail'; -import { petitionsClerkViewsRepliesAndCompletesMessageInInbox } from './journey/petitionsClerkViewsRepliesAndCompletesMessageInInbox'; -import { petitionsClerkViewsReplyInInbox } from './journey/petitionsClerkViewsReplyInInbox'; +import { petitionsClerkServesElectronicCaseToIrs } from './journey/petitionsClerkServesElectronicCaseToIrs'; +import { petitionsClerkSetsATrialSessionsSchedule } from './journey/petitionsClerkSetsATrialSessionsSchedule'; import { petitionsClerkViewsSentMessagesBox } from './journey/petitionsClerkViewsSentMessagesBox'; -const { PETITIONS_SECTION, STATUS_TYPES } = applicationContext.getConstants(); describe('messages table journey', () => { const cerebralTest = setupTest(); @@ -42,6 +27,9 @@ describe('messages table journey', () => { cerebralTest.closeSocket(); }); + loginAs(cerebralTest, 'docketclerk@example.com'); + docketClerkCreatesATrialSession(cerebralTest); + loginAs(cerebralTest, 'petitioner@example.com'); it('Create test case to send messages', async () => { const caseDetail = await uploadPetition(cerebralTest); @@ -51,6 +39,30 @@ describe('messages table journey', () => { }); loginAs(cerebralTest, 'petitionsclerk@example.com'); + petitionsClerkSetsATrialSessionsSchedule(cerebralTest); + petitionsClerkServesElectronicCaseToIrs(cerebralTest); + it('petitions clerk manually adds a case to a calendared trial session', async () => { + await cerebralTest.runSequence('gotoCaseDetailSequence', { + docketNumber: cerebralTest.docketNumber, + }); + + await cerebralTest.runSequence('openAddToTrialModalSequence'); + + await cerebralTest.runSequence('updateModalValueSequence', { + key: 'showAllLocations', + value: true, + }); + + await cerebralTest.runSequence('updateModalValueSequence', { + key: 'trialSessionId', + value: cerebralTest.trialSessionId, + }); + + await cerebralTest.runSequence('addCaseToTrialSessionSequence'); + await refreshElasticsearchIndex(); + + expect(cerebralTest.getState('caseDetail.trialDate')).toBeDefined(); + }); createNewMessageOnCase(cerebralTest); it('petitions clerk views case trial information on sent messages view', async () => { @@ -64,10 +76,14 @@ describe('messages table journey', () => { const foundMessage = messages.find( message => message.subject === cerebralTest.testMessageSubject, ); + //add checks for trial info - expect(foundMessage).toBeDefined(); + expect(foundMessage).toEqual({}); }); petitionsClerkViewsSentMessagesBox(cerebralTest); - petitionsClerk1VerifiesCaseStatusOnMessage(cerebralTest, STATUS_TYPES.new); + petitionsClerk1VerifiesCaseStatusOnMessage( + cerebralTest, + CASE_STATUS_TYPES.new, + ); }); From 8a0bba8b6dec2be918da0024e1f07bdf789334ea Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Mon, 5 Dec 2022 10:59:04 -0700 Subject: [PATCH 03/33] 9684: adding failing expectations and updating ES case mappings --- web-api/elasticsearch/efcms-case-mappings.js | 6 ++++++ .../integration-tests/messagesTableJourney.test.js | 11 +++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/web-api/elasticsearch/efcms-case-mappings.js b/web-api/elasticsearch/efcms-case-mappings.js index 65611436b6d..be5d4c75a79 100644 --- a/web-api/elasticsearch/efcms-case-mappings.js +++ b/web-api/elasticsearch/efcms-case-mappings.js @@ -99,6 +99,12 @@ module.exports = { 'status.S': { type: 'keyword', }, + 'trialDate.S': { + type: 'date', + }, + 'trialLocation.S': { + type: 'keyword', + }, 'userId.S': { type: 'keyword', }, diff --git a/web-client/integration-tests/messagesTableJourney.test.js b/web-client/integration-tests/messagesTableJourney.test.js index dd4389ae566..a8e808586e2 100644 --- a/web-client/integration-tests/messagesTableJourney.test.js +++ b/web-client/integration-tests/messagesTableJourney.test.js @@ -7,7 +7,6 @@ import { setupTest, uploadPetition, } from './helpers'; -import { petitionsClerk1VerifiesCaseStatusOnMessage } from './journey/petitionsClerk1VerifiesCaseStatusOnMessage'; import { petitionsClerkServesElectronicCaseToIrs } from './journey/petitionsClerkServesElectronicCaseToIrs'; import { petitionsClerkSetsATrialSessionsSchedule } from './journey/petitionsClerkSetsATrialSessionsSchedule'; import { petitionsClerkViewsSentMessagesBox } from './journey/petitionsClerkViewsSentMessagesBox'; @@ -78,12 +77,12 @@ describe('messages table journey', () => { ); //add checks for trial info - expect(foundMessage).toEqual({}); + expect(foundMessage).toMatchObject({ + caseStatus: CASE_STATUS_TYPES.calendared, + trialDate: '', + trialLocation: '', + }); }); petitionsClerkViewsSentMessagesBox(cerebralTest); - petitionsClerk1VerifiesCaseStatusOnMessage( - cerebralTest, - CASE_STATUS_TYPES.new, - ); }); From e89aeda24c68cbd48948e996b48d22f69783ed04 Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Mon, 5 Dec 2022 13:06:25 -0700 Subject: [PATCH 04/33] 9684: add trialDate and trialLocation to GET_PARENT_CLAUSE includes array --- .../src/persistence/elasticsearch/helpers/searchClauses.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/shared/src/persistence/elasticsearch/helpers/searchClauses.js b/shared/src/persistence/elasticsearch/helpers/searchClauses.js index 4019cbcb8e0..78529841eba 100644 --- a/shared/src/persistence/elasticsearch/helpers/searchClauses.js +++ b/shared/src/persistence/elasticsearch/helpers/searchClauses.js @@ -31,7 +31,12 @@ const GET_PARENT_CASE = { has_parent: { inner_hits: { _source: { - includes: ['leadDocketNumber', 'docketNumber'], + includes: [ + 'leadDocketNumber', + 'docketNumber', + 'trialDate', + 'trialLocation', + ], }, name: 'case-mappings', }, From 2bf466ca7afec90de3c3363ac717019c4cb85085 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Mon, 5 Dec 2022 13:13:02 -0700 Subject: [PATCH 05/33] 9684: ccreating message decorator to use for inheritance --- shared/src/business/entities/Message.js | 66 +++++++++++++++---------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/shared/src/business/entities/Message.js b/shared/src/business/entities/Message.js index 69c2e84fa32..3b2bb6a7ae3 100644 --- a/shared/src/business/entities/Message.js +++ b/shared/src/business/entities/Message.js @@ -17,37 +17,49 @@ function Message() { } Message.prototype.init = function init(rawMessage, { applicationContext }) { + messageDecorator(this, rawMessage, { applicationContext }); +}; + +const messageDecorator = ( + messageEntity, + rawMessage, + { applicationContext }, +) => { if (!applicationContext) { throw new TypeError('applicationContext must be defined'); } - this.attachments = (rawMessage.attachments || []).map(attachment => ({ - documentId: attachment.documentId, - })); - this.caseStatus = rawMessage.caseStatus; - this.caseTitle = rawMessage.caseTitle; - this.completedAt = rawMessage.completedAt; - this.completedBy = rawMessage.completedBy; - this.completedBySection = rawMessage.completedBySection; - this.completedByUserId = rawMessage.completedByUserId; - this.completedMessage = rawMessage.completedMessage; - this.createdAt = rawMessage.createdAt || createISODateString(); - this.leadDocketNumber = rawMessage.leadDocketNumber; - this.docketNumber = rawMessage.docketNumber; - this.docketNumberWithSuffix = rawMessage.docketNumberWithSuffix; - this.from = rawMessage.from; - this.fromSection = rawMessage.fromSection; - this.fromUserId = rawMessage.fromUserId; - this.isCompleted = rawMessage.isCompleted || false; - this.isRead = rawMessage.isRead || false; - this.isRepliedTo = rawMessage.isRepliedTo || false; - this.message = rawMessage.message; - this.messageId = rawMessage.messageId || applicationContext.getUniqueId(); - this.parentMessageId = rawMessage.parentMessageId || this.messageId; - this.subject = rawMessage.subject; - this.to = rawMessage.to; - this.toSection = rawMessage.toSection; - this.toUserId = rawMessage.toUserId; + messageEntity.attachments = (rawMessage.attachments || []).map( + attachment => ({ + documentId: attachment.documentId, + }), + ); + messageEntity.caseStatus = rawMessage.caseStatus; + messageEntity.caseTitle = rawMessage.caseTitle; + messageEntity.completedAt = rawMessage.completedAt; + messageEntity.completedBy = rawMessage.completedBy; + messageEntity.completedBySection = rawMessage.completedBySection; + messageEntity.completedByUserId = rawMessage.completedByUserId; + messageEntity.completedMessage = rawMessage.completedMessage; + messageEntity.createdAt = rawMessage.createdAt || createISODateString(); + messageEntity.leadDocketNumber = rawMessage.leadDocketNumber; + messageEntity.docketNumber = rawMessage.docketNumber; + messageEntity.docketNumberWithSuffix = rawMessage.docketNumberWithSuffix; + messageEntity.from = rawMessage.from; + messageEntity.fromSection = rawMessage.fromSection; + messageEntity.fromUserId = rawMessage.fromUserId; + messageEntity.isCompleted = rawMessage.isCompleted || false; + messageEntity.isRead = rawMessage.isRead || false; + messageEntity.isRepliedTo = rawMessage.isRepliedTo || false; + messageEntity.message = rawMessage.message; + messageEntity.messageId = + rawMessage.messageId || applicationContext.getUniqueId(); + messageEntity.parentMessageId = + rawMessage.parentMessageId || messageEntity.messageId; + messageEntity.subject = rawMessage.subject; + messageEntity.to = rawMessage.to; + messageEntity.toSection = rawMessage.toSection; + messageEntity.toUserId = rawMessage.toUserId; }; Message.VALIDATION_ERROR_MESSAGES = { From 5ed6ecf09b4ad815ed7691adf864d19992196f91 Mon Sep 17 00:00:00 2001 From: Rachel Schneiderman Date: Mon, 5 Dec 2022 12:26:40 -0800 Subject: [PATCH 06/33] 9684: Add DTO for messages [skip ci] --- shared/src/business/entities/MessageResult.js | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 shared/src/business/entities/MessageResult.js diff --git a/shared/src/business/entities/MessageResult.js b/shared/src/business/entities/MessageResult.js new file mode 100644 index 00000000000..78545fbba25 --- /dev/null +++ b/shared/src/business/entities/MessageResult.js @@ -0,0 +1,35 @@ +const joi = require('joi'); +const { + joiValidationDecorator, + validEntityDecorator, +} = require('./JoiValidationDecorator'); +const { messageDecorator } = require('./Message'); + +/** + * constructor + * + * @param {object} rawMessage the raw message data + * @constructor + */ +function MessageResult() { + this.entityName = 'MessageResult'; +} + +MessageResult.prototype.init = function init( + rawMessage, + { applicationContext }, +) { + messageDecorator(this, rawMessage, { applicationContext }); +}; + +MessageResult.VALIDATION_ERROR_MESSAGES = {}; + +MessageResult.VALIDATION_RULES = {}; + +joiValidationDecorator( + MessageResult, + joi.object().keys(MessageResult.VALIDATION_RULES), + MessageResult.VALIDATION_ERROR_MESSAGES, +); + +exports.MessageResult = validEntityDecorator(MessageResult); From e6ce4bbd01ef0bdcf9a6af8ed895ed7d520971e7 Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Mon, 5 Dec 2022 13:43:51 -0700 Subject: [PATCH 07/33] 9684: added properties that are unique to MessageResult --- shared/src/business/entities/MessageResult.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/shared/src/business/entities/MessageResult.js b/shared/src/business/entities/MessageResult.js index 78545fbba25..770c280df5d 100644 --- a/shared/src/business/entities/MessageResult.js +++ b/shared/src/business/entities/MessageResult.js @@ -20,6 +20,8 @@ MessageResult.prototype.init = function init( { applicationContext }, ) { messageDecorator(this, rawMessage, { applicationContext }); + this.trialDate = rawMessage.trialDate; + this.trialLocation = rawMessage.trialLocation; }; MessageResult.VALIDATION_ERROR_MESSAGES = {}; From 7ac6f362268ed27cba11fb1d4c8752d18e565694 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Mon, 5 Dec 2022 14:03:48 -0700 Subject: [PATCH 08/33] 9684: adding more steps before calendaring trial session [skip ci] --- shared/src/business/entities/Message.js | 5 ++++- .../getInboxMessagesForUserInteractor.ts | 6 ++++-- .../messagesTableJourney.test.js | 16 +++++++++++----- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/shared/src/business/entities/Message.js b/shared/src/business/entities/Message.js index 3b2bb6a7ae3..e18d2f42e89 100644 --- a/shared/src/business/entities/Message.js +++ b/shared/src/business/entities/Message.js @@ -217,4 +217,7 @@ Message.prototype.addAttachment = function (attachmentToAdd) { return this; }; -exports.Message = validEntityDecorator(Message); +module.exports = { + Message: validEntityDecorator(Message), + messageDecorator, +}; diff --git a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts index be637870e75..bc024ac8fbb 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts @@ -1,4 +1,4 @@ -import { Message } from '../../entities/Message'; +import { MessageResult } from '../../entities/MessageResult'; import { ROLE_PERMISSIONS, isAuthorized, @@ -30,7 +30,9 @@ export const getInboxMessagesForUserInteractor = async ( userId, }); - return Message.validateRawCollection(messages, { + const result = MessageResult.validateRawCollection(messages, { applicationContext, }); + + console.log('------result', result); }; diff --git a/web-client/integration-tests/messagesTableJourney.test.js b/web-client/integration-tests/messagesTableJourney.test.js index a8e808586e2..dda575a6fb7 100644 --- a/web-client/integration-tests/messagesTableJourney.test.js +++ b/web-client/integration-tests/messagesTableJourney.test.js @@ -34,12 +34,19 @@ describe('messages table journey', () => { const caseDetail = await uploadPetition(cerebralTest); expect(caseDetail.docketNumber).toBeDefined(); cerebralTest.docketNumber = caseDetail.docketNumber; - cerebralTest.documentId = caseDetail.docketEntries[0].docketEntryId; }); loginAs(cerebralTest, 'petitionsclerk@example.com'); - petitionsClerkSetsATrialSessionsSchedule(cerebralTest); petitionsClerkServesElectronicCaseToIrs(cerebralTest); + + //as docketclerk + // docketClerkUpdatesCaseStatusToReadyForTrial + + // /as petitionsclerk + //go to trial session detail, mark qc complete + + petitionsClerkSetsATrialSessionsSchedule(cerebralTest); + it('petitions clerk manually adds a case to a calendared trial session', async () => { await cerebralTest.runSequence('gotoCaseDetailSequence', { docketNumber: cerebralTest.docketNumber, @@ -62,6 +69,7 @@ describe('messages table journey', () => { expect(cerebralTest.getState('caseDetail.trialDate')).toBeDefined(); }); + createNewMessageOnCase(cerebralTest); it('petitions clerk views case trial information on sent messages view', async () => { @@ -73,7 +81,7 @@ describe('messages table journey', () => { const messages = cerebralTest.getState('messages'); const foundMessage = messages.find( - message => message.subject === cerebralTest.testMessageSubject, + message => message.docketNumber === cerebralTest.docketNumber, ); //add checks for trial info @@ -83,6 +91,4 @@ describe('messages table journey', () => { trialLocation: '', }); }); - - petitionsClerkViewsSentMessagesBox(cerebralTest); }); From 450267e479935cdb34329ce42d1baa04ea0cae2a Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Mon, 5 Dec 2022 14:31:39 -0700 Subject: [PATCH 09/33] 9684: use seed data for calendared case instead of generating dynamically [skip ci] --- .../messagesTableJourney.test.js | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/web-client/integration-tests/messagesTableJourney.test.js b/web-client/integration-tests/messagesTableJourney.test.js index dda575a6fb7..83478f25923 100644 --- a/web-client/integration-tests/messagesTableJourney.test.js +++ b/web-client/integration-tests/messagesTableJourney.test.js @@ -1,18 +1,12 @@ import { CASE_STATUS_TYPES } from '../../shared/src/business/entities/EntityConstants'; +import { loginAs, refreshElasticsearchIndex, setupTest } from './helpers'; import { createNewMessageOnCase } from './journey/createNewMessageOnCase'; -import { docketClerkCreatesATrialSession } from './journey/docketClerkCreatesATrialSession'; -import { - loginAs, - refreshElasticsearchIndex, - setupTest, - uploadPetition, -} from './helpers'; import { petitionsClerkServesElectronicCaseToIrs } from './journey/petitionsClerkServesElectronicCaseToIrs'; import { petitionsClerkSetsATrialSessionsSchedule } from './journey/petitionsClerkSetsATrialSessionsSchedule'; -import { petitionsClerkViewsSentMessagesBox } from './journey/petitionsClerkViewsSentMessagesBox'; describe('messages table journey', () => { const cerebralTest = setupTest(); + // const calendaredCaseDocketNumber = '103-20'; beforeAll(() => { jest.setTimeout(40000); @@ -26,16 +20,6 @@ describe('messages table journey', () => { cerebralTest.closeSocket(); }); - loginAs(cerebralTest, 'docketclerk@example.com'); - docketClerkCreatesATrialSession(cerebralTest); - - loginAs(cerebralTest, 'petitioner@example.com'); - it('Create test case to send messages', async () => { - const caseDetail = await uploadPetition(cerebralTest); - expect(caseDetail.docketNumber).toBeDefined(); - cerebralTest.docketNumber = caseDetail.docketNumber; - }); - loginAs(cerebralTest, 'petitionsclerk@example.com'); petitionsClerkServesElectronicCaseToIrs(cerebralTest); From ab1e32de327b5fcd1812dce62b2d6fa5e6ac3772 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Mon, 5 Dec 2022 14:48:11 -0700 Subject: [PATCH 10/33] 9684: failing test, receiving undefined [skip ci] --- .../storage/fixtures/seed/efcms-local.json | 9 +++- .../messagesTableJourney.test.js | 42 +++---------------- 2 files changed, 13 insertions(+), 38 deletions(-) diff --git a/web-api/storage/fixtures/seed/efcms-local.json b/web-api/storage/fixtures/seed/efcms-local.json index 9e3feaafaf8..7e52a212191 100644 --- a/web-api/storage/fixtures/seed/efcms-local.json +++ b/web-api/storage/fixtures/seed/efcms-local.json @@ -4552,7 +4552,14 @@ "partySecondary": false, "pk": "case|103-20", "documentTitle": "Petition", - "docketNumber": "103-20" + "docketNumber": "103-20", + "servedParties": [ + { + "name": "Reuben Blair", + "email": "petitioner@example.com" + } + ], + "servedAt": "2020-09-25T19:27:16.630Z" }, { "isStricken": false, diff --git a/web-client/integration-tests/messagesTableJourney.test.js b/web-client/integration-tests/messagesTableJourney.test.js index 83478f25923..25cb704649c 100644 --- a/web-client/integration-tests/messagesTableJourney.test.js +++ b/web-client/integration-tests/messagesTableJourney.test.js @@ -1,12 +1,10 @@ import { CASE_STATUS_TYPES } from '../../shared/src/business/entities/EntityConstants'; -import { loginAs, refreshElasticsearchIndex, setupTest } from './helpers'; import { createNewMessageOnCase } from './journey/createNewMessageOnCase'; -import { petitionsClerkServesElectronicCaseToIrs } from './journey/petitionsClerkServesElectronicCaseToIrs'; -import { petitionsClerkSetsATrialSessionsSchedule } from './journey/petitionsClerkSetsATrialSessionsSchedule'; +import { loginAs, setupTest } from './helpers'; describe('messages table journey', () => { const cerebralTest = setupTest(); - // const calendaredCaseDocketNumber = '103-20'; + const calendaredCaseDocketNumber = '103-20'; beforeAll(() => { jest.setTimeout(40000); @@ -21,41 +19,10 @@ describe('messages table journey', () => { }); loginAs(cerebralTest, 'petitionsclerk@example.com'); - petitionsClerkServesElectronicCaseToIrs(cerebralTest); - - //as docketclerk - // docketClerkUpdatesCaseStatusToReadyForTrial - - // /as petitionsclerk - //go to trial session detail, mark qc complete - - petitionsClerkSetsATrialSessionsSchedule(cerebralTest); - - it('petitions clerk manually adds a case to a calendared trial session', async () => { - await cerebralTest.runSequence('gotoCaseDetailSequence', { - docketNumber: cerebralTest.docketNumber, - }); - - await cerebralTest.runSequence('openAddToTrialModalSequence'); - - await cerebralTest.runSequence('updateModalValueSequence', { - key: 'showAllLocations', - value: true, - }); - - await cerebralTest.runSequence('updateModalValueSequence', { - key: 'trialSessionId', - value: cerebralTest.trialSessionId, - }); - - await cerebralTest.runSequence('addCaseToTrialSessionSequence'); - await refreshElasticsearchIndex(); - - expect(cerebralTest.getState('caseDetail.trialDate')).toBeDefined(); + createNewMessageOnCase(cerebralTest, { + docketNumber: calendaredCaseDocketNumber, }); - createNewMessageOnCase(cerebralTest); - it('petitions clerk views case trial information on sent messages view', async () => { await cerebralTest.runSequence('gotoMessagesSequence', { box: 'outbox', @@ -71,6 +38,7 @@ describe('messages table journey', () => { //add checks for trial info expect(foundMessage).toMatchObject({ caseStatus: CASE_STATUS_TYPES.calendared, + docketNumber: calendaredCaseDocketNumber, trialDate: '', trialLocation: '', }); From 96e878daeb351ab8486ab81cb59cd3a105c1ffbb Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Mon, 5 Dec 2022 15:06:29 -0700 Subject: [PATCH 11/33] 9684: initial integration test now green, used MessageResult entity in interactor fetching Outbox Messages --- .../messages/getOutboxMessagesForUserInteractor.ts | 4 ++-- .../integration-tests/messagesTableJourney.test.js | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.ts b/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.ts index 08a451e35ed..3d0b8ffbd9a 100644 --- a/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.ts +++ b/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.ts @@ -1,4 +1,4 @@ -import { Message } from '../../entities/Message'; +import { MessageResult } from '../../entities/MessageResult'; import { ROLE_PERMISSIONS, isAuthorized, @@ -30,7 +30,7 @@ export const getOutboxMessagesForUserInteractor = async ( userId, }); - return Message.validateRawCollection(messages, { + return MessageResult.validateRawCollection(messages, { applicationContext, }); }; diff --git a/web-client/integration-tests/messagesTableJourney.test.js b/web-client/integration-tests/messagesTableJourney.test.js index 25cb704649c..fc340912400 100644 --- a/web-client/integration-tests/messagesTableJourney.test.js +++ b/web-client/integration-tests/messagesTableJourney.test.js @@ -23,6 +23,11 @@ describe('messages table journey', () => { docketNumber: calendaredCaseDocketNumber, }); + // need to check that the properties trialLocation and trialDate are messages in: + // My Inbox + // Section Inbox + // My Outbox + // Section Outbox it('petitions clerk views case trial information on sent messages view', async () => { await cerebralTest.runSequence('gotoMessagesSequence', { box: 'outbox', @@ -30,17 +35,18 @@ describe('messages table journey', () => { }); const messages = cerebralTest.getState('messages'); + console.log('***messages', messages); const foundMessage = messages.find( - message => message.docketNumber === cerebralTest.docketNumber, + message => message.docketNumber === calendaredCaseDocketNumber, ); //add checks for trial info expect(foundMessage).toMatchObject({ caseStatus: CASE_STATUS_TYPES.calendared, docketNumber: calendaredCaseDocketNumber, - trialDate: '', - trialLocation: '', + trialDate: '2020-11-27T05:00:00.000Z', + trialLocation: 'Houston, Texas', }); }); }); From 163e111392c19f79da489f319a09b15d615626a6 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Mon, 5 Dec 2022 15:13:39 -0700 Subject: [PATCH 12/33] 9864: writing expectation intentionally [skip ci] --- .../computeds/formattedMessages.test.js | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/web-client/src/presenter/computeds/formattedMessages.test.js b/web-client/src/presenter/computeds/formattedMessages.test.js index 356faaf7806..23399cc7ee2 100644 --- a/web-client/src/presenter/computeds/formattedMessages.test.js +++ b/web-client/src/presenter/computeds/formattedMessages.test.js @@ -1,4 +1,5 @@ /* eslint-disable max-lines */ +import { CASE_STATUS_TYPES } from '../../../../shared/src/business/entities/EntityConstants'; import { formattedMessages as formattedMessagesComputed } from './formattedMessages'; import { runCompute } from 'cerebral/test'; import { withAppContextDecorator } from '../../withAppContext'; @@ -488,4 +489,39 @@ describe('formattedMessages', () => { expect(result.messages.length).toEqual(2); }); + + it('should add trialDate and trilaLocation to status when status is calendared', () => { + const mockCalendaredMessage = {}; + const result = runCompute(formattedMessages, { + state: { + messageBoxToDisplay: { + box: 'outbox', + }, + messages: [ + { + completedAt: '2019-01-02T16:29:13.122Z', + createdAt: '2019-01-01T16:29:13.122Z', + docketNumber: '101-20', + message: 'This is a test message', + status: CASE_STATUS_TYPES.calendared, + }, + ], + screenMetadata: {}, + user: { + role: 'adc', + }, + }, + }); + + expect(result).toMatchObject({ + messages: [ + { + createdAt: '2019-01-01T16:29:13.122Z', + docketNumber: '101-20', + message: 'This is a test message', + status: `Calendared - ${mockCalendaredMessage.trialDate} ${mockCalendaredMessage.trialLocation}`, + }, + ], + }); + }); }); From b6b3e48565d9dafbf193998def9a76843570c29e Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Mon, 5 Dec 2022 15:21:48 -0700 Subject: [PATCH 13/33] 9684: continue work on unit test for formattedMessages [skip ci] --- .../computeds/formattedMessages.test.js | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/web-client/src/presenter/computeds/formattedMessages.test.js b/web-client/src/presenter/computeds/formattedMessages.test.js index 23399cc7ee2..df7591c3ff6 100644 --- a/web-client/src/presenter/computeds/formattedMessages.test.js +++ b/web-client/src/presenter/computeds/formattedMessages.test.js @@ -1,8 +1,8 @@ /* eslint-disable max-lines */ -import { CASE_STATUS_TYPES } from '../../../../shared/src/business/entities/EntityConstants'; -import { formattedMessages as formattedMessagesComputed } from './formattedMessages'; import { runCompute } from 'cerebral/test'; +import { CASE_STATUS_TYPES } from '../../../../shared/src/business/entities/EntityConstants'; import { withAppContextDecorator } from '../../withAppContext'; +import { formattedMessages as formattedMessagesComputed } from './formattedMessages'; describe('formattedMessages', () => { const formattedMessages = withAppContextDecorator(formattedMessagesComputed); @@ -490,22 +490,22 @@ describe('formattedMessages', () => { expect(result.messages.length).toEqual(2); }); - it('should add trialDate and trilaLocation to status when status is calendared', () => { - const mockCalendaredMessage = {}; + it('should include trialDate and trilaLocation to status when status is calendared', () => { + const mockCalendaredMessage = { + completedAt: '2019-01-02T16:29:13.122Z', + createdAt: '2019-01-01T16:29:13.122Z', + docketNumber: '101-20', + message: 'This is a test message', + status: CASE_STATUS_TYPES.calendared, + trialDate: '2025-01-01T16:29:13.122Z', + trialLocation: 'Austin, TX', + }; const result = runCompute(formattedMessages, { state: { messageBoxToDisplay: { box: 'outbox', }, - messages: [ - { - completedAt: '2019-01-02T16:29:13.122Z', - createdAt: '2019-01-01T16:29:13.122Z', - docketNumber: '101-20', - message: 'This is a test message', - status: CASE_STATUS_TYPES.calendared, - }, - ], + messages: [mockCalendaredMessage], screenMetadata: {}, user: { role: 'adc', @@ -519,7 +519,9 @@ describe('formattedMessages', () => { createdAt: '2019-01-01T16:29:13.122Z', docketNumber: '101-20', message: 'This is a test message', - status: `Calendared - ${mockCalendaredMessage.trialDate} ${mockCalendaredMessage.trialLocation}`, + status: 'Calendared', + trialDate: '01/01/25', + trialLocation: 'Austin, TX', }, ], }); From 5b0771199d503f34df1315149f1b6ea6589bee6f Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Mon, 5 Dec 2022 15:28:24 -0700 Subject: [PATCH 14/33] 9684: updating test to check for flag [skip ci] --- .../presenter/computeds/formattedMessages.js | 8 ++++++++ .../computeds/formattedMessages.test.js | 20 +++++-------------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/web-client/src/presenter/computeds/formattedMessages.js b/web-client/src/presenter/computeds/formattedMessages.js index 02fae35926d..7b3a0435c7c 100644 --- a/web-client/src/presenter/computeds/formattedMessages.js +++ b/web-client/src/presenter/computeds/formattedMessages.js @@ -6,6 +6,8 @@ import { import { state } from 'cerebral'; export const formattedMessages = (get, applicationContext) => { + const { CASE_STATUS_TYPES } = applicationContext.getConstants(); + const tableSort = get(state.tableSort); const { completedMessages, messages } = getFormattedMessages({ @@ -15,6 +17,12 @@ export const formattedMessages = (get, applicationContext) => { tableSort, }); + messages.forEach(message => { + if (message.status === CASE_STATUS_TYPES.calendared) { + message.showTrialInformation = true; + } + }); + const { box } = get(state.messageBoxToDisplay); const { role } = get(state.user); const { USER_ROLES } = applicationContext.getConstants(); diff --git a/web-client/src/presenter/computeds/formattedMessages.test.js b/web-client/src/presenter/computeds/formattedMessages.test.js index df7591c3ff6..a50a154fc0f 100644 --- a/web-client/src/presenter/computeds/formattedMessages.test.js +++ b/web-client/src/presenter/computeds/formattedMessages.test.js @@ -1,8 +1,8 @@ /* eslint-disable max-lines */ -import { runCompute } from 'cerebral/test'; import { CASE_STATUS_TYPES } from '../../../../shared/src/business/entities/EntityConstants'; -import { withAppContextDecorator } from '../../withAppContext'; import { formattedMessages as formattedMessagesComputed } from './formattedMessages'; +import { runCompute } from 'cerebral/test'; +import { withAppContextDecorator } from '../../withAppContext'; describe('formattedMessages', () => { const formattedMessages = withAppContextDecorator(formattedMessagesComputed); @@ -490,7 +490,8 @@ describe('formattedMessages', () => { expect(result.messages.length).toEqual(2); }); - it('should include trialDate and trilaLocation to status when status is calendared', () => { + //add app context to run compute + it.only('should set showTrialInformation to true when status is calendared', () => { const mockCalendaredMessage = { completedAt: '2019-01-02T16:29:13.122Z', createdAt: '2019-01-01T16:29:13.122Z', @@ -513,17 +514,6 @@ describe('formattedMessages', () => { }, }); - expect(result).toMatchObject({ - messages: [ - { - createdAt: '2019-01-01T16:29:13.122Z', - docketNumber: '101-20', - message: 'This is a test message', - status: 'Calendared', - trialDate: '01/01/25', - trialLocation: 'Austin, TX', - }, - ], - }); + expect(result.messages[0].showTrialInformation).toBeTruthy(); }); }); From 9899dc1742d8fdb026efb62d12afba4087786ecd Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Mon, 5 Dec 2022 15:35:31 -0700 Subject: [PATCH 15/33] 9684: continue work on unit test --- .../src/presenter/computeds/formattedMessages.test.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/web-client/src/presenter/computeds/formattedMessages.test.js b/web-client/src/presenter/computeds/formattedMessages.test.js index a50a154fc0f..5f6244436e7 100644 --- a/web-client/src/presenter/computeds/formattedMessages.test.js +++ b/web-client/src/presenter/computeds/formattedMessages.test.js @@ -1,11 +1,15 @@ /* eslint-disable max-lines */ -import { CASE_STATUS_TYPES } from '../../../../shared/src/business/entities/EntityConstants'; -import { formattedMessages as formattedMessagesComputed } from './formattedMessages'; import { runCompute } from 'cerebral/test'; +import { CASE_STATUS_TYPES } from '../../../../shared/src/business/entities/EntityConstants'; +import { applicationContextForClient as applicationContext } from '../../../../shared/src/business/test/createTestApplicationContext'; import { withAppContextDecorator } from '../../withAppContext'; +import { formattedMessages as formattedMessagesComputed } from './formattedMessages'; describe('formattedMessages', () => { - const formattedMessages = withAppContextDecorator(formattedMessagesComputed); + const formattedMessages = withAppContextDecorator( + formattedMessagesComputed, + applicationContext, + ); it('returns filtered messages sorted oldest to newest and completedMessages from state.messages when messageBoxToDisplay.box is inbox', () => { const result = runCompute(formattedMessages, { From 4e025de4e9e6ebbcd5db1c1a1e0e1083bb70cae0 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Mon, 5 Dec 2022 15:48:46 -0700 Subject: [PATCH 16/33] 9684: updating to use correct property [skip ci] --- .../getInboxMessagesForUserInteractor.ts | 4 +- .../presenter/computeds/formattedMessages.js | 7 ++-- .../computeds/formattedMessages.test.js | 41 ++++++++++++++----- .../Messages/MessagesIndividualOutbox.jsx | 10 ++++- 4 files changed, 44 insertions(+), 18 deletions(-) diff --git a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts index bc024ac8fbb..d78dd86a7fd 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts @@ -30,9 +30,7 @@ export const getInboxMessagesForUserInteractor = async ( userId, }); - const result = MessageResult.validateRawCollection(messages, { + MessageResult.validateRawCollection(messages, { applicationContext, }); - - console.log('------result', result); }; diff --git a/web-client/src/presenter/computeds/formattedMessages.js b/web-client/src/presenter/computeds/formattedMessages.js index 7b3a0435c7c..11308336406 100644 --- a/web-client/src/presenter/computeds/formattedMessages.js +++ b/web-client/src/presenter/computeds/formattedMessages.js @@ -6,7 +6,7 @@ import { import { state } from 'cerebral'; export const formattedMessages = (get, applicationContext) => { - const { CASE_STATUS_TYPES } = applicationContext.getConstants(); + const { STATUS_TYPES } = applicationContext.getConstants(); const tableSort = get(state.tableSort); @@ -18,9 +18,8 @@ export const formattedMessages = (get, applicationContext) => { }); messages.forEach(message => { - if (message.status === CASE_STATUS_TYPES.calendared) { - message.showTrialInformation = true; - } + message.showTrialInformation = + message.caseStatus === STATUS_TYPES.calendared; }); const { box } = get(state.messageBoxToDisplay); diff --git a/web-client/src/presenter/computeds/formattedMessages.test.js b/web-client/src/presenter/computeds/formattedMessages.test.js index 5f6244436e7..6034ad605cb 100644 --- a/web-client/src/presenter/computeds/formattedMessages.test.js +++ b/web-client/src/presenter/computeds/formattedMessages.test.js @@ -1,15 +1,12 @@ /* eslint-disable max-lines */ -import { runCompute } from 'cerebral/test'; -import { CASE_STATUS_TYPES } from '../../../../shared/src/business/entities/EntityConstants'; import { applicationContextForClient as applicationContext } from '../../../../shared/src/business/test/createTestApplicationContext'; -import { withAppContextDecorator } from '../../withAppContext'; import { formattedMessages as formattedMessagesComputed } from './formattedMessages'; +import { runCompute } from 'cerebral/test'; +import { withAppContextDecorator } from '../../withAppContext'; describe('formattedMessages', () => { - const formattedMessages = withAppContextDecorator( - formattedMessagesComputed, - applicationContext, - ); + const { STATUS_TYPES } = applicationContext.getConstants(); + const formattedMessages = withAppContextDecorator(formattedMessagesComputed); it('returns filtered messages sorted oldest to newest and completedMessages from state.messages when messageBoxToDisplay.box is inbox', () => { const result = runCompute(formattedMessages, { @@ -494,14 +491,13 @@ describe('formattedMessages', () => { expect(result.messages.length).toEqual(2); }); - //add app context to run compute - it.only('should set showTrialInformation to true when status is calendared', () => { + it('should set showTrialInformation to true when caseStatus is calendared', () => { const mockCalendaredMessage = { + caseStatus: STATUS_TYPES.calendared, completedAt: '2019-01-02T16:29:13.122Z', createdAt: '2019-01-01T16:29:13.122Z', docketNumber: '101-20', message: 'This is a test message', - status: CASE_STATUS_TYPES.calendared, trialDate: '2025-01-01T16:29:13.122Z', trialLocation: 'Austin, TX', }; @@ -520,4 +516,29 @@ describe('formattedMessages', () => { expect(result.messages[0].showTrialInformation).toBeTruthy(); }); + + it('should set showTrialInformation to false when caseStatus is NOT calendared', () => { + const mockCalendaredMessage = { + caseStatus: STATUS_TYPES.new, + completedAt: '2019-01-02T16:29:13.122Z', + createdAt: '2019-01-01T16:29:13.122Z', + docketNumber: '101-20', + message: 'This is a test message', + }; + + const result = runCompute(formattedMessages, { + state: { + messageBoxToDisplay: { + box: 'outbox', + }, + messages: [mockCalendaredMessage], + screenMetadata: {}, + user: { + role: 'adc', + }, + }, + }); + + expect(result.messages[0].showTrialInformation).toBeFalsy(); + }); }); diff --git a/web-client/src/views/Messages/MessagesIndividualOutbox.jsx b/web-client/src/views/Messages/MessagesIndividualOutbox.jsx index 188adcc4e08..61679122f02 100644 --- a/web-client/src/views/Messages/MessagesIndividualOutbox.jsx +++ b/web-client/src/views/Messages/MessagesIndividualOutbox.jsx @@ -141,7 +141,15 @@ export const MessagesIndividualOutbox = connect( {message.caseTitle} - {message.caseStatus} + {!message.showTrialInformation && ( + {message.caseStatus} + )} + {message.showTrialInformation && ( + + {message.caseStatus} - {message.trialDate}{' '} + {message.trialLocation} + + )} {message.to} {message.toSection} From 42c9c0edbb668edccd63e0f43804cc80cfeeeaab Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Mon, 5 Dec 2022 15:56:44 -0700 Subject: [PATCH 17/33] 9684: format trialDate to mm/dd/yy --- web-client/src/presenter/computeds/formattedMessages.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web-client/src/presenter/computeds/formattedMessages.js b/web-client/src/presenter/computeds/formattedMessages.js index 11308336406..c19fb2277cc 100644 --- a/web-client/src/presenter/computeds/formattedMessages.js +++ b/web-client/src/presenter/computeds/formattedMessages.js @@ -18,6 +18,9 @@ export const formattedMessages = (get, applicationContext) => { }); messages.forEach(message => { + message.trialDate = applicationContext + .getUtilities() + .formatDateString(message.trialDate, 'MMDDYY'); message.showTrialInformation = message.caseStatus === STATUS_TYPES.calendared; }); From 7aca3778844eb30f4b48d759a7aa6ecd187a9edf Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Tue, 6 Dec 2022 09:37:13 -0700 Subject: [PATCH 18/33] 9684: format state to abbreviation, use formatted values in jsx --- .../src/presenter/computeds/formattedMessages.js | 11 +++++++++-- .../src/views/Messages/MessagesIndividualOutbox.jsx | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/web-client/src/presenter/computeds/formattedMessages.js b/web-client/src/presenter/computeds/formattedMessages.js index c19fb2277cc..9443ce5d93a 100644 --- a/web-client/src/presenter/computeds/formattedMessages.js +++ b/web-client/src/presenter/computeds/formattedMessages.js @@ -3,10 +3,11 @@ import { applyFiltersToMessages, getFormattedMessages, } from '../utilities/processFormattedMessages'; +import { invert } from 'lodash'; import { state } from 'cerebral'; export const formattedMessages = (get, applicationContext) => { - const { STATUS_TYPES } = applicationContext.getConstants(); + const { STATUS_TYPES, US_STATES } = applicationContext.getConstants(); const tableSort = get(state.tableSort); @@ -18,9 +19,15 @@ export const formattedMessages = (get, applicationContext) => { }); messages.forEach(message => { - message.trialDate = applicationContext + const cityAndState = message.trialLocation.split(', '); + const stateAbbreviation = invert(US_STATES)[cityAndState[1]]; + const formattedTrialLocation = `${cityAndState[0]}, ${stateAbbreviation}`; + message.formattedTrialLocation = formattedTrialLocation; + + message.formattedTrialDate = applicationContext .getUtilities() .formatDateString(message.trialDate, 'MMDDYY'); + message.showTrialInformation = message.caseStatus === STATUS_TYPES.calendared; }); diff --git a/web-client/src/views/Messages/MessagesIndividualOutbox.jsx b/web-client/src/views/Messages/MessagesIndividualOutbox.jsx index 61679122f02..8012361db90 100644 --- a/web-client/src/views/Messages/MessagesIndividualOutbox.jsx +++ b/web-client/src/views/Messages/MessagesIndividualOutbox.jsx @@ -146,8 +146,8 @@ export const MessagesIndividualOutbox = connect( )} {message.showTrialInformation && ( - {message.caseStatus} - {message.trialDate}{' '} - {message.trialLocation} + {message.caseStatus} - {message.formattedTrialDate}{' '} + {message.formattedTrialLocation} )} {message.to} From 997fe74ac5f1657e54a005c0c7270a5ea8d5fe96 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Tue, 6 Dec 2022 09:48:45 -0700 Subject: [PATCH 19/33] 9684: extracting abbreviation code to utility method --- .../src/business/utilities/abbreviateState.js | 20 +++++++++++++++++++ web-client/src/applicationContext.js | 2 ++ .../presenter/computeds/formattedMessages.js | 9 +++------ 3 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 shared/src/business/utilities/abbreviateState.js diff --git a/shared/src/business/utilities/abbreviateState.js b/shared/src/business/utilities/abbreviateState.js new file mode 100644 index 00000000000..98da069ecb3 --- /dev/null +++ b/shared/src/business/utilities/abbreviateState.js @@ -0,0 +1,20 @@ +import { US_STATES } from '../entities/EntityConstants'; +import { invert } from 'lodash'; + +/** + * abbreviates the state given a string with a comma separated city and state + * + * @param {string} locationString the location string to format + * @returns {string} a formatted string with the abbreviated state + */ +const abbreviateState = locationString => { + const cityAndState = locationString.split(', '); + const stateAbbreviation = invert(US_STATES)[cityAndState[1]]; + const formattedCityAndState = `${cityAndState[0]}, ${stateAbbreviation}`; + + return formattedCityAndState; +}; + +module.exports = { + abbreviateState, +}; diff --git a/web-client/src/applicationContext.js b/web-client/src/applicationContext.js index d748ac759f5..62ca580bb56 100644 --- a/web-client/src/applicationContext.js +++ b/web-client/src/applicationContext.js @@ -66,6 +66,7 @@ const { getWorkQueueFilters, } = require('../../shared/src/business/utilities/getWorkQueueFilters'); import { User } from '../../shared/src/business/entities/User'; +import { abbreviateState } from '../../shared/src/business/utilities/abbreviateState'; import { addCaseToTrialSessionInteractor } from '../../shared/src/proxies/trialSessions/addCaseToTrialSessionProxy'; import { addConsolidatedCaseInteractor } from '../../shared/src/proxies/addConsolidatedCaseProxy'; import { addCoversheetInteractor } from '../../shared/src/proxies/documents/addCoversheetProxy'; @@ -696,6 +697,7 @@ const applicationContext = { getUserPermissions, getUtilities: () => { return { + abbreviateState, aggregatePartiesForService, calculateISODate, canAllowDocumentServiceForCase, diff --git a/web-client/src/presenter/computeds/formattedMessages.js b/web-client/src/presenter/computeds/formattedMessages.js index 9443ce5d93a..d439bc29550 100644 --- a/web-client/src/presenter/computeds/formattedMessages.js +++ b/web-client/src/presenter/computeds/formattedMessages.js @@ -3,11 +3,10 @@ import { applyFiltersToMessages, getFormattedMessages, } from '../utilities/processFormattedMessages'; -import { invert } from 'lodash'; import { state } from 'cerebral'; export const formattedMessages = (get, applicationContext) => { - const { STATUS_TYPES, US_STATES } = applicationContext.getConstants(); + const { STATUS_TYPES } = applicationContext.getConstants(); const tableSort = get(state.tableSort); @@ -19,10 +18,8 @@ export const formattedMessages = (get, applicationContext) => { }); messages.forEach(message => { - const cityAndState = message.trialLocation.split(', '); - const stateAbbreviation = invert(US_STATES)[cityAndState[1]]; - const formattedTrialLocation = `${cityAndState[0]}, ${stateAbbreviation}`; - message.formattedTrialLocation = formattedTrialLocation; + //call utility method here + // message.formattedTrialLocation = formattedTrialLocation; message.formattedTrialDate = applicationContext .getUtilities() From 7281c26ef7dfaf3361802003d1201d807584ec3d Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Tue, 6 Dec 2022 10:28:23 -0700 Subject: [PATCH 20/33] 9684: add unit test for abbreviateState helper --- shared/src/business/utilities/abbreviateState.js | 2 +- .../src/business/utilities/abbreviateState.test.js | 12 ++++++++++++ .../src/presenter/computeds/formattedMessages.js | 5 +++-- 3 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 shared/src/business/utilities/abbreviateState.test.js diff --git a/shared/src/business/utilities/abbreviateState.js b/shared/src/business/utilities/abbreviateState.js index 98da069ecb3..42c42cb228d 100644 --- a/shared/src/business/utilities/abbreviateState.js +++ b/shared/src/business/utilities/abbreviateState.js @@ -1,5 +1,5 @@ -import { US_STATES } from '../entities/EntityConstants'; import { invert } from 'lodash'; +import { US_STATES } from '../entities/EntityConstants'; /** * abbreviates the state given a string with a comma separated city and state diff --git a/shared/src/business/utilities/abbreviateState.test.js b/shared/src/business/utilities/abbreviateState.test.js new file mode 100644 index 00000000000..442e579ba5e --- /dev/null +++ b/shared/src/business/utilities/abbreviateState.test.js @@ -0,0 +1,12 @@ +const { abbreviateState } = require('./abbreviateState'); + +describe('abbreviateState', () => { + it('should return a string with an abbreviated state when passed a comma separated city and unabbreviated state', () => { + const locationString = 'Denver, Colorado'; + const expectedResult = 'Denver, CO'; + + const result = abbreviateState(locationString); + + expect(result).toEqual(expectedResult); + }); +}); diff --git a/web-client/src/presenter/computeds/formattedMessages.js b/web-client/src/presenter/computeds/formattedMessages.js index d439bc29550..99f230b380a 100644 --- a/web-client/src/presenter/computeds/formattedMessages.js +++ b/web-client/src/presenter/computeds/formattedMessages.js @@ -18,8 +18,9 @@ export const formattedMessages = (get, applicationContext) => { }); messages.forEach(message => { - //call utility method here - // message.formattedTrialLocation = formattedTrialLocation; + message.formattedTrialLocation = applicationContext + .getUtilities() + .abbreviateState(message.trialLocation); message.formattedTrialDate = applicationContext .getUtilities() From fc18862ad0d59a3f8612bb42b4b644124afedc85 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Tue, 6 Dec 2022 10:37:59 -0700 Subject: [PATCH 21/33] 9684: only formatting trial info is status is calendared, adding tests --- .../src/business/utilities/abbreviateState.js | 2 +- .../presenter/computeds/formattedMessages.js | 18 ++++++----- .../computeds/formattedMessages.test.js | 30 +++++++++++++++++++ 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/shared/src/business/utilities/abbreviateState.js b/shared/src/business/utilities/abbreviateState.js index 42c42cb228d..98da069ecb3 100644 --- a/shared/src/business/utilities/abbreviateState.js +++ b/shared/src/business/utilities/abbreviateState.js @@ -1,5 +1,5 @@ -import { invert } from 'lodash'; import { US_STATES } from '../entities/EntityConstants'; +import { invert } from 'lodash'; /** * abbreviates the state given a string with a comma separated city and state diff --git a/web-client/src/presenter/computeds/formattedMessages.js b/web-client/src/presenter/computeds/formattedMessages.js index 99f230b380a..a9891e31d48 100644 --- a/web-client/src/presenter/computeds/formattedMessages.js +++ b/web-client/src/presenter/computeds/formattedMessages.js @@ -18,16 +18,18 @@ export const formattedMessages = (get, applicationContext) => { }); messages.forEach(message => { - message.formattedTrialLocation = applicationContext - .getUtilities() - .abbreviateState(message.trialLocation); - - message.formattedTrialDate = applicationContext - .getUtilities() - .formatDateString(message.trialDate, 'MMDDYY'); - message.showTrialInformation = message.caseStatus === STATUS_TYPES.calendared; + + if (message.showTrialInformation) { + message.formattedTrialLocation = applicationContext + .getUtilities() + .abbreviateState(message.trialLocation); + + message.formattedTrialDate = applicationContext + .getUtilities() + .formatDateString(message.trialDate, 'MMDDYY'); + } }); const { box } = get(state.messageBoxToDisplay); diff --git a/web-client/src/presenter/computeds/formattedMessages.test.js b/web-client/src/presenter/computeds/formattedMessages.test.js index 6034ad605cb..8527e011618 100644 --- a/web-client/src/presenter/computeds/formattedMessages.test.js +++ b/web-client/src/presenter/computeds/formattedMessages.test.js @@ -541,4 +541,34 @@ describe('formattedMessages', () => { expect(result.messages[0].showTrialInformation).toBeFalsy(); }); + + it('should format the trialDate and trialLocation on the message when caseStatus is Calendared', () => { + const mockCalendaredMessage = { + caseStatus: STATUS_TYPES.calendared, + completedAt: '2019-01-02T16:29:13.122Z', + createdAt: '2019-01-01T16:29:13.122Z', + docketNumber: '101-20', + message: 'This is a test message', + trialDate: '2019-01-01T16:29:13.122Z', + trialLocation: 'Houston, Texas', + }; + + const result = runCompute(formattedMessages, { + state: { + messageBoxToDisplay: { + box: 'outbox', + }, + messages: [mockCalendaredMessage], + screenMetadata: {}, + user: { + role: 'adc', + }, + }, + }); + + expect(result.messages[0]).toMatchObject({ + formattedTrialDate: '01/01/19', + formattedTrialLocation: 'Houston, TX', + }); + }); }); From 5fc47396a9bbdbc196117779e00ca69b2edceeeb Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Tue, 6 Dec 2022 14:43:51 -0700 Subject: [PATCH 22/33] 9684: add changes to each box and the interactors that feed them, fix tests WIP [skip ci] --- ...etInboxMessagesForSectionInteractor.test.ts | 8 +++++--- .../getInboxMessagesForSectionInteractor.ts | 6 +++--- .../getInboxMessagesForUserInteractor.test.ts | 8 +++++--- .../getInboxMessagesForUserInteractor.ts | 4 ++-- ...tOutboxMessagesForSectionInteractor.test.ts | 8 +++++--- .../getOutboxMessagesForSectionInteractor.ts | 6 +++--- .../getOutboxMessagesForUserInteractor.test.ts | 8 +++++--- .../views/Messages/MessagesIndividualInbox.jsx | 18 +++++++++++++----- .../views/Messages/MessagesSectionInbox.jsx | 16 ++++++++++++---- .../views/Messages/MessagesSectionOutbox.jsx | 16 ++++++++++++---- 10 files changed, 65 insertions(+), 33 deletions(-) diff --git a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts index 5fb90bf6903..60545eb4b69 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts @@ -1,12 +1,12 @@ +import { omit } from 'lodash'; +import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { CASE_STATUS_TYPES, PETITIONS_SECTION, ROLES, } from '../../entities/EntityConstants'; -import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { applicationContext } from '../../test/createTestApplicationContext'; import { getInboxMessagesForSectionInteractor } from './getInboxMessagesForSectionInteractor'; -import { omit } from 'lodash'; describe('getInboxMessagesForSectionInteractor', () => { it('throws unauthorized for a user without MESSAGES permission', async () => { @@ -30,7 +30,7 @@ describe('getInboxMessagesForSectionInteractor', () => { createdAt: '2019-03-01T21:40:46.415Z', docketNumber: '123-45', docketNumberWithSuffix: '123-45S', - entityName: 'Message', + entityName: 'MessageResult', from: 'Test Petitionsclerk2', fromSection: PETITIONS_SECTION, fromUserId: 'fe6eeadd-e4e8-4e56-9ddf-0ebe9516df6b', @@ -44,6 +44,8 @@ describe('getInboxMessagesForSectionInteractor', () => { to: 'Test Petitionsclerk', toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', + trialDate: '2028-03-01T21:40:46.415Z', + trialLocation: 'El Paso, TX', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, diff --git a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.ts b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.ts index 911b11a60ce..bffe2ea13f4 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.ts @@ -1,9 +1,9 @@ -import { Message } from '../../entities/Message'; import { - ROLE_PERMISSIONS, isAuthorized, + ROLE_PERMISSIONS, } from '../../../authorization/authorizationClientService'; import { UnauthorizedError } from '../../../errors/errors'; +import { MessageResult } from '../../entities/MessageResult'; /** * getInboxMessagesForSectionInteractor @@ -30,7 +30,7 @@ export const getInboxMessagesForSectionInteractor = async ( section, }); - return Message.validateRawCollection(messages, { + return MessageResult.validateRawCollection(messages, { applicationContext, }); }; diff --git a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts index 52a90505a77..654d59f186f 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts @@ -1,12 +1,12 @@ +import { omit } from 'lodash'; +import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { CASE_STATUS_TYPES, PETITIONS_SECTION, ROLES, } from '../../entities/EntityConstants'; -import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { applicationContext } from '../../test/createTestApplicationContext'; import { getInboxMessagesForUserInteractor } from './getInboxMessagesForUserInteractor'; -import { omit } from 'lodash'; describe('getInboxMessagesForUserInteractor', () => { it('throws unauthorized for a user without MESSAGES permission', async () => { @@ -30,7 +30,7 @@ describe('getInboxMessagesForUserInteractor', () => { createdAt: '2019-03-01T21:40:46.415Z', docketNumber: '123-45', docketNumberWithSuffix: '123-45S', - entityName: 'Message', + entityName: 'MessageResult', from: 'Test Petitionsclerk2', fromSection: PETITIONS_SECTION, fromUserId: 'fe6eeadd-e4e8-4e56-9ddf-0ebe9516df6b', @@ -44,6 +44,8 @@ describe('getInboxMessagesForUserInteractor', () => { to: 'Test Petitionsclerk', toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', + trialDate: '2028-03-01T21:40:46.415Z', + trialLocation: 'El Paso, TX', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, diff --git a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts index d78dd86a7fd..25c6e3485bb 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts @@ -1,9 +1,9 @@ -import { MessageResult } from '../../entities/MessageResult'; import { - ROLE_PERMISSIONS, isAuthorized, + ROLE_PERMISSIONS, } from '../../../authorization/authorizationClientService'; import { UnauthorizedError } from '../../../errors/errors'; +import { MessageResult } from '../../entities/MessageResult'; /** * getInboxMessagesForUserInteractor diff --git a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts index 603b001d6b6..7df11b045cb 100644 --- a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts +++ b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts @@ -1,12 +1,12 @@ +import { omit } from 'lodash'; +import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { CASE_STATUS_TYPES, PETITIONS_SECTION, ROLES, } from '../../entities/EntityConstants'; -import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { applicationContext } from '../../test/createTestApplicationContext'; import { getOutboxMessagesForSectionInteractor } from './getOutboxMessagesForSectionInteractor'; -import { omit } from 'lodash'; describe('getOutboxMessagesForSectionInteractor', () => { it('throws unauthorized for a user without MESSAGES permission', async () => { @@ -30,7 +30,7 @@ describe('getOutboxMessagesForSectionInteractor', () => { createdAt: '2019-03-01T21:40:46.415Z', docketNumber: '123-45', docketNumberWithSuffix: '123-45S', - entityName: 'Message', + entityName: 'MessageResult', from: 'Test Petitionsclerk2', fromSection: PETITIONS_SECTION, fromUserId: 'fe6eeadd-e4e8-4e56-9ddf-0ebe9516df6b', @@ -44,6 +44,8 @@ describe('getOutboxMessagesForSectionInteractor', () => { to: 'Test Petitionsclerk', toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', + trialDate: '2028-03-01T21:40:46.415Z', + trialLocation: 'El Paso, TX', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, diff --git a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.ts b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.ts index 6fc9616612e..88168690689 100644 --- a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.ts +++ b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.ts @@ -1,9 +1,9 @@ -import { Message } from '../../entities/Message'; import { - ROLE_PERMISSIONS, isAuthorized, + ROLE_PERMISSIONS, } from '../../../authorization/authorizationClientService'; import { UnauthorizedError } from '../../../errors/errors'; +import { MessageResult } from '../../entities/MessageResult'; /** * getOutboxMessagesForSectionInteractor @@ -30,7 +30,7 @@ export const getOutboxMessagesForSectionInteractor = async ( section, }); - return Message.validateRawCollection(messages, { + return MessageResult.validateRawCollection(messages, { applicationContext, }); }; diff --git a/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts b/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts index 8d45fe2f73d..811aeb7a684 100644 --- a/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts +++ b/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts @@ -1,12 +1,12 @@ +import { omit } from 'lodash'; +import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { CASE_STATUS_TYPES, PETITIONS_SECTION, ROLES, } from '../../entities/EntityConstants'; -import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { applicationContext } from '../../test/createTestApplicationContext'; import { getOutboxMessagesForUserInteractor } from './getOutboxMessagesForUserInteractor'; -import { omit } from 'lodash'; describe('getOutboxMessagesForUserInteractor', () => { it('throws unauthorized for a user without MESSAGES permission', async () => { @@ -30,7 +30,7 @@ describe('getOutboxMessagesForUserInteractor', () => { createdAt: '2019-03-01T21:40:46.415Z', docketNumber: '123-45', docketNumberWithSuffix: '123-45S', - entityName: 'Message', + entityName: 'MessageResult', from: 'Test Petitionsclerk2', fromSection: PETITIONS_SECTION, fromUserId: 'fe6eeadd-e4e8-4e56-9ddf-0ebe9516df6b', @@ -44,6 +44,8 @@ describe('getOutboxMessagesForUserInteractor', () => { to: 'Test Petitionsclerk', toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', + trialDate: '2028-03-01T21:40:46.415Z', + trialLocation: 'El Paso, TX', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, diff --git a/web-client/src/views/Messages/MessagesIndividualInbox.jsx b/web-client/src/views/Messages/MessagesIndividualInbox.jsx index 4d676836f55..783f155eca7 100644 --- a/web-client/src/views/Messages/MessagesIndividualInbox.jsx +++ b/web-client/src/views/Messages/MessagesIndividualInbox.jsx @@ -1,12 +1,12 @@ +import { connect } from '@cerebral/react'; +import { sequences, state } from 'cerebral'; +import classNames from 'classnames'; +import React from 'react'; import { Button } from '../../ustc-ui/Button/Button'; import { ConsolidatedCaseIcon } from '../../ustc-ui/Icon/ConsolidatedCaseIcon'; import { Icon } from '../../ustc-ui/Icon/Icon'; import { SortableColumnHeaderButton } from '../../ustc-ui/SortableColumnHeaderButton/SortableColumnHeaderButton'; import { TableFilters } from '../../ustc-ui/TableFilters/TableFilters'; -import { connect } from '@cerebral/react'; -import { sequences, state } from 'cerebral'; -import React from 'react'; -import classNames from 'classnames'; export const MessagesIndividualInbox = connect( { @@ -157,7 +157,15 @@ export const MessagesIndividualInbox = connect( {message.caseTitle} - {message.caseStatus} + {!message.showTrialInformation && ( + {message.caseStatus} + )} + {message.showTrialInformation && ( + + {message.caseStatus} - {message.formattedTrialDate}{' '} + {message.formattedTrialLocation} + + )} {message.from} {message.fromSection} diff --git a/web-client/src/views/Messages/MessagesSectionInbox.jsx b/web-client/src/views/Messages/MessagesSectionInbox.jsx index dc59a4da5ee..1dccc7924ab 100644 --- a/web-client/src/views/Messages/MessagesSectionInbox.jsx +++ b/web-client/src/views/Messages/MessagesSectionInbox.jsx @@ -1,10 +1,10 @@ +import { connect } from '@cerebral/react'; +import { sequences, state } from 'cerebral'; +import React from 'react'; import { Button } from '../../ustc-ui/Button/Button'; import { ConsolidatedCaseIcon } from '../../ustc-ui/Icon/ConsolidatedCaseIcon'; import { SortableColumnHeaderButton } from '../../ustc-ui/SortableColumnHeaderButton/SortableColumnHeaderButton'; import { TableFilters } from '../../ustc-ui/TableFilters/TableFilters'; -import { connect } from '@cerebral/react'; -import { sequences, state } from 'cerebral'; -import React from 'react'; export const MessagesSectionInbox = connect( { @@ -147,7 +147,15 @@ const MessageInboxRow = React.memo(function MessageInboxRow({ message }) {
{message.message}
{message.caseTitle} - {message.caseStatus} + {!message.showTrialInformation && ( + {message.caseStatus} + )} + {message.showTrialInformation && ( + + {message.caseStatus} - {message.formattedTrialDate}{' '} + {message.formattedTrialLocation} + + )} {message.to} {message.from} {message.fromSection} diff --git a/web-client/src/views/Messages/MessagesSectionOutbox.jsx b/web-client/src/views/Messages/MessagesSectionOutbox.jsx index c9bb996306d..1cfade76392 100644 --- a/web-client/src/views/Messages/MessagesSectionOutbox.jsx +++ b/web-client/src/views/Messages/MessagesSectionOutbox.jsx @@ -1,10 +1,10 @@ +import { connect } from '@cerebral/react'; +import { sequences, state } from 'cerebral'; +import React from 'react'; import { Button } from '../../ustc-ui/Button/Button'; import { ConsolidatedCaseIcon } from '../../ustc-ui/Icon/ConsolidatedCaseIcon'; import { SortableColumnHeaderButton } from '../../ustc-ui/SortableColumnHeaderButton/SortableColumnHeaderButton'; import { TableFilters } from '../../ustc-ui/TableFilters/TableFilters'; -import { connect } from '@cerebral/react'; -import { sequences, state } from 'cerebral'; -import React from 'react'; export const MessagesSectionOutbox = connect( { @@ -148,7 +148,15 @@ const MessageOutboxRow = React.memo(function MessageOutboxRow({ message }) {
{message.message}
{message.caseTitle} - {message.caseStatus} + {!message.showTrialInformation && ( + {message.caseStatus} + )} + {message.showTrialInformation && ( + + {message.caseStatus} - {message.formattedTrialDate}{' '} + {message.formattedTrialLocation} + + )} {message.to} {message.from} {message.toSection} From 7a252a035f8ddef48a67c2c38aed8d06041cd0d3 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Tue, 6 Dec 2022 14:48:47 -0700 Subject: [PATCH 23/33] 9684: fixing failing test --- .../messages/getInboxMessagesForSectionInteractor.test.ts | 4 ++-- .../messages/getInboxMessagesForSectionInteractor.ts | 4 ++-- .../messages/getInboxMessagesForUserInteractor.test.ts | 4 ++-- .../useCases/messages/getInboxMessagesForUserInteractor.ts | 6 +++--- .../messages/getOutboxMessagesForSectionInteractor.test.ts | 4 ++-- .../messages/getOutboxMessagesForSectionInteractor.ts | 4 ++-- .../messages/getOutboxMessagesForUserInteractor.test.ts | 4 ++-- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts index 60545eb4b69..6d68b382c98 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts @@ -1,12 +1,12 @@ -import { omit } from 'lodash'; -import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { CASE_STATUS_TYPES, PETITIONS_SECTION, ROLES, } from '../../entities/EntityConstants'; +import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { applicationContext } from '../../test/createTestApplicationContext'; import { getInboxMessagesForSectionInteractor } from './getInboxMessagesForSectionInteractor'; +import { omit } from 'lodash'; describe('getInboxMessagesForSectionInteractor', () => { it('throws unauthorized for a user without MESSAGES permission', async () => { diff --git a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.ts b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.ts index bffe2ea13f4..67e9c2bf069 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.ts @@ -1,9 +1,9 @@ +import { MessageResult } from '../../entities/MessageResult'; import { - isAuthorized, ROLE_PERMISSIONS, + isAuthorized, } from '../../../authorization/authorizationClientService'; import { UnauthorizedError } from '../../../errors/errors'; -import { MessageResult } from '../../entities/MessageResult'; /** * getInboxMessagesForSectionInteractor diff --git a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts index 654d59f186f..fdc2263ac5b 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts @@ -1,12 +1,12 @@ -import { omit } from 'lodash'; -import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { CASE_STATUS_TYPES, PETITIONS_SECTION, ROLES, } from '../../entities/EntityConstants'; +import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { applicationContext } from '../../test/createTestApplicationContext'; import { getInboxMessagesForUserInteractor } from './getInboxMessagesForUserInteractor'; +import { omit } from 'lodash'; describe('getInboxMessagesForUserInteractor', () => { it('throws unauthorized for a user without MESSAGES permission', async () => { diff --git a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts index 25c6e3485bb..acfb55b9700 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.ts @@ -1,9 +1,9 @@ +import { MessageResult } from '../../entities/MessageResult'; import { - isAuthorized, ROLE_PERMISSIONS, + isAuthorized, } from '../../../authorization/authorizationClientService'; import { UnauthorizedError } from '../../../errors/errors'; -import { MessageResult } from '../../entities/MessageResult'; /** * getInboxMessagesForUserInteractor @@ -30,7 +30,7 @@ export const getInboxMessagesForUserInteractor = async ( userId, }); - MessageResult.validateRawCollection(messages, { + return MessageResult.validateRawCollection(messages, { applicationContext, }); }; diff --git a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts index 7df11b045cb..bc272933bbb 100644 --- a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts +++ b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts @@ -1,12 +1,12 @@ -import { omit } from 'lodash'; -import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { CASE_STATUS_TYPES, PETITIONS_SECTION, ROLES, } from '../../entities/EntityConstants'; +import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { applicationContext } from '../../test/createTestApplicationContext'; import { getOutboxMessagesForSectionInteractor } from './getOutboxMessagesForSectionInteractor'; +import { omit } from 'lodash'; describe('getOutboxMessagesForSectionInteractor', () => { it('throws unauthorized for a user without MESSAGES permission', async () => { diff --git a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.ts b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.ts index 88168690689..3dc6cc31511 100644 --- a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.ts +++ b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.ts @@ -1,9 +1,9 @@ +import { MessageResult } from '../../entities/MessageResult'; import { - isAuthorized, ROLE_PERMISSIONS, + isAuthorized, } from '../../../authorization/authorizationClientService'; import { UnauthorizedError } from '../../../errors/errors'; -import { MessageResult } from '../../entities/MessageResult'; /** * getOutboxMessagesForSectionInteractor diff --git a/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts b/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts index 811aeb7a684..08617375f31 100644 --- a/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts +++ b/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts @@ -1,12 +1,12 @@ -import { omit } from 'lodash'; -import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { CASE_STATUS_TYPES, PETITIONS_SECTION, ROLES, } from '../../entities/EntityConstants'; +import { UnauthorizedError } from '../../../../../shared/src/errors/errors'; import { applicationContext } from '../../test/createTestApplicationContext'; import { getOutboxMessagesForUserInteractor } from './getOutboxMessagesForUserInteractor'; +import { omit } from 'lodash'; describe('getOutboxMessagesForUserInteractor', () => { it('throws unauthorized for a user without MESSAGES permission', async () => { From b2570e67ef8e8659a59fb3e69d4419336ceade7d Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Tue, 6 Dec 2022 15:16:45 -0700 Subject: [PATCH 24/33] 9864: adding validation rules --- shared/src/business/entities/MessageResult.js | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/shared/src/business/entities/MessageResult.js b/shared/src/business/entities/MessageResult.js index 770c280df5d..c8acdc45386 100644 --- a/shared/src/business/entities/MessageResult.js +++ b/shared/src/business/entities/MessageResult.js @@ -3,6 +3,11 @@ const { joiValidationDecorator, validEntityDecorator, } = require('./JoiValidationDecorator'); +const { + TRIAL_CITY_STRINGS, + TRIAL_LOCATION_MATCHER, +} = require('./EntityConstants'); +const { JoiValidationConstants } = require('./JoiValidationConstants'); const { messageDecorator } = require('./Message'); /** @@ -24,9 +29,23 @@ MessageResult.prototype.init = function init( this.trialLocation = rawMessage.trialLocation; }; -MessageResult.VALIDATION_ERROR_MESSAGES = {}; - -MessageResult.VALIDATION_RULES = {}; +MessageResult.VALIDATION_RULES = { + trialDate: joi + .alternatives() + .optional() + .description('When this case goes to trial.'), + trialLocation: joi + .alternatives() + .try( + JoiValidationConstants.STRING.valid(...TRIAL_CITY_STRINGS, null), + JoiValidationConstants.STRING.pattern(TRIAL_LOCATION_MATCHER), + JoiValidationConstants.STRING.valid('Standalone Remote'), + ) + .optional() + .description( + 'Where this case goes to trial. This may be different that the preferred trial location.', + ), +}; joiValidationDecorator( MessageResult, From 9d9c38a36330d0a93d13e6b0cb261b0e4c74c3ef Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Wed, 7 Dec 2022 09:26:44 -0700 Subject: [PATCH 25/33] 9684: fixing lint errors --- web-client/src/views/Messages/MessagesIndividualInbox.jsx | 8 ++++---- web-client/src/views/Messages/MessagesSectionInbox.jsx | 6 +++--- web-client/src/views/Messages/MessagesSectionOutbox.jsx | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/web-client/src/views/Messages/MessagesIndividualInbox.jsx b/web-client/src/views/Messages/MessagesIndividualInbox.jsx index 783f155eca7..b6ceb99afd5 100644 --- a/web-client/src/views/Messages/MessagesIndividualInbox.jsx +++ b/web-client/src/views/Messages/MessagesIndividualInbox.jsx @@ -1,12 +1,12 @@ -import { connect } from '@cerebral/react'; -import { sequences, state } from 'cerebral'; -import classNames from 'classnames'; -import React from 'react'; import { Button } from '../../ustc-ui/Button/Button'; import { ConsolidatedCaseIcon } from '../../ustc-ui/Icon/ConsolidatedCaseIcon'; import { Icon } from '../../ustc-ui/Icon/Icon'; import { SortableColumnHeaderButton } from '../../ustc-ui/SortableColumnHeaderButton/SortableColumnHeaderButton'; import { TableFilters } from '../../ustc-ui/TableFilters/TableFilters'; +import { connect } from '@cerebral/react'; +import { sequences, state } from 'cerebral'; +import React from 'react'; +import classNames from 'classnames'; export const MessagesIndividualInbox = connect( { diff --git a/web-client/src/views/Messages/MessagesSectionInbox.jsx b/web-client/src/views/Messages/MessagesSectionInbox.jsx index 1dccc7924ab..d319a03ed95 100644 --- a/web-client/src/views/Messages/MessagesSectionInbox.jsx +++ b/web-client/src/views/Messages/MessagesSectionInbox.jsx @@ -1,10 +1,10 @@ -import { connect } from '@cerebral/react'; -import { sequences, state } from 'cerebral'; -import React from 'react'; import { Button } from '../../ustc-ui/Button/Button'; import { ConsolidatedCaseIcon } from '../../ustc-ui/Icon/ConsolidatedCaseIcon'; import { SortableColumnHeaderButton } from '../../ustc-ui/SortableColumnHeaderButton/SortableColumnHeaderButton'; import { TableFilters } from '../../ustc-ui/TableFilters/TableFilters'; +import { connect } from '@cerebral/react'; +import { sequences, state } from 'cerebral'; +import React from 'react'; export const MessagesSectionInbox = connect( { diff --git a/web-client/src/views/Messages/MessagesSectionOutbox.jsx b/web-client/src/views/Messages/MessagesSectionOutbox.jsx index 1cfade76392..50d3c5806c1 100644 --- a/web-client/src/views/Messages/MessagesSectionOutbox.jsx +++ b/web-client/src/views/Messages/MessagesSectionOutbox.jsx @@ -1,10 +1,10 @@ -import { connect } from '@cerebral/react'; -import { sequences, state } from 'cerebral'; -import React from 'react'; import { Button } from '../../ustc-ui/Button/Button'; import { ConsolidatedCaseIcon } from '../../ustc-ui/Icon/ConsolidatedCaseIcon'; import { SortableColumnHeaderButton } from '../../ustc-ui/SortableColumnHeaderButton/SortableColumnHeaderButton'; import { TableFilters } from '../../ustc-ui/TableFilters/TableFilters'; +import { connect } from '@cerebral/react'; +import { sequences, state } from 'cerebral'; +import React from 'react'; export const MessagesSectionOutbox = connect( { From acdd152990eef6d831cd68bda52f4d7e53ddf59b Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Wed, 7 Dec 2022 09:39:46 -0700 Subject: [PATCH 26/33] 9684: create test for new MessageResult entity --- .../business/entities/MessageResult.test.js | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 shared/src/business/entities/MessageResult.test.js diff --git a/shared/src/business/entities/MessageResult.test.js b/shared/src/business/entities/MessageResult.test.js new file mode 100644 index 00000000000..c02810ae9bb --- /dev/null +++ b/shared/src/business/entities/MessageResult.test.js @@ -0,0 +1,36 @@ +const { applicationContext } = require('../test/createTestApplicationContext'); +const { CASE_STATUS_TYPES, PETITIONS_SECTION } = require('./EntityConstants'); +const { MessageResult } = require('./MessageResult'); + +describe('MessageResult', () => { + const mockRawMessageResult = { + caseStatus: CASE_STATUS_TYPES.generalDocket, + caseTitle: 'The Land Before Time', + createdAt: '2019-03-01T21:40:46.415Z', + docketNumber: '123-20', + docketNumberWithSuffix: '123-45S', + from: 'Test Petitionsclerk', + fromSection: PETITIONS_SECTION, + fromUserId: '4791e892-14ee-4ab1-8468-0c942ec379d2', + isCompleted: false, + isRead: false, + isRepliedTo: false, + message: 'hey there', + messageId: 'a10d6855-f3ee-4c11-861c-c7f11cba4dff', + parentMessageId: '31687a1e-3640-42cd-8e7e-a8e6df39ce9a', + subject: 'hello', + to: 'Test Petitionsclerk2', + toSection: PETITIONS_SECTION, + toUserId: '449b916e-3362-4a5d-bf56-b2b94ba29c12', + trialDate: '2029-03-01T21:40:46.415Z', + trialLocation: 'Denver, Colorado', + }; + + it('should create a valid MessageResult', () => { + const messageResult = new MessageResult(mockRawMessageResult, { + applicationContext, + }); + + expect(messageResult.isValid()).toBeTruthy(); + }); +}); From 1f552a12751901e48ea376a8cf257d076753b040 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Wed, 7 Dec 2022 10:12:00 -0700 Subject: [PATCH 27/33] 9684: adding coverage and only abbreviating state if not standalone remote --- .../business/entities/MessageResult.test.js | 11 ++++++ .../presenter/computeds/formattedMessages.js | 30 ++++++++++++---- .../computeds/formattedMessages.test.js | 35 ++++++++++++++++++- 3 files changed, 68 insertions(+), 8 deletions(-) diff --git a/shared/src/business/entities/MessageResult.test.js b/shared/src/business/entities/MessageResult.test.js index c02810ae9bb..680c23a31d6 100644 --- a/shared/src/business/entities/MessageResult.test.js +++ b/shared/src/business/entities/MessageResult.test.js @@ -33,4 +33,15 @@ describe('MessageResult', () => { expect(messageResult.isValid()).toBeTruthy(); }); + + it('should fail validation when trialLocation is not one of TRIAL_CITY_STRINGS or StandaloneRemote', () => { + const messageResult = new MessageResult( + { ...mockRawMessageResult, trialLocation: 'New Delhi, India' }, + { + applicationContext, + }, + ); + + expect(messageResult.isValid()).toBeFalsy(); + }); }); diff --git a/web-client/src/presenter/computeds/formattedMessages.js b/web-client/src/presenter/computeds/formattedMessages.js index a9891e31d48..ebb0744ce13 100644 --- a/web-client/src/presenter/computeds/formattedMessages.js +++ b/web-client/src/presenter/computeds/formattedMessages.js @@ -22,13 +22,10 @@ export const formattedMessages = (get, applicationContext) => { message.caseStatus === STATUS_TYPES.calendared; if (message.showTrialInformation) { - message.formattedTrialLocation = applicationContext - .getUtilities() - .abbreviateState(message.trialLocation); - - message.formattedTrialDate = applicationContext - .getUtilities() - .formatDateString(message.trialDate, 'MMDDYY'); + setTrialInformationForCalendaredCase({ + applicationContext, + message, + }); } }); @@ -73,3 +70,22 @@ export const formattedMessages = (get, applicationContext) => { return sharedComputedResult; }; + +const setTrialInformationForCalendaredCase = ({ + applicationContext, + message, +}) => { + const { TRIAL_SESSION_SCOPE_TYPES } = applicationContext.getConstants(); + + if (message.trialLocation !== TRIAL_SESSION_SCOPE_TYPES.standaloneRemote) { + message.formattedTrialLocation = applicationContext + .getUtilities() + .abbreviateState(message.trialLocation); + } else { + message.formattedTrialLocation = message.trialLocation; + } + + message.formattedTrialDate = applicationContext + .getUtilities() + .formatDateString(message.trialDate, 'MMDDYY'); +}; diff --git a/web-client/src/presenter/computeds/formattedMessages.test.js b/web-client/src/presenter/computeds/formattedMessages.test.js index 8527e011618..1e621a84cb1 100644 --- a/web-client/src/presenter/computeds/formattedMessages.test.js +++ b/web-client/src/presenter/computeds/formattedMessages.test.js @@ -5,7 +5,8 @@ import { runCompute } from 'cerebral/test'; import { withAppContextDecorator } from '../../withAppContext'; describe('formattedMessages', () => { - const { STATUS_TYPES } = applicationContext.getConstants(); + const { STATUS_TYPES, TRIAL_SESSION_SCOPE_TYPES } = + applicationContext.getConstants(); const formattedMessages = withAppContextDecorator(formattedMessagesComputed); it('returns filtered messages sorted oldest to newest and completedMessages from state.messages when messageBoxToDisplay.box is inbox', () => { @@ -571,4 +572,36 @@ describe('formattedMessages', () => { formattedTrialLocation: 'Houston, TX', }); }); + + it(`should not abbreviate trialLocation when it is ${TRIAL_SESSION_SCOPE_TYPES.standaloneRemote}`, () => { + const mockCalendaredMessage = { + caseStatus: STATUS_TYPES.calendared, + completedAt: '2019-01-02T16:29:13.122Z', + createdAt: '2019-01-01T16:29:13.122Z', + docketNumber: '101-20', + message: 'This is a test message', + trialDate: '2019-01-01T16:29:13.122Z', + trialLocation: TRIAL_SESSION_SCOPE_TYPES.standaloneRemote, + }; + + const result = runCompute(formattedMessages, { + state: { + messageBoxToDisplay: { + box: 'outbox', + }, + messages: [mockCalendaredMessage], + screenMetadata: {}, + user: { + role: 'adc', + }, + }, + }); + + expect( + applicationContext.getUtilities().abbreviateState, + ).not.toHaveBeenCalled(); + expect(result.messages[0]).toMatchObject({ + formattedTrialLocation: TRIAL_SESSION_SCOPE_TYPES.standaloneRemote, + }); + }); }); From fa008c8557129752e43c9ac390ba967d1f87e9d5 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Wed, 7 Dec 2022 10:27:37 -0700 Subject: [PATCH 28/33] 9684: adding integration tests --- .../messagesTableJourney.test.js | 66 +++++++++++++++---- .../presenter/computeds/formattedMessages.js | 7 +- 2 files changed, 55 insertions(+), 18 deletions(-) diff --git a/web-client/integration-tests/messagesTableJourney.test.js b/web-client/integration-tests/messagesTableJourney.test.js index fc340912400..5407b73ea54 100644 --- a/web-client/integration-tests/messagesTableJourney.test.js +++ b/web-client/integration-tests/messagesTableJourney.test.js @@ -5,6 +5,12 @@ import { loginAs, setupTest } from './helpers'; describe('messages table journey', () => { const cerebralTest = setupTest(); const calendaredCaseDocketNumber = '103-20'; + const expectedMessageResult = { + caseStatus: CASE_STATUS_TYPES.calendared, + docketNumber: calendaredCaseDocketNumber, + trialDate: '2020-11-27T05:00:00.000Z', + trialLocation: 'Houston, Texas', + }; beforeAll(() => { jest.setTimeout(40000); @@ -23,30 +29,64 @@ describe('messages table journey', () => { docketNumber: calendaredCaseDocketNumber, }); - // need to check that the properties trialLocation and trialDate are messages in: - // My Inbox - // Section Inbox - // My Outbox - // Section Outbox - it('petitions clerk views case trial information on sent messages view', async () => { + it('petitions clerk views case trial information from section sent messages view', async () => { + await cerebralTest.runSequence('gotoMessagesSequence', { + box: 'outbox', + queue: 'section', + }); + + const messages = cerebralTest.getState('messages'); + + const foundMessage = messages.find( + message => message.docketNumber === calendaredCaseDocketNumber, + ); + + expect(foundMessage).toMatchObject(expectedMessageResult); + }); + + it('petitions clerk views case trial information from individual sent messages view', async () => { await cerebralTest.runSequence('gotoMessagesSequence', { box: 'outbox', queue: 'my', }); const messages = cerebralTest.getState('messages'); - console.log('***messages', messages); const foundMessage = messages.find( message => message.docketNumber === calendaredCaseDocketNumber, ); - //add checks for trial info - expect(foundMessage).toMatchObject({ - caseStatus: CASE_STATUS_TYPES.calendared, - docketNumber: calendaredCaseDocketNumber, - trialDate: '2020-11-27T05:00:00.000Z', - trialLocation: 'Houston, Texas', + expect(foundMessage).toMatchObject(expectedMessageResult); + }); + + loginAs(cerebralTest, 'petitionsclerk1@example.com'); + it('petitions clerk 1 views case trial information from messages individual inbox view', async () => { + await cerebralTest.runSequence('gotoMessagesSequence', { + box: 'inbox', + queue: 'my', }); + + const messages = cerebralTest.getState('messages'); + + const foundMessage = messages.find( + message => message.docketNumber === calendaredCaseDocketNumber, + ); + + expect(foundMessage).toMatchObject(expectedMessageResult); + }); + + it('petitions clerk 1 views case trial information from messages section inbox view', async () => { + await cerebralTest.runSequence('gotoMessagesSequence', { + box: 'inbox', + queue: 'section', + }); + + const messages = cerebralTest.getState('messages'); + + const foundMessage = messages.find( + message => message.docketNumber === calendaredCaseDocketNumber, + ); + + expect(foundMessage).toMatchObject(expectedMessageResult); }); }); diff --git a/web-client/src/presenter/computeds/formattedMessages.js b/web-client/src/presenter/computeds/formattedMessages.js index ebb0744ce13..68e979c394c 100644 --- a/web-client/src/presenter/computeds/formattedMessages.js +++ b/web-client/src/presenter/computeds/formattedMessages.js @@ -22,7 +22,7 @@ export const formattedMessages = (get, applicationContext) => { message.caseStatus === STATUS_TYPES.calendared; if (message.showTrialInformation) { - setTrialInformationForCalendaredCase({ + setTrialInformationOnMessage({ applicationContext, message, }); @@ -71,10 +71,7 @@ export const formattedMessages = (get, applicationContext) => { return sharedComputedResult; }; -const setTrialInformationForCalendaredCase = ({ - applicationContext, - message, -}) => { +const setTrialInformationOnMessage = ({ applicationContext, message }) => { const { TRIAL_SESSION_SCOPE_TYPES } = applicationContext.getConstants(); if (message.trialLocation !== TRIAL_SESSION_SCOPE_TYPES.standaloneRemote) { From ec8cd93f6dddba693b2734906f1bd88ed331928a Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Wed, 7 Dec 2022 11:00:41 -0700 Subject: [PATCH 29/33] 9684: fix message interactor tests --- .../messages/getInboxMessagesForSectionInteractor.test.ts | 2 +- .../useCases/messages/getInboxMessagesForUserInteractor.test.ts | 2 +- .../messages/getOutboxMessagesForSectionInteractor.test.ts | 2 +- .../messages/getOutboxMessagesForUserInteractor.test.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts index 6d68b382c98..d80e6d8214d 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts @@ -45,7 +45,7 @@ describe('getInboxMessagesForSectionInteractor', () => { toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', trialDate: '2028-03-01T21:40:46.415Z', - trialLocation: 'El Paso, TX', + trialLocation: 'El Paso, Texas', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, diff --git a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts index fdc2263ac5b..9fec8a6f671 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts @@ -45,7 +45,7 @@ describe('getInboxMessagesForUserInteractor', () => { toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', trialDate: '2028-03-01T21:40:46.415Z', - trialLocation: 'El Paso, TX', + trialLocation: 'El Paso, Texas', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, diff --git a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts index bc272933bbb..0e3ade0ad1d 100644 --- a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts +++ b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts @@ -45,7 +45,7 @@ describe('getOutboxMessagesForSectionInteractor', () => { toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', trialDate: '2028-03-01T21:40:46.415Z', - trialLocation: 'El Paso, TX', + trialLocation: 'El Paso, Texas', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, diff --git a/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts b/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts index 08617375f31..10a10df62fb 100644 --- a/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts +++ b/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts @@ -45,7 +45,7 @@ describe('getOutboxMessagesForUserInteractor', () => { toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', trialDate: '2028-03-01T21:40:46.415Z', - trialLocation: 'El Paso, TX', + trialLocation: 'El Paso, Texas', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, From 62337d42f16cb7d66c4d7a3829c68558a47feba6 Mon Sep 17 00:00:00 2001 From: Timothy Shumway Date: Wed, 7 Dec 2022 11:00:41 -0700 Subject: [PATCH 30/33] 9684: fix message interactor tests --- .../messages/getInboxMessagesForSectionInteractor.test.ts | 2 +- .../useCases/messages/getInboxMessagesForUserInteractor.test.ts | 2 +- .../messages/getOutboxMessagesForSectionInteractor.test.ts | 2 +- .../messages/getOutboxMessagesForUserInteractor.test.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts index 6d68b382c98..d80e6d8214d 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForSectionInteractor.test.ts @@ -45,7 +45,7 @@ describe('getInboxMessagesForSectionInteractor', () => { toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', trialDate: '2028-03-01T21:40:46.415Z', - trialLocation: 'El Paso, TX', + trialLocation: 'El Paso, Texas', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, diff --git a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts index fdc2263ac5b..9fec8a6f671 100644 --- a/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts +++ b/shared/src/business/useCases/messages/getInboxMessagesForUserInteractor.test.ts @@ -45,7 +45,7 @@ describe('getInboxMessagesForUserInteractor', () => { toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', trialDate: '2028-03-01T21:40:46.415Z', - trialLocation: 'El Paso, TX', + trialLocation: 'El Paso, Texas', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, diff --git a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts index bc272933bbb..0e3ade0ad1d 100644 --- a/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts +++ b/shared/src/business/useCases/messages/getOutboxMessagesForSectionInteractor.test.ts @@ -45,7 +45,7 @@ describe('getOutboxMessagesForSectionInteractor', () => { toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', trialDate: '2028-03-01T21:40:46.415Z', - trialLocation: 'El Paso, TX', + trialLocation: 'El Paso, Texas', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, diff --git a/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts b/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts index 08617375f31..10a10df62fb 100644 --- a/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts +++ b/shared/src/business/useCases/messages/getOutboxMessagesForUserInteractor.test.ts @@ -45,7 +45,7 @@ describe('getOutboxMessagesForUserInteractor', () => { toSection: PETITIONS_SECTION, toUserId: 'b427ca37-0df1-48ac-94bb-47aed073d6f7', trialDate: '2028-03-01T21:40:46.415Z', - trialLocation: 'El Paso, TX', + trialLocation: 'El Paso, Texas', }; applicationContext.getCurrentUser.mockReturnValue({ role: ROLES.petitionsClerk, From c3ff4a887d4a47149a9fbb53fa51f660bf9db592 Mon Sep 17 00:00:00 2001 From: Cody Seibert Date: Thu, 8 Dec 2022 15:13:15 -0500 Subject: [PATCH 31/33] 9684 - fixing deploy issue on new environment missing cognito pool --- .circleci/config.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 866ae71e644..f5b66620a96 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -484,6 +484,7 @@ jobs: name: Admin User Setup command: | if [ "${CIRCLE_BRANCH}" != "prod" ]; then + . ./scripts/load-environment-from-secrets.sh node shared/admin-tools/user/setup-admin.js else echo "skipping…" @@ -492,6 +493,7 @@ jobs: name: Test Users Setup command: | if [ "${CIRCLE_BRANCH}" != "prod" ]; then + . ./scripts/load-environment-from-secrets.sh ./shared/admin-tools/user/setup-test-users.sh $ENV else echo "skipping…" @@ -500,6 +502,7 @@ jobs: name: Setup Judge Users File Var command: | if [ "${CIRCLE_BRANCH}" != "prod" ] && [ "${CIRCLE_BRANCH}" != "test" ] && [ "${CIRCLE_BRANCH}" != "migration" ]; then + . ./scripts/load-environment-from-secrets.sh echo "export FILE_NAME=./scripts/data-import/judge/judge_users.csv" >> $BASH_ENV else echo "skipping…" @@ -508,6 +511,7 @@ jobs: name: Judge Users Setup command: | if [ "${CIRCLE_BRANCH}" != "prod" ] && [ "${CIRCLE_BRANCH}" != "test" ] && [ "${CIRCLE_BRANCH}" != "migration" ]; then + . ./scripts/load-environment-from-secrets.sh ./scripts/data-import/judge/bulk-import-judge-users.sh else echo "skipping…" @@ -528,6 +532,7 @@ jobs: name: 'Deploy - Web API - Smoke Tests - us-east-1' command: | if [ "${CIRCLE_BRANCH}" == "develop" ] || [ "${CIRCLE_BRANCH}" == "experimental1" ] || [ "${CIRCLE_BRANCH}" == "experimental2" ] || [ "${CIRCLE_BRANCH}" == "experimental3" ] || [ "${CIRCLE_BRANCH}" == "experimental4" ] || [ "${CIRCLE_BRANCH}" == "experimental5" ] || [ "${CIRCLE_BRANCH}" == "staging" ] || [ "${CIRCLE_BRANCH}" == "irs" ]; then + . ./scripts/load-environment-from-secrets.sh cd web-api && node smoke-tests.js $ENV us-east-1 ${DEPLOYING_COLOR} ${DEFAULT_ACCOUNT_PASS} else echo "skipping…" @@ -536,6 +541,7 @@ jobs: name: 'Deploy - Web API - Smoke Tests - us-west-1' command: | if [ "${CIRCLE_BRANCH}" == "develop" ] || [ "${CIRCLE_BRANCH}" == "experimental1" ] || [ "${CIRCLE_BRANCH}" == "experimental2" ] || [ "${CIRCLE_BRANCH}" == "experimental3" ] || [ "${CIRCLE_BRANCH}" == "experimental4" ] || [ "${CIRCLE_BRANCH}" == "experimental5" ] || [ "${CIRCLE_BRANCH}" == "staging" ] || [ "${CIRCLE_BRANCH}" == "irs" ]; then + . ./scripts/load-environment-from-secrets.sh cd web-api && node smoke-tests.js $ENV us-west-1 ${DEPLOYING_COLOR} ${DEFAULT_ACCOUNT_PASS} else echo "skipping…" From 83b792a452394b3ca0c1ff3d7946fdd4dfc14dbb Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Fri, 9 Dec 2022 09:13:40 -0700 Subject: [PATCH 32/33] 9684: addressing PR feedback --- web-client/src/presenter/computeds/formattedMessages.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web-client/src/presenter/computeds/formattedMessages.test.js b/web-client/src/presenter/computeds/formattedMessages.test.js index 1e621a84cb1..9e935a0a995 100644 --- a/web-client/src/presenter/computeds/formattedMessages.test.js +++ b/web-client/src/presenter/computeds/formattedMessages.test.js @@ -515,7 +515,7 @@ describe('formattedMessages', () => { }, }); - expect(result.messages[0].showTrialInformation).toBeTruthy(); + expect(result.messages[0].showTrialInformation).toBe(true); }); it('should set showTrialInformation to false when caseStatus is NOT calendared', () => { @@ -540,7 +540,7 @@ describe('formattedMessages', () => { }, }); - expect(result.messages[0].showTrialInformation).toBeFalsy(); + expect(result.messages[0].showTrialInformation).toBe(false); }); it('should format the trialDate and trialLocation on the message when caseStatus is Calendared', () => { From 30433570125ffe23da39923f26636a2d96f492e2 Mon Sep 17 00:00:00 2001 From: Mrinalini Sinha Date: Fri, 9 Dec 2022 09:20:04 -0700 Subject: [PATCH 33/33] Revert "9684 - fixing deploy issue on new environment missing cognito pool" This reverts commit c3ff4a887d4a47149a9fbb53fa51f660bf9db592. --- .circleci/config.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f5b66620a96..866ae71e644 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -484,7 +484,6 @@ jobs: name: Admin User Setup command: | if [ "${CIRCLE_BRANCH}" != "prod" ]; then - . ./scripts/load-environment-from-secrets.sh node shared/admin-tools/user/setup-admin.js else echo "skipping…" @@ -493,7 +492,6 @@ jobs: name: Test Users Setup command: | if [ "${CIRCLE_BRANCH}" != "prod" ]; then - . ./scripts/load-environment-from-secrets.sh ./shared/admin-tools/user/setup-test-users.sh $ENV else echo "skipping…" @@ -502,7 +500,6 @@ jobs: name: Setup Judge Users File Var command: | if [ "${CIRCLE_BRANCH}" != "prod" ] && [ "${CIRCLE_BRANCH}" != "test" ] && [ "${CIRCLE_BRANCH}" != "migration" ]; then - . ./scripts/load-environment-from-secrets.sh echo "export FILE_NAME=./scripts/data-import/judge/judge_users.csv" >> $BASH_ENV else echo "skipping…" @@ -511,7 +508,6 @@ jobs: name: Judge Users Setup command: | if [ "${CIRCLE_BRANCH}" != "prod" ] && [ "${CIRCLE_BRANCH}" != "test" ] && [ "${CIRCLE_BRANCH}" != "migration" ]; then - . ./scripts/load-environment-from-secrets.sh ./scripts/data-import/judge/bulk-import-judge-users.sh else echo "skipping…" @@ -532,7 +528,6 @@ jobs: name: 'Deploy - Web API - Smoke Tests - us-east-1' command: | if [ "${CIRCLE_BRANCH}" == "develop" ] || [ "${CIRCLE_BRANCH}" == "experimental1" ] || [ "${CIRCLE_BRANCH}" == "experimental2" ] || [ "${CIRCLE_BRANCH}" == "experimental3" ] || [ "${CIRCLE_BRANCH}" == "experimental4" ] || [ "${CIRCLE_BRANCH}" == "experimental5" ] || [ "${CIRCLE_BRANCH}" == "staging" ] || [ "${CIRCLE_BRANCH}" == "irs" ]; then - . ./scripts/load-environment-from-secrets.sh cd web-api && node smoke-tests.js $ENV us-east-1 ${DEPLOYING_COLOR} ${DEFAULT_ACCOUNT_PASS} else echo "skipping…" @@ -541,7 +536,6 @@ jobs: name: 'Deploy - Web API - Smoke Tests - us-west-1' command: | if [ "${CIRCLE_BRANCH}" == "develop" ] || [ "${CIRCLE_BRANCH}" == "experimental1" ] || [ "${CIRCLE_BRANCH}" == "experimental2" ] || [ "${CIRCLE_BRANCH}" == "experimental3" ] || [ "${CIRCLE_BRANCH}" == "experimental4" ] || [ "${CIRCLE_BRANCH}" == "experimental5" ] || [ "${CIRCLE_BRANCH}" == "staging" ] || [ "${CIRCLE_BRANCH}" == "irs" ]; then - . ./scripts/load-environment-from-secrets.sh cd web-api && node smoke-tests.js $ENV us-west-1 ${DEPLOYING_COLOR} ${DEFAULT_ACCOUNT_PASS} else echo "skipping…"