From 7328aad309c416af4ed763c6a19c11dc269b6d84 Mon Sep 17 00:00:00 2001 From: Christopher Sunkel Date: Mon, 16 Dec 2024 13:49:23 +0000 Subject: [PATCH] Add tests for OMIS order activity (#7397) * Tweak the order transformers * Add tests for order activities * Remove legacy OMIS activity code and other dead AS code --- .../ActivityFeed/activities/Omis.jsx | 92 ------------------ .../activities/card/CardDetails.jsx | 95 ------------------- .../activities/card/CardDetailsList.jsx | 36 ------- .../activities/card/CardTable.jsx | 86 ----------------- .../activities/card/CardUtils.jsx | 44 --------- .../ActivityFeed/activities/card/index.js | 3 - .../item-renderers/AdviserItemRenderer.jsx | 28 ------ .../item-renderers/BooleanItemRenderer.jsx | 13 --- .../item-renderers/ContactItemRenderer.jsx | 24 ----- .../item-renderers/DefaultItemRenderer.jsx | 14 --- .../activities/card/item-renderers/index.js | 4 - .../ActivityFeed/activities/index.js | 2 - .../Companies/CompanyActivity/constants.js | 6 ++ .../Companies/CompanyActivity/transformers.js | 35 ++++--- .../TableCards/ActivityCards/ActivityCard.jsx | 2 +- .../TableCards/ActivityCards/transformers.js | 34 ++++--- .../CompanyActivity/OrderActivity.cy.jsx | 94 ++++++++++++++++++ .../ActivityCard/OrderActivityCard.cy.jsx | 94 ++++++++++++++++++ .../cypress/support/activity-assertions.js | 4 + .../cypress/support/activity-constants.js | 1 + 20 files changed, 236 insertions(+), 475 deletions(-) delete mode 100644 src/client/components/ActivityFeed/activities/Omis.jsx delete mode 100644 src/client/components/ActivityFeed/activities/card/CardDetails.jsx delete mode 100644 src/client/components/ActivityFeed/activities/card/CardDetailsList.jsx delete mode 100644 src/client/components/ActivityFeed/activities/card/CardTable.jsx delete mode 100644 src/client/components/ActivityFeed/activities/card/item-renderers/AdviserItemRenderer.jsx delete mode 100644 src/client/components/ActivityFeed/activities/card/item-renderers/BooleanItemRenderer.jsx delete mode 100644 src/client/components/ActivityFeed/activities/card/item-renderers/ContactItemRenderer.jsx delete mode 100644 src/client/components/ActivityFeed/activities/card/item-renderers/DefaultItemRenderer.jsx delete mode 100644 src/client/components/ActivityFeed/activities/card/item-renderers/index.js create mode 100644 test/component/cypress/specs/Companies/CompanyActivity/OrderActivity.cy.jsx create mode 100644 test/component/cypress/specs/Companies/CompanyOverview/ActivityCard/OrderActivityCard.cy.jsx diff --git a/src/client/components/ActivityFeed/activities/Omis.jsx b/src/client/components/ActivityFeed/activities/Omis.jsx deleted file mode 100644 index 774bf6aca03..00000000000 --- a/src/client/components/ActivityFeed/activities/Omis.jsx +++ /dev/null @@ -1,92 +0,0 @@ -import React from 'react' -import { get } from 'lodash' -import PropTypes from 'prop-types' -import Link from '@govuk-react/link' - -import { AdviserItemRenderer, ContactItemRenderer } from './card/item-renderers' -import { ACTIVITY_TYPE } from '../constants' - -import CardUtils from './card/CardUtils' -import ActivityCardLabels from './card/ActivityCardLabels' -import ActivityCardWrapper from './card/ActivityCardWrapper' -import ActivityCardSubject from './card/ActivityCardSubject' -import ActivityCardMetadata from './card/ActivityCardMetadata' -import ActivityOverviewSummary from './card/item-renderers/ActivityOverviewSummary' -import OverviewActivityCardWrapper from './card/OverviewActivityCardWrapper' - -const { format } = require('../../../utils/date') - -export default class Omis extends React.PureComponent { - static propTypes = { - activity: PropTypes.object.isRequired, - showDetails: PropTypes.bool.isRequired, - } - - static canRender(activity) { - return CardUtils.canRenderByTypes(activity, ACTIVITY_TYPE.Omis) - } - - render() { - const { activity, isOverview } = this.props - - const published = get(activity, 'published') - const reference = get(activity, 'object.name') - const country = get(activity, 'object.dit:country.name') - const ukRegion = get(activity, 'object.dit:ukRegion.name') - const url = get(activity, 'object.url') - const adviser = CardUtils.getAdviser(activity) - const contacts = CardUtils.getContacts(activity) - const date = format(published) - - const metadata = [ - { label: 'Date', value: date }, - { label: 'Country', value: country }, - { label: 'UK region', value: ukRegion }, - { - label: 'Added by', - value: adviser - ? [adviser].map((adviser, index) => ( - - {AdviserItemRenderer(adviser, index)} - - )) - : null, - }, - { - label: 'Company contact', - value: contacts.map((contact, index) => ( - {ContactItemRenderer(contact, index)} - )), - }, - ] - - const href = `${url}/work-order` - const kind = 'New Order' - const subject = {reference} - - let summary = [] - if (country) summary.push('Export to ', country) - if (adviser) summary.push(' added by ', adviser.name) - - return isOverview ? ( - - - - ) : ( - - - {subject} - - - - - ) - } -} diff --git a/src/client/components/ActivityFeed/activities/card/CardDetails.jsx b/src/client/components/ActivityFeed/activities/card/CardDetails.jsx deleted file mode 100644 index 98dab342b07..00000000000 --- a/src/client/components/ActivityFeed/activities/card/CardDetails.jsx +++ /dev/null @@ -1,95 +0,0 @@ -import React from 'react' -import Details from '@govuk-react/details' -import Link from '@govuk-react/link' -import styled from 'styled-components' -import { SPACING, MEDIA_QUERIES, FONT_SIZE } from '@govuk-react/constants' -import { VisuallyHidden } from 'govuk-react' -import PropTypes from 'prop-types' - -import Analytics from '../../../Analytics' - -const GovUkDetails = styled(Details)` - font-size: ${FONT_SIZE.SIZE_16}; - margin: ${SPACING.SCALE_2} 0 0; - - & > div { - padding: ${SPACING.SCALE_1}; - padding-bottom: ${SPACING.SCALE_3}; - margin: ${SPACING.SCALE_1} 0 ${SPACING.SCALE_1} 4px; - - & > a { - padding: ${SPACING.SCALE_4} 0 ${SPACING.SCALE_2} ${SPACING.SCALE_2}; - } - } - - ${MEDIA_QUERIES.TABLET} { - margin-top: -${SPACING.SCALE_3}; - } -` - -export default class CardDetails extends React.PureComponent { - static propTypes = { - summary: PropTypes.string.isRequired, - summaryVisuallyHidden: PropTypes.string, - showDetails: PropTypes.bool.isRequired, - link: PropTypes.shape({ - url: PropTypes.string, - text: PropTypes.string, - }), - children: PropTypes.node.isRequired, - analyticsAccordionType: PropTypes.string, - } - - static defaultProps = { - link: null, - } - - renderLink = (link) => { - if (!link) { - return null - } - - return {link.text} - } - - render() { - const { - summary, - showDetails, - link, - children, - summaryVisuallyHidden, - analyticsAccordionType, - } = this.props - - const SummaryWithHiddenContent = ( - <> - {summary} - {summaryVisuallyHidden} - - ) - - return ( - - {(pushAnalytics) => ( - { - pushAnalytics({ - event: 'viewInteractionEngagement', - extra: { - accordionEngagement: 'clicked', - accordionType: analyticsAccordionType, - }, - }) - }} - > - {children} - {this.renderLink(link)} - - )} - - ) - } -} diff --git a/src/client/components/ActivityFeed/activities/card/CardDetailsList.jsx b/src/client/components/ActivityFeed/activities/card/CardDetailsList.jsx deleted file mode 100644 index 199e2d9c356..00000000000 --- a/src/client/components/ActivityFeed/activities/card/CardDetailsList.jsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import styled from 'styled-components' -import { MEDIA_QUERIES } from '@govuk-react/constants' -import UnorderedList from '@govuk-react/unordered-list' -import ListItem from '@govuk-react/list-item' - -const StyledUnorderedList = styled(UnorderedList)` - margin-bottom: 0; -` - -const StyledListItem = styled(ListItem)` - ${MEDIA_QUERIES.TABLET} { - font-size: 16px; - } -` - -const CardDetailsList = ({ items, itemRenderer, itemPropName }) => { - return ( - - {items.map((item, index) => ( - - {itemRenderer(item, index, itemPropName)} - - ))} - - ) -} - -CardDetailsList.propTypes = { - items: PropTypes.arrayOf(PropTypes.object).isRequired, - itemRenderer: PropTypes.any.isRequired, - itemPropName: PropTypes.string, -} - -export default CardDetailsList diff --git a/src/client/components/ActivityFeed/activities/card/CardTable.jsx b/src/client/components/ActivityFeed/activities/card/CardTable.jsx deleted file mode 100644 index a26a41ab44c..00000000000 --- a/src/client/components/ActivityFeed/activities/card/CardTable.jsx +++ /dev/null @@ -1,86 +0,0 @@ -/* eslint-disable react/no-array-index-key */ -import React from 'react' -import PropTypes from 'prop-types' -import Table from '@govuk-react/table' -import styled from 'styled-components' -import { SPACING, MEDIA_QUERIES } from '@govuk-react/constants' - -import { ReadMore } from '../../../../components' - -const GovUkTable = styled(Table)` - ${MEDIA_QUERIES.TABLET} { - margin-bottom: ${({ isNotWrappedInDetails }) => - isNotWrappedInDetails ? '0' : SPACING.SCALE_2}; - } - - th { - width: ${({ isNotWrappedInDetails }) => - isNotWrappedInDetails ? '284px' : '270px'}; - } - - th, - td { - font-weight: normal; - border: 0; - padding: ${SPACING.SCALE_2}; - font-size: 16px; - vertical-align: top; - } -` - -class DetailsRow extends React.PureComponent { - static propTypes = { - header: PropTypes.string.isRequired, - children: PropTypes.node, - } - - static defaultProps = { - children: null, - } - - render() { - const { header, children } = this.props - - if (!children) { - return null - } - - return ( - - - {header} - - {children} - - ) - } -} - -export default class CardTable extends React.Component { - static propTypes = { - isNotWrappedInDetails: PropTypes.bool, - rows: PropTypes.arrayOf( - PropTypes.shape({ - header: PropTypes.string, - content: PropTypes.node, - }) - ).isRequired, - } - - static defaultProps = { - isNotWrappedInDetails: false, - } - - render() { - const { rows, isNotWrappedInDetails } = this.props - return ( - - {rows.map(({ header, content, hasReadmore }) => ( - - {hasReadmore ? : content} - - ))} - - ) - } -} diff --git a/src/client/components/ActivityFeed/activities/card/CardUtils.jsx b/src/client/components/ActivityFeed/activities/card/CardUtils.jsx index 07e8672241d..dc51834e639 100644 --- a/src/client/components/ActivityFeed/activities/card/CardUtils.jsx +++ b/src/client/components/ActivityFeed/activities/card/CardUtils.jsx @@ -57,59 +57,15 @@ const getStatusByLatest = (contactsList) => { return status } -const getCompany = (activity) => { - return get(activity, 'object.attributedTo', []) - .filter(({ type }) => type !== 'dit:Company') - .map(({ name }) => ({ name })) - .shift() -} - -const getAdvisers = (activity) => { - return mapPeople( - activity, - 'dit:Adviser', - ({ id, name, 'dit:emailAddress': emailAddress, 'dit:team': team }) => { - return pickBy({ - id, - name, - emailAddress, - team: get(team, 'name'), // Only available for Interactions - type: 'Adviser', - }) - } - ) -} - const canRenderByTypes = (activity, types) => { const activityTypes = get(activity, 'object.type') return some(types, (type) => includes(activityTypes, type)) } -const getAdviser = (activity) => { - const adviser = { - id: get(activity, 'actor.id'), - name: get(activity, 'actor.name'), - emailAddress: get(activity, 'actor.dit:emailAddress'), - } - - return adviser.name && adviser.emailAddress ? adviser : null -} - -const transform = (activity) => ({ - url: get(activity, 'object.url'), - subject: get(activity, 'object.dit:subject'), - service: get(activity, 'object.dit:service.name'), - startTime: get(activity, 'object.startTime'), -}) - export default { canRenderByTypes, - getAdvisers, getContacts, - getCompany, - getAdviser, - transform, getContactsGroupedByRegistrationStatus, getStatusByLatest, } diff --git a/src/client/components/ActivityFeed/activities/card/index.js b/src/client/components/ActivityFeed/activities/card/index.js index 7bc264c2be6..05f6fde6699 100644 --- a/src/client/components/ActivityFeed/activities/card/index.js +++ b/src/client/components/ActivityFeed/activities/card/index.js @@ -1,5 +1,2 @@ export { default as Card } from './Card' -export { default as CardDetails } from './CardDetails' export { default as CardHeader } from './CardHeader' -export { default as CardTable } from './CardTable' -export { default as CardDetailsList } from './CardDetailsList' diff --git a/src/client/components/ActivityFeed/activities/card/item-renderers/AdviserItemRenderer.jsx b/src/client/components/ActivityFeed/activities/card/item-renderers/AdviserItemRenderer.jsx deleted file mode 100644 index 8e0d1d5c462..00000000000 --- a/src/client/components/ActivityFeed/activities/card/item-renderers/AdviserItemRenderer.jsx +++ /dev/null @@ -1,28 +0,0 @@ -import Link from '@govuk-react/link' -import PropTypes from 'prop-types' -import React from 'react' - -const AdviserItemRenderer = (item) => { - const name = {item?.name} - const emailAddress = ( - {item.emailAddress} - ) - const team = item.team ? `, (${item.team})` : null - - return ( - <> - {name}, {emailAddress} - {team} - - ) -} - -AdviserItemRenderer.propTypes = { - adviser: PropTypes.shape({ - name: PropTypes.string.isRequired, - emailAddress: PropTypes.string.isRequired, - team: PropTypes.string, // Only available for Interactions - }).isRequired, -} - -export default AdviserItemRenderer diff --git a/src/client/components/ActivityFeed/activities/card/item-renderers/BooleanItemRenderer.jsx b/src/client/components/ActivityFeed/activities/card/item-renderers/BooleanItemRenderer.jsx deleted file mode 100644 index 62f7ef29b40..00000000000 --- a/src/client/components/ActivityFeed/activities/card/item-renderers/BooleanItemRenderer.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import PropTypes from 'prop-types' - -const BooleanItemRenderer = (item, index, property) => { - return item[property].toString() -} - -BooleanItemRenderer.propTypes = { - item: PropTypes.shape.isRequired, - index: PropTypes.number.isRequired, - property: PropTypes.string.isRequired, -} - -export default BooleanItemRenderer diff --git a/src/client/components/ActivityFeed/activities/card/item-renderers/ContactItemRenderer.jsx b/src/client/components/ActivityFeed/activities/card/item-renderers/ContactItemRenderer.jsx deleted file mode 100644 index 0ca914515d8..00000000000 --- a/src/client/components/ActivityFeed/activities/card/item-renderers/ContactItemRenderer.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import Link from '@govuk-react/link' -import PropTypes from 'prop-types' -import React from 'react' - -const ContactItemRenderer = (item) => { - const name = {item.name} - const jobTitle = item.jobTitle ? ({item.jobTitle}) : null - - return ( - <> - {name} {jobTitle} - - ) -} - -ContactItemRenderer.propTypes = { - contact: PropTypes.shape({ - name: PropTypes.string.isRequired, - url: PropTypes.string, // Can't set this as 'isRequired' - jobTitle: PropTypes.string, - }).isRequired, -} - -export default ContactItemRenderer diff --git a/src/client/components/ActivityFeed/activities/card/item-renderers/DefaultItemRenderer.jsx b/src/client/components/ActivityFeed/activities/card/item-renderers/DefaultItemRenderer.jsx deleted file mode 100644 index 19fe63c14a5..00000000000 --- a/src/client/components/ActivityFeed/activities/card/item-renderers/DefaultItemRenderer.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import PropTypes from 'prop-types' - -// String and number -const DefaultItemRenderer = (item, index, property) => { - return item[property] -} - -DefaultItemRenderer.propTypes = { - item: PropTypes.shape.isRequired, - index: PropTypes.number.isRequired, - property: PropTypes.string.isRequired, -} - -export default DefaultItemRenderer diff --git a/src/client/components/ActivityFeed/activities/card/item-renderers/index.js b/src/client/components/ActivityFeed/activities/card/item-renderers/index.js deleted file mode 100644 index 0f11c2bdaff..00000000000 --- a/src/client/components/ActivityFeed/activities/card/item-renderers/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export { default as AdviserItemRenderer } from './AdviserItemRenderer' -export { default as ContactItemRenderer } from './ContactItemRenderer' -export { default as DefaultItemRenderer } from './DefaultItemRenderer' -export { default as BooleanItemRenderer } from './BooleanItemRenderer' diff --git a/src/client/components/ActivityFeed/activities/index.js b/src/client/components/ActivityFeed/activities/index.js index 4aa18b48c6c..39832c71fa9 100644 --- a/src/client/components/ActivityFeed/activities/index.js +++ b/src/client/components/ActivityFeed/activities/index.js @@ -3,7 +3,6 @@ import CompaniesHouseCompany from './CompaniesHouseCompany' import DirectoryFormsApi from './DirectoryFormsApi' import MaxemailCampaign from './MaxemailCampaign' import HmrcExporter from './HmrcExporter' -import Omis from './Omis' import AventriAttendee from './AventriAttendee' import DataHubEvent from './DataHubEvent' import AventriEvent from './AventriEvent' @@ -18,6 +17,5 @@ export default [ DirectoryFormsApi, MaxemailCampaign, HmrcExporter, - Omis, AventriEventSyncWarning, ] diff --git a/src/client/modules/Companies/CompanyActivity/constants.js b/src/client/modules/Companies/CompanyActivity/constants.js index 92dd731469e..fe32be83e68 100644 --- a/src/client/modules/Companies/CompanyActivity/constants.js +++ b/src/client/modules/Companies/CompanyActivity/constants.js @@ -65,3 +65,9 @@ export const NEW_PROJECT_TAG = { colour: 'grey', dataTest: 'investment-kind-label', } + +export const NEW_ORDER_TAG = { + text: 'New Order', + colour: 'grey', + dataTest: 'order-kind-label', +} diff --git a/src/client/modules/Companies/CompanyActivity/transformers.js b/src/client/modules/Companies/CompanyActivity/transformers.js index 3247f1c6660..4ebe2b8afd4 100644 --- a/src/client/modules/Companies/CompanyActivity/transformers.js +++ b/src/client/modules/Companies/CompanyActivity/transformers.js @@ -1,7 +1,7 @@ import React from 'react' import Link from '@govuk-react/link' -import { TAGS, NEW_PROJECT_TAG } from './constants' +import { TAGS, NEW_PROJECT_TAG, NEW_ORDER_TAG } from './constants' import urls from '../../../../lib/urls' import { formatDate, DATE_FORMAT_MEDIUM } from '../../../utils/date-utils' import { truncateData } from '../utils' @@ -55,6 +55,9 @@ export const formattedAdvisers = (advisers) => export const pluraliseLabel = (number, label) => number != 1 ? label + 's' : label +const formatContactName = (contact) => + contact.job_title ? contact.name + ', ' + contact.job_title : contact.name + /* From the activity_source field from the API, determine which transformer to use to get the required data for the cards. @@ -242,31 +245,31 @@ export const transformInvestmentToListItem = (activity) => { } export const transformOrderToListItem = (activity) => { + const order = activity.order return { - id: activity.order.id, + id: order.id, metadata: [ { label: 'Date', value: formatDate(activity.date, DATE_FORMAT_MEDIUM) }, { label: 'Country', - value: activity.order.primary_market.name, + value: order.primary_market.name, }, - activity.order.uk_region && { + order.uk_region && { label: 'UK region', - value: activity.order.uk_region.name, + value: order.uk_region.name, }, { label: 'Added by', value: - activity.order.created_by && + order.created_by && AdviserRenderer({ - adviser: activity.order.created_by, - team: activity.order.created_by.dit_team, + adviser: order.created_by, + team: order.created_by.dit_team, }), }, { - label: 'Company Contact', - value: - activity.order.contact.name + ' ' + activity.order.contact.job_title, + label: 'Company contact', + value: formatContactName(order.contact), }, ].filter((entry) => entry && Boolean(entry.value)), tags: [ @@ -280,14 +283,10 @@ export const transformOrderToListItem = (activity) => { colour: 'blue', dataTest: 'order-service-label', }, - { - text: 'New Order', - colour: 'grey', - dataTest: 'order-kind-label', - }, + NEW_ORDER_TAG, ].filter(({ text }) => Boolean(text)), - headingUrl: urls.omis.order(activity.order.id), - headingText: activity.order.reference, + headingUrl: urls.omis.order(order.id), + headingText: order.reference, } } diff --git a/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCards/ActivityCard.jsx b/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCards/ActivityCard.jsx index 64731a77274..9e0c4a66fab 100644 --- a/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCards/ActivityCard.jsx +++ b/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCards/ActivityCard.jsx @@ -71,7 +71,7 @@ export const ItemTemplate = (item) => ( ) -const capitaliseFirstLetter = (string) => +export const capitaliseFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) const ActivityCard = ({ diff --git a/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCards/transformers.js b/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCards/transformers.js index 532c8b6a2c5..208b05d88c5 100644 --- a/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCards/transformers.js +++ b/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCards/transformers.js @@ -1,10 +1,15 @@ -import { TAGS, NEW_PROJECT_TAG } from '../../../CompanyActivity/constants' +import { + TAGS, + NEW_PROJECT_TAG, + NEW_ORDER_TAG, +} from '../../../CompanyActivity/constants' import { isDateInFuture } from '../../../../../utils/date' import { formatDate, DATE_FORMAT_MEDIUM } from '../../../../../utils/date-utils' import { truncateData } from '../../../../../utils/truncate' import { INTERACTION_NAMES } from '../../../../../../apps/interactions/constants' import urls from '../../../../../../lib/urls' import { pluraliseLabel } from '../../../CompanyActivity/transformers' +import { capitaliseFirstLetter } from './ActivityCard' const { isEmpty } = require('lodash') @@ -45,6 +50,17 @@ const buildSummary = (advisers, communicationChannel, contacts, date) => { const checkNewJobs = (jobs) => (jobs > 0 ? jobs : 'no') +const buildOrderSummary = (order) => { + const summaryFirstPart = order.primary_market + ? `Export to ${order.primary_market?.name} ` + : '' + const summary = order.created_by + ? `${summaryFirstPart}added by ${order.created_by.name}` + : summaryFirstPart + + return capitaliseFirstLetter(summary) +} + /* From the activity_source field from the API, determine which transformer to use to get the required data for the cards. @@ -144,25 +160,13 @@ export const transformInvestmentToListItem = (activity) => { export const transformOrderToListItem = (activity) => { const order = activity.order - let summary = [] - order.primary_market - ? summary.push( - `Export to ${order.primary_market.name} added by ${order.created_by.name}` - ) - : summary.push('') return { id: order.id, date: formatDate(activity.date, DATE_FORMAT_MEDIUM), - tags: [ - { - text: 'New Order', - colour: 'grey', - dataTest: 'order-kind-label', - }, - ].filter(({ text }) => Boolean(text)), + tags: [NEW_ORDER_TAG].filter(({ text }) => Boolean(text)), headingUrl: urls.omis.order(order.id), headingText: order.reference, - summary: summary, + summary: buildOrderSummary(order), } } diff --git a/test/component/cypress/specs/Companies/CompanyActivity/OrderActivity.cy.jsx b/test/component/cypress/specs/Companies/CompanyActivity/OrderActivity.cy.jsx new file mode 100644 index 00000000000..46c449ffe90 --- /dev/null +++ b/test/component/cypress/specs/Companies/CompanyActivity/OrderActivity.cy.jsx @@ -0,0 +1,94 @@ +import React from 'react' + +import urls from '../../../../../../src/lib/urls' + +import { ItemTemplate } from '../../../../../../src/client/modules/Companies/CompanyActivity' +import { transformOrderToListItem } from '../../../../../../src/client/modules/Companies/CompanyActivity/transformers' +import { CollectionList } from '../../../../../../src/client/components' +import { + assertActivitySubject, + assertMetadataItems, + assertOrderKindLabel, + assertText, +} from '../../../support/activity-assertions' +import { + CONTACT_1, + CONTACT_2, + CREATED_BY, + CREATED_ON, +} from '../../../support/activity-constants' + +const REFERENCE = 'FYH243/24' +const ORDER_URL = urls.omis.order('2') + +const buildAndMountActivity = (contact = CONTACT_1, ukRegion = true) => { + const activity = { + date: CREATED_ON, + order: { + id: '2', + primary_market: { + name: 'Test Country', + }, + uk_region: ukRegion + ? { + name: 'Test UK Region', + } + : null, + created_by: CREATED_BY, + contact: contact, + reference: REFERENCE, + }, + } + + cy.mountWithProvider( + + ) +} + +describe('Order activity card', () => { + context('When the card is rendered with a complete order', () => { + beforeEach(() => { + buildAndMountActivity() + cy.get('[data-test=collection-item]').should('exist') + }) + + it('should render the labels and metadata', () => { + assertOrderLabels() + assertActivitySubject(REFERENCE, ORDER_URL) + assertMetadataItems([ + 'Date 25 Nov 2058', + 'Country Test Country', + 'UK region Test UK Region', + 'Added by Bernard Harris-Patel bernardharrispatel@test.com, Test Team 1 ', + 'Company contact Alexander Hamilton, Test Job', + ]) + }) + }) + + context('When the order has missing fields', () => { + beforeEach(() => { + buildAndMountActivity(CONTACT_2, false) + cy.get('[data-test=collection-item]').should('exist') + }) + + it('should render the labels and metadata', () => { + assertOrderLabels() + assertActivitySubject(REFERENCE, ORDER_URL) + assertMetadataItems([ + 'Date 25 Nov 2058', + 'Country Test Country', + 'Added by Bernard Harris-Patel bernardharrispatel@test.com, Test Team 1 ', + 'Company contact Oliver Twist', + ]) + }) + }) +}) + +const assertOrderLabels = () => { + assertText('[data-test="order-theme-label"]', 'Orders (OMIS)') + assertText('[data-test="order-service-label"]', 'Event') + assertOrderKindLabel() +} diff --git a/test/component/cypress/specs/Companies/CompanyOverview/ActivityCard/OrderActivityCard.cy.jsx b/test/component/cypress/specs/Companies/CompanyOverview/ActivityCard/OrderActivityCard.cy.jsx new file mode 100644 index 00000000000..ccd42972012 --- /dev/null +++ b/test/component/cypress/specs/Companies/CompanyOverview/ActivityCard/OrderActivityCard.cy.jsx @@ -0,0 +1,94 @@ +import React from 'react' + +import urls from '../../../../../../../src/lib/urls' + +import { transformOrderToListItem } from '../../../../../../../src/client/modules/Companies/CompanyOverview/TableCards/ActivityCards/transformers' +import { ItemTemplate } from '../../../../../../../src/client/modules/Companies/CompanyOverview/TableCards/ActivityCards/ActivityCard' +import { CollectionList } from '../../../../../../../src/client/components' +import { + assertActivitySubject, + assertOrderKindLabel, +} from '../../../../support/activity-assertions' +import { CREATED_BY, CREATED_ON } from '../../../../support/activity-constants' + +const REFERENCE = 'FYH243/24' +const ORDER_URL = urls.omis.order('2') + +const buildAndMountActivity = ( + showCreatedBy = true, + showPrimaryMarket = true +) => { + const activity = { + date: CREATED_ON, + order: { + id: '2', + primary_market: showPrimaryMarket + ? { + name: 'Test Country', + } + : null, + created_by: showCreatedBy ? CREATED_BY : null, + reference: REFERENCE, + }, + } + + cy.mountWithProvider( + + ) +} + +describe('Order activity card', () => { + context('When the card is rendered with a complete order', () => { + beforeEach(() => { + buildAndMountActivity() + cy.get('[data-test="activity-card-wrapper"]').should('exist') + }) + + it('should render the labels and metadata', () => { + assertOrderKindLabel() + assertActivitySubject(REFERENCE, ORDER_URL, 'activity-card-wrapper') + cy.get('[data-test="activity-date"]').should('have.text', '25 Nov 2058') + cy.get('[data-test="activity-summary"]').should( + 'have.text', + 'Export to Test Country added by Bernard Harris-Patel' + ) + }) + }) + + context('When the order has no created_by name', () => { + beforeEach(() => { + buildAndMountActivity(false) + cy.get('[data-test="activity-card-wrapper"]').should('exist') + }) + + it('should render the labels and metadata', () => { + assertOrderKindLabel() + assertActivitySubject(REFERENCE, ORDER_URL, 'activity-card-wrapper') + cy.get('[data-test="activity-date"]').should('have.text', '25 Nov 2058') + cy.get('[data-test="activity-summary"]').should( + 'have.text', + 'Export to Test Country ' + ) + }) + }) + + context('When the order has no primary market', () => { + beforeEach(() => { + buildAndMountActivity(true, false) + cy.get('[data-test="activity-card-wrapper"]').should('exist') + }) + + it('should render the labels and metadata', () => { + assertOrderKindLabel() + assertActivitySubject(REFERENCE, ORDER_URL, 'activity-card-wrapper') + cy.get('[data-test="activity-date"]').should('have.text', '25 Nov 2058') + cy.get('[data-test="activity-summary"]').should( + 'have.text', + 'Added by Bernard Harris-Patel' + ) + }) + }) +}) diff --git a/test/component/cypress/support/activity-assertions.js b/test/component/cypress/support/activity-assertions.js index fb2e3712c6d..92c14f41008 100644 --- a/test/component/cypress/support/activity-assertions.js +++ b/test/component/cypress/support/activity-assertions.js @@ -43,3 +43,7 @@ export const assertReferralLabel = (expectedText = 'Completed referral') => { export const assertProjectKindLabel = () => { assertText('[data-test="investment-kind-label"]', 'New Investment Project') } + +export const assertOrderKindLabel = () => { + assertText('[data-test="order-kind-label"]', 'New Order') +} diff --git a/test/component/cypress/support/activity-constants.js b/test/component/cypress/support/activity-constants.js index b8aa524d724..e5a441a7bf9 100644 --- a/test/component/cypress/support/activity-constants.js +++ b/test/component/cypress/support/activity-constants.js @@ -3,6 +3,7 @@ export const CREATED_ON = '2058-11-25T00:00:00Z' export const CONTACT_1 = { id: '115b4d96-d2ea-40ff-a01d-812507093a98', name: 'Alexander Hamilton', + job_title: 'Test Job', } export const CONTACT_2 = {