Skip to content

Commit

Permalink
Use correct date format function for activity dates (#7330)
Browse files Browse the repository at this point in the history
* Use correct date format for activity dates

* Fix for tasks with due dates

* Add test for task without due date

* Fixup! update activity transformers

* Move investment and referral tests out of the OMIS block

* Remove flaky test from overview-spec
  • Loading branch information
cgsunkel authored Nov 20, 2024
1 parent e33bab1 commit 853746b
Show file tree
Hide file tree
Showing 6 changed files with 145 additions and 136 deletions.
4 changes: 3 additions & 1 deletion src/client/components/Dashboard/my-tasks/MyTasksTable.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ const rows = ({ results }) => {
<Table.Cell setWidth="12%">
{task.due_date
? formatMediumDateParsed(task.due_date)
: formatMediumDateParsed(task.dueDate)}
: task.dueDate
? formatMediumDateParsed(task.dueDate)
: ''}
</Table.Cell>
<Table.Cell setWidth="23%">
<Link
Expand Down
103 changes: 54 additions & 49 deletions src/client/modules/Companies/CompanyActivity/transformers.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import Link from '@govuk-react/link'

import { TAGS } from './constants'
import urls from '../../../../lib/urls'
import { formatMediumDate } from '../../../utils/date'
import { formatMediumDate, formatMediumDateParsed } from '../../../utils/date'
import { AdviserResource } from '../../../components/Resource'
import { INTERACTION_NAMES } from '../../../../apps/interactions/constants'

Expand Down Expand Up @@ -68,7 +68,7 @@ export const transformActivities = (activities) => {

switch (activity_source) {
case 'interaction':
return transformInteractionToListItem(activity.interaction)
return transformInteractionToListItem(activity)
case 'referral':
return transformReferralToListItem(activity)
case 'investment':
Expand All @@ -87,58 +87,63 @@ export const transformActivities = (activities) => {
)
}

export const transformInteractionToListItem = ({
date,
subject,
dit_participants,
service,
id,
contacts,
kind,
communication_channel,
}) => ({
id,
metadata: [
{ label: 'Date', value: formatMediumDate(date) },
{
label: verifyLabel(contacts, 'Contact'),
value: formattedContacts(contacts),
},
{ label: 'Communication channel', value: communication_channel?.name },
{
label: verifyLabel(dit_participants, 'Adviser'),
value: formattedAdvisers(dit_participants),
},
{ label: 'Service', value: service?.name },
].filter(({ value }) => Boolean(value)),
tags: [
{
text: INTERACTION_NAMES[kind],
colour: 'grey',
dataTest: 'activity-kind-label',
},
{
text:
service && service.name.includes(' : ')
? service.name.split(' : ')[0]
: service?.name,
colour: 'blue',
dataTest: 'activity-service-label',
},
].filter(({ text }) => Boolean(text)),
headingUrl: urls.interactions.detail(id),
headingText: subject,
})
export const transformInteractionToListItem = (activity) => {
const interaction = activity.interaction
return {
id: interaction.id,
metadata: [
{
label: 'Date',
value: formatMediumDateParsed(interaction.date),
},
{
label: verifyLabel(interaction.contacts, 'Contact'),
value: formattedContacts(interaction.contacts),
},
{
label: 'Communication channel',
value: interaction.communication_channel?.name,
},
{
label: verifyLabel(interaction.dit_participants, 'Adviser'),
value: formattedAdvisers(interaction.dit_participants),
},
{ label: 'Service', value: interaction.service?.name },
].filter(({ value }) => Boolean(value)),
tags: [
{
text: INTERACTION_NAMES[interaction.kind],
colour: 'grey',
dataTest: 'activity-kind-label',
},
{
text:
interaction.service && interaction.service.name.includes(' : ')
? interaction.service.name.split(' : ')[0]
: interaction.service?.name,
colour: 'blue',
dataTest: 'activity-service-label',
},
].filter(({ text }) => Boolean(text)),
headingUrl: urls.interactions.detail(interaction.id),
headingText: interaction.subject,
}
}

export const transformReferralToListItem = (activity) => {
const referral = activity.referral
return {
id: referral.id,
metadata: [
{ label: 'Created Date', value: formatMediumDate(referral.created_on) },
{
label: 'Created Date',
value: formatMediumDateParsed(referral.created_on),
},
{
label: 'Completed Date',
value: formatMediumDate(referral.completed_on),
value: referral.completed_on
? formatMediumDate(referral.completed_on)
: '',
},
{
label: 'Sending adviser',
Expand Down Expand Up @@ -174,7 +179,7 @@ export const transformInvestmentToListItem = (activity) => {
return {
id: activity.investment.id,
metadata: [
{ label: 'Created Date', value: formatMediumDate(activity.date) },
{ label: 'Created Date', value: formatMediumDateParsed(activity.date) },
{
label: 'Investment Type',
value: activity.investment.investment_type.name,
Expand Down Expand Up @@ -231,7 +236,7 @@ export const transformOrderToListItem = (activity) => {
return {
id: activity.order.id,
metadata: [
{ label: 'Date', value: formatMediumDate(activity.date) },
{ label: 'Date', value: formatMediumDateParsed(activity.date) },
{
label: 'Country',
value: activity.order.primary_market.name,
Expand Down Expand Up @@ -284,7 +289,7 @@ export const transformGreatExportEnquiryToListItem = (activity) => {
return {
id: great.id,
metadata: [
{ label: 'Date', value: formatMediumDate(great.created_on) },
{ label: 'Date', value: formatMediumDateParsed(great.created_on) },
{
label: 'Contact',
value: formattedContacts([great.contact]),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { TAGS } from '../../../CompanyActivity/constants'
import { formatMediumDate, isDateInFuture } from '../../../../../utils/date'
import {
formatMediumDateParsed,
isDateInFuture,
} from '../../../../../utils/date'
import { INTERACTION_NAMES } from '../../../../../../apps/interactions/constants'
import urls from '../../../../../../lib/urls'

Expand Down Expand Up @@ -50,7 +53,7 @@ export const transformActivity = (activities) => {

switch (activity_source) {
case 'interaction':
return transformInteractionToListItem(activity.interaction)
return transformInteractionToListItem(activity)
case 'referral':
return transformReferralToListItem(activity)
case 'investment':
Expand All @@ -76,7 +79,8 @@ export const transformReferralToListItem = (activity) => {
receiving adviser ${referral.recipient.name}
`

const date = !referral.completedOn && formatMediumDate(referral.created_on)
const date =
!referral.completedOn && formatMediumDateParsed(referral.created_on)

return {
id: referral.id,
Expand All @@ -97,31 +101,23 @@ export const transformReferralToListItem = (activity) => {
}
}

export const transformInteractionToListItem = ({
date,
subject,
id,
kind,
communication_channel,
dit_participants,
contacts,
}) => ({
id,
date: formatMediumDate(date),
export const transformInteractionToListItem = (activity) => ({
id: activity.id,
date: formatMediumDateParsed(activity.date),
tags: [
{
text: INTERACTION_NAMES[kind],
text: INTERACTION_NAMES[activity.interaction.kind],
colour: 'grey',
dataTest: 'activity-kind-label',
},
],
headingUrl: urls.interactions.detail(id),
headingText: subject,
headingUrl: urls.interactions.detail(activity.id),
headingText: activity.interaction.subject,
summary: buildSummary(
dit_participants,
communication_channel?.name,
contacts,
date
activity.interaction.dit_participants,
activity.interaction.communication_channel?.name,
activity.interaction.contacts,
activity.date
),
})

Expand All @@ -130,7 +126,7 @@ export const transformInvestmentToListItem = (activity) => {

return {
id: investment.id,
date: formatMediumDate(activity.date),
date: formatMediumDateParsed(activity.date),
tags: [
{
text: 'New Investment Project',
Expand Down Expand Up @@ -163,7 +159,7 @@ export const transformOrderToListItem = (activity) => {
: summary.push('')
return {
id: order.id,
date: formatMediumDate(activity.date),
date: formatMediumDateParsed(activity.date),
tags: [
{
text: 'New Order',
Expand All @@ -181,7 +177,7 @@ export const transformGreatExportEnquiryToListItem = (activity) => {
const great = activity.great_export_enquiry
return {
id: great.id,
date: formatMediumDate(activity.date),
date: formatMediumDateParsed(activity.date),

tags: [
{
Expand Down
25 changes: 18 additions & 7 deletions test/component/cypress/specs/Dashboard/MyTasks/MyTasksTable.cy.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,28 @@ import { keysToSnakeCase } from '../../../../../functional/cypress/fakers/utils'
import { STATUS } from '../../../../../../src/client/modules/Tasks/TaskForm/constants'

describe('My Tasks on the Dashboard', () => {
// Create 3 tasks of which one is Archived
const myTasksList = taskWithInvestmentProjectListFaker()
// Create 4 tasks of which one is Archived and one has no due date
const myTasksList = taskWithInvestmentProjectListFaker((length = 4))
myTasksList[1].status = STATUS.COMPLETED
myTasksList[3].dueDate = null

const myTaskResults = myTasksList.map((task) => keysToSnakeCase(task))
const myTasks = {
count: 3,
count: 4,
results: myTaskResults,
}

context('When the logged in adviser has three tasks', () => {
context('When the logged in adviser has four tasks', () => {
beforeEach(() => {
cy.viewport(1024, 768)
cy.mountWithProvider(<MyTasksContent myTasks={myTasks} />)
})

it('should display the heading 3 tasks', () => {
cy.get('h2').should('contain', '3 tasks')
it('should display the heading 4 tasks', () => {
cy.get('h2').should('contain', '4 tasks')
})

it('should render three table rows in due date in default ascending order', () => {
it('should render four table rows in due date in default ascending order', () => {
assertGovReactTable({
element: '[data-test="my-tasks-table"]',
rows: [
Expand Down Expand Up @@ -68,6 +69,16 @@ describe('My Tasks on the Dashboard', () => {
myTaskResults[2].advisers[2].name,
'Active',
],
[
'',
myTaskResults[3].title,
myTaskResults[3].company.name,
myTaskResults[3].investment_project.name,
myTaskResults[3].advisers[0].name +
myTaskResults[3].advisers[1].name +
myTaskResults[3].advisers[2].name,
'Active',
],
],
})
})
Expand Down
Loading

0 comments on commit 853746b

Please sign in to comment.