diff --git a/src/client/modules/Contacts/ContactDetails/ConsentDetails.jsx b/src/client/modules/Contacts/ContactDetails/ConsentDetails.jsx
new file mode 100644
index 00000000000..70b4cc37077
--- /dev/null
+++ b/src/client/modules/Contacts/ContactDetails/ConsentDetails.jsx
@@ -0,0 +1,25 @@
+import React from 'react'
+import { isNil } from 'lodash'
+
+import { SectionHeader } from '../../../components'
+import { transformContactConsents } from './transformers'
+
+const ConsentDetails = ({ contact }) => {
+ const consentGiven = transformContactConsents(contact)
+ return (
+
+
Contact consents
+ {isNil(contact.consentData) ? (
+
+ There is no consent data available for this contact
+
+ ) : (
+
+ {`This contact has ${consentGiven ? 'given' : 'not given'} consent to be contacted.`}
+
+ )}
+
+ )
+}
+
+export default ConsentDetails
diff --git a/src/client/modules/Contacts/ContactDetails/ContactDetails.jsx b/src/client/modules/Contacts/ContactDetails/ContactDetails.jsx
index 89ece6364d3..6ba4b1099ff 100644
--- a/src/client/modules/Contacts/ContactDetails/ContactDetails.jsx
+++ b/src/client/modules/Contacts/ContactDetails/ContactDetails.jsx
@@ -16,6 +16,7 @@ import {
import { ID, TASK_ARCHIVE_CONTACT } from './state'
import ArchiveForm from '../../../components/ArchiveForm'
import ContactLayout from '../../../components/Layout/ContactLayout'
+import ConsentDetails from './ConsentDetails'
const getAddress = (contact, companyAddress) => {
const address = contact.addressSameAsCompany
@@ -103,6 +104,8 @@ const ContactDetails = ({ contactId, companyAddress, permissions }) => (
) : null}
+
+
{
+ context('When a falsey contact is passed', () => {
+ it('Should return false', () => {
+ expect(transformContactConsents(undefined)).to.equal(false)
+ })
+ })
+
+ context('When a contact has no consent data', () => {
+ it('Should return false', () => {
+ expect(transformContactConsents({})).to.equal(false)
+ })
+ })
+
+ context(
+ 'When a contact has a single domain and has not given consent',
+ () => {
+ it('Should return false', () => {
+ expect(
+ transformContactConsents({
+ consentData: [
+ {
+ consentDomain: 'International',
+ emailContactConsent: false,
+ },
+ ],
+ })
+ ).to.equal(false)
+ })
+ }
+ )
+
+ context('When a contact has a single domain and has given consent', () => {
+ it('Should return true', () => {
+ expect(
+ transformContactConsents({
+ consentData: [
+ {
+ consentDomain: 'International',
+ emailContactConsent: true,
+ },
+ ],
+ })
+ ).to.equal(true)
+ })
+ })
+
+ context(
+ 'When a contact has a multiple domains and has given consent to one',
+ () => {
+ it('Should return true', () => {
+ expect(
+ transformContactConsents({
+ consentData: [
+ {
+ consentDomain: 'International',
+ emailContactConsent: true,
+ },
+ {
+ consentDomain: 'International',
+ emailContactConsent: false,
+ },
+ ],
+ })
+ ).to.equal(true)
+ })
+ }
+ )
+
+ context(
+ 'When a contact has a multiple domains and has given consent to all',
+ () => {
+ it('Should return true', () => {
+ expect(
+ transformContactConsents({
+ consentData: [
+ {
+ consentDomain: 'International',
+ emailContactConsent: true,
+ },
+ {
+ consentDomain: 'International',
+ emailContactConsent: true,
+ },
+ ],
+ })
+ ).to.equal(true)
+ })
+ }
+ )
+})
diff --git a/src/client/modules/Contacts/ContactDetails/transformers.js b/src/client/modules/Contacts/ContactDetails/transformers.js
new file mode 100644
index 00000000000..28d69ec9a73
--- /dev/null
+++ b/src/client/modules/Contacts/ContactDetails/transformers.js
@@ -0,0 +1,7 @@
+export const transformContactConsents = (contact) => {
+ if (!contact || !contact.consentData) {
+ return false
+ }
+
+ return contact.consentData.some((consent) => consent.emailContactConsent)
+}
diff --git a/test/component/cypress/specs/Contacts/ConsentDetails.cy.jsx b/test/component/cypress/specs/Contacts/ConsentDetails.cy.jsx
new file mode 100644
index 00000000000..b40d202303b
--- /dev/null
+++ b/test/component/cypress/specs/Contacts/ConsentDetails.cy.jsx
@@ -0,0 +1,66 @@
+import React from 'react'
+
+import ConsentDetails from '../../../../../src/client/modules/Contacts/ContactDetails/ConsentDetails'
+
+describe('ConsentDetails', () => {
+ context('When contact has no consent data', () => {
+ beforeEach(() => {
+ cy.mount()
+ })
+
+ it('should render a message that this data is missing for this contact', () => {
+ cy.get('p').should(
+ 'have.text',
+ 'There is no consent data available for this contact'
+ )
+ })
+ })
+
+ context('When a contact has consented', () => {
+ beforeEach(() => {
+ cy.mount(
+
+ )
+ })
+
+ it('should render the expected message', () => {
+ cy.get('p').should(
+ 'have.text',
+ 'This contact has given consent to be contacted.'
+ )
+ })
+ })
+
+ context('When a contact has not consented', () => {
+ beforeEach(() => {
+ cy.mount(
+
+ )
+ })
+
+ it('should render the expected message', () => {
+ cy.get('p').should(
+ 'have.text',
+ 'This contact has not given consent to be contacted.'
+ )
+ })
+ })
+})
diff --git a/test/end-to-end/cypress/specs/DIT/companies-spec.js b/test/end-to-end/cypress/specs/DIT/companies-spec.js
index bc140513164..5964b0e8809 100644
--- a/test/end-to-end/cypress/specs/DIT/companies-spec.js
+++ b/test/end-to-end/cypress/specs/DIT/companies-spec.js
@@ -49,7 +49,7 @@ describe('Contacts', () => {
cy.contains('You have successfully added a new contact Company Contact')
- assertKeyValueTable('bodyMainContent', {
+ assertKeyValueTable('contact-details-table', {
'Job title': 'Coffee machine operator',
'Phone number': '44 0778877778800',
Address: '100 Path, A town, 12345, United States',
diff --git a/test/functional/cypress/specs/contacts/details-spec.js b/test/functional/cypress/specs/contacts/details-spec.js
index a0a95bc13da..abc35e56965 100644
--- a/test/functional/cypress/specs/contacts/details-spec.js
+++ b/test/functional/cypress/specs/contacts/details-spec.js
@@ -60,6 +60,10 @@ describe('View contact details', () => {
.should('have.attr', 'href', contacts.edit(completeUKContact.id))
})
+ it('should render consent detail', () => {
+ cy.get('[data-test=no-contact-consents]').should('not.exist')
+ })
+
it('should render the archive container', () => {
cy.get('[data-test=archive-contact-container]').should('exist')
cy.get('[data-test=archive-header]')
@@ -204,6 +208,10 @@ describe('View contact details', () => {
})
})
+ it('should not render consent detail', () => {
+ cy.get('[data-test=no-contact-consents]').should('exist')
+ })
+
it('should not render the Edit Contact button', () => {
cy.get('[data-test=edit-contact-button]').should('not.exist')
})
diff --git a/test/sandbox/fixtures/v3/contact/contact-by-id-uk.json b/test/sandbox/fixtures/v3/contact/contact-by-id-uk.json
index 323ff2911d8..b3eef423adb 100644
--- a/test/sandbox/fixtures/v3/contact/contact-by-id-uk.json
+++ b/test/sandbox/fixtures/v3/contact/contact-by-id-uk.json
@@ -1,43 +1,50 @@
{
- "id":"f3d19ea7-d4cf-43e0-8e97-755c57cae313",
- "title":null,
- "first_name":"Joseph",
- "last_name":"Woof",
- "name":"Joseph Woof",
- "job_title":"Dog master",
- "company":{
- "name":"Zboncak Group|271eb29e-425b-4cd8-b386-3208c3a5f978",
- "id":"4cd4128b-1bad-4f1e-9146-5d4678c6a018"
+ "id": "f3d19ea7-d4cf-43e0-8e97-755c57cae313",
+ "title": null,
+ "first_name": "Joseph",
+ "last_name": "Woof",
+ "name": "Joseph Woof",
+ "job_title": "Dog master",
+ "company": {
+ "name": "Zboncak Group|271eb29e-425b-4cd8-b386-3208c3a5f978",
+ "id": "4cd4128b-1bad-4f1e-9146-5d4678c6a018"
},
- "adviser":{
- "name":"DBT Staff",
- "first_name":"DBT",
- "last_name":"Staff",
- "id":"7d19d407-9aec-4d06-b190-d3f404627f21"
+ "adviser": {
+ "name": "DBT Staff",
+ "first_name": "DBT",
+ "last_name": "Staff",
+ "id": "7d19d407-9aec-4d06-b190-d3f404627f21"
},
- "primary":true,
- "telephone_countrycode":"",
- "telephone_number":"",
- "full_telephone_number":"222 3453454",
- "email":"contact@bob.com",
- "address_same_as_company":false,
+ "primary": true,
+ "telephone_countrycode": "",
+ "telephone_number": "",
+ "full_telephone_number": "222 3453454",
+ "email": "contact@bob.com",
+ "address_same_as_company": false,
"address_1": null,
- "address_2":null,
- "address_town":null,
- "address_county":null,
+ "address_2": null,
+ "address_town": null,
+ "address_county": null,
"address_country": {
"id": "80756b9a-5d95-e211-a939-e4115bead28a"
},
- "address_postcode":"E14 8RJ",
- "telephone_alternative":null,
- "email_alternative":null,
- "notes":null,
- "accepts_dit_email_marketing":false,
- "archived":false,
- "archived_documents_url_path":"/document/123",
- "archived_on":null,
- "archived_reason":null,
- "archived_by":null,
- "created_on":"2019-02-04T15:59:14.267412Z",
- "modified_on":"2019-02-05T13:17:23.112153Z"
+ "address_postcode": "E14 8RJ",
+ "telephone_alternative": null,
+ "email_alternative": null,
+ "notes": null,
+ "accepts_dit_email_marketing": false,
+ "archived": false,
+ "archived_documents_url_path": "/document/123",
+ "archived_on": null,
+ "archived_reason": null,
+ "archived_by": null,
+ "created_on": "2019-02-04T15:59:14.267412Z",
+ "modified_on": "2019-02-05T13:17:23.112153Z",
+ "consent_data": [
+ {
+ "source_system": "System A",
+ "consent_domain": "Domestic",
+ "consent": false
+ }
+ ]
}
diff --git a/test/sandbox/fixtures/v3/contact/contact-complete-details-uk.json b/test/sandbox/fixtures/v3/contact/contact-complete-details-uk.json
index 5874086a9c2..954ea12b46f 100644
--- a/test/sandbox/fixtures/v3/contact/contact-complete-details-uk.json
+++ b/test/sandbox/fixtures/v3/contact/contact-complete-details-uk.json
@@ -1,44 +1,51 @@
{
- "id":"2676ea91-9dd7-4cf3-a4a3-67b06f841b54",
- "title":null,
- "first_name":"Joseph",
- "last_name":"Woof",
- "name":"Joseph Woof",
- "job_title":"Dog master",
- "company":{
- "name":"Zboncak Group|271eb29e-425b-4cd8-b386-3208c3a5f978",
- "id":"4cd4128b-1bad-4f1e-9146-5d4678c6a018"
- },
- "adviser":{
- "name":"DBT Staff",
- "first_name":"DBT",
- "last_name":"Staff",
- "id":"7d19d407-9aec-4d06-b190-d3f404627f21"
- },
- "primary":true,
- "telephone_countrycode":"",
- "telephone_number":"",
- "full_telephone_number":"222 3453454",
- "email":"contact@bob.com",
- "address_same_as_company":false,
- "address_1":"123 Test Street",
- "address_2":"Address Line 2",
- "address_town":"Sandbox Town",
- "address_county":"Test County",
- "address_country": {
- "id": "80756b9a-5d95-e211-a939-e4115bead28a",
- "name": "United Kingdom"
- },
- "address_postcode":"AB1 2CD",
- "telephone_alternative":null,
- "email_alternative":null,
- "notes":"An example of a contact for testing purposes",
- "accepts_dit_email_marketing":true,
- "archived":false,
- "archived_documents_url_path":"/document/123",
- "archived_on":null,
- "archived_reason":null,
- "archived_by":null,
- "created_on":"2019-02-04T15:59:14.267412Z",
- "modified_on":"2019-02-05T13:17:23.112153Z"
- }
+ "id": "2676ea91-9dd7-4cf3-a4a3-67b06f841b54",
+ "title": null,
+ "first_name": "Joseph",
+ "last_name": "Woof",
+ "name": "Joseph Woof",
+ "job_title": "Dog master",
+ "company": {
+ "name": "Zboncak Group|271eb29e-425b-4cd8-b386-3208c3a5f978",
+ "id": "4cd4128b-1bad-4f1e-9146-5d4678c6a018"
+ },
+ "adviser": {
+ "name": "DBT Staff",
+ "first_name": "DBT",
+ "last_name": "Staff",
+ "id": "7d19d407-9aec-4d06-b190-d3f404627f21"
+ },
+ "primary": true,
+ "telephone_countrycode": "",
+ "telephone_number": "",
+ "full_telephone_number": "222 3453454",
+ "email": "contact@bob.com",
+ "address_same_as_company": false,
+ "address_1": "123 Test Street",
+ "address_2": "Address Line 2",
+ "address_town": "Sandbox Town",
+ "address_county": "Test County",
+ "address_country": {
+ "id": "80756b9a-5d95-e211-a939-e4115bead28a",
+ "name": "United Kingdom"
+ },
+ "address_postcode": "AB1 2CD",
+ "telephone_alternative": null,
+ "email_alternative": null,
+ "notes": "An example of a contact for testing purposes",
+ "accepts_dit_email_marketing": true,
+ "archived": false,
+ "archived_documents_url_path": "/document/123",
+ "archived_on": null,
+ "archived_reason": null,
+ "archived_by": null,
+ "created_on": "2019-02-04T15:59:14.267412Z",
+ "modified_on": "2019-02-05T13:17:23.112153Z",
+ "consent_data": [
+ {
+ "source_system": "System B",
+ "consent_domain": "International",
+ "consent": true
+ }
+ ]
+}