From eb5a248e7589d35dd90b0ff96f76c64368454ba4 Mon Sep 17 00:00:00 2001 From: Christopher Sunkel Date: Thu, 23 Jan 2025 11:04:36 +0000 Subject: [PATCH] Remove legacy DNB Hierarchy page (#7483) --- src/apps/companies/__test__/repos.test.js | 13 -- .../dnb-hierarchy/__test__/middleware.test.js | 217 ------------------ .../apps/dnb-hierarchy/__test__/repos.test.js | 30 --- .../dnb-hierarchy/__test__/router.test.js | 8 - .../__test__/transformers.test.js | 85 ------- .../apps/dnb-hierarchy/__test__/utils.js | 37 --- .../dnb-hierarchy/client/DnbHierarchy.jsx | 75 ------ .../apps/dnb-hierarchy/controllers.js | 45 ---- .../apps/dnb-hierarchy/middleware.js | 79 ------- .../companies/apps/dnb-hierarchy/repos.js | 39 ---- .../companies/apps/dnb-hierarchy/router.js | 8 - .../apps/dnb-hierarchy/transformers.js | 85 ------- src/apps/companies/repos.js | 23 -- src/apps/companies/router.js | 9 - src/apps/companies/views/subsidiaries.njk | 10 - src/apps/routers.js | 1 - src/client/DataHub/App.jsx | 4 - .../Companies/CompanyHierarchy/index.jsx | 202 ---------------- src/client/routes.js | 9 - src/lib/__test__/urls.test.js | 14 -- src/lib/urls.js | 2 - .../specs/companies/dnb-hierarchy-spec.js | 170 -------------- .../specs/companies/subsidiaries-spec.js | 10 - test/selectors/index.js | 4 - 24 files changed, 1179 deletions(-) delete mode 100644 src/apps/companies/apps/dnb-hierarchy/__test__/middleware.test.js delete mode 100644 src/apps/companies/apps/dnb-hierarchy/__test__/repos.test.js delete mode 100644 src/apps/companies/apps/dnb-hierarchy/__test__/router.test.js delete mode 100644 src/apps/companies/apps/dnb-hierarchy/__test__/transformers.test.js delete mode 100644 src/apps/companies/apps/dnb-hierarchy/__test__/utils.js delete mode 100644 src/apps/companies/apps/dnb-hierarchy/client/DnbHierarchy.jsx delete mode 100644 src/apps/companies/apps/dnb-hierarchy/controllers.js delete mode 100644 src/apps/companies/apps/dnb-hierarchy/middleware.js delete mode 100644 src/apps/companies/apps/dnb-hierarchy/repos.js delete mode 100644 src/apps/companies/apps/dnb-hierarchy/router.js delete mode 100644 src/apps/companies/apps/dnb-hierarchy/transformers.js delete mode 100644 src/client/modules/Companies/CompanyHierarchy/index.jsx delete mode 100644 test/functional/cypress/specs/companies/dnb-hierarchy-spec.js diff --git a/src/apps/companies/__test__/repos.test.js b/src/apps/companies/__test__/repos.test.js index 6028711481f..40f3991b5e5 100644 --- a/src/apps/companies/__test__/repos.test.js +++ b/src/apps/companies/__test__/repos.test.js @@ -143,17 +143,4 @@ describe('Company repository', () => { expect(actual).to.deep.equal({ hello: true }) }) }) - - describe('getRelatedCompanies', () => { - it('should make the correct call to the API', async () => { - const authorisedRequestStub = sinon.stub().resolves({}) - const repo = makeRepositoryWithAuthRequest(authorisedRequestStub) - - await repo.getRelatedCompanies(stubRequest, '123', false, true) - - expect(authorisedRequestStub).to.be.calledOnceWithExactly(stubRequest, { - url: `${config.apiRoot}/v4/dnb/123/related-companies?include_subsidiary_companies=true&include_parent_companies=false`, - }) - }) - }) }) diff --git a/src/apps/companies/apps/dnb-hierarchy/__test__/middleware.test.js b/src/apps/companies/apps/dnb-hierarchy/__test__/middleware.test.js deleted file mode 100644 index e230adb9407..00000000000 --- a/src/apps/companies/apps/dnb-hierarchy/__test__/middleware.test.js +++ /dev/null @@ -1,217 +0,0 @@ -const buildMiddlewareParameters = require('../../../../../../test/unit/helpers/middleware-parameters-builder') -const { - setCompanyHierarchyLocalNav, - setDnbHierarchyDetails, -} = require('../middleware') -const urls = require('../../../../../lib/urls') -const { mockGetDnbHierarchy } = require('./utils') - -const DUNS_NUMBER = 999999 - -const buildSubsidiaryMiddlewareParameters = ({ - reqMock = { baseUrl: urls.companies.subsidiaries.index('123') }, - company = { - isUltimate: true, - isGlobalHQ: true, - id: '123', - }, - CURRENT_PATH = urls.companies.dnbHierarchy.index('123'), - permissions = ['company.view_company'], -}) => - buildMiddlewareParameters({ - reqMock, - company, - CURRENT_PATH, - user: { - permissions, - }, - }) - -describe('D&B Hierarchy middleware', () => { - describe('#setCompanyHierarchyLocalNav', () => { - context( - 'when a company is both Global HQ and Ultimate HQ and the flag is ON', - () => { - const middlewareParameters = buildSubsidiaryMiddlewareParameters({}) - - setCompanyHierarchyLocalNav( - middlewareParameters.reqMock, - middlewareParameters.resMock, - middlewareParameters.nextSpy - ) - - it('should render local nav with D&B hierarchy and manual subsidiaries tabs', () => { - expect( - middlewareParameters.resMock.locals.localNavItems - ).to.be.deep.equal([ - { - isActive: true, - label: 'Dun & Bradstreet hierarchy', - permissions: ['company.view_company'], - url: urls.companies.dnbHierarchy.index('123'), - }, - { - isActive: false, - label: 'Manually linked subsidiaries', - permissions: ['company.view_company'], - url: urls.companies.subsidiaries.index('123'), - }, - ]) - }) - } - ) - - context('when the company is Global HQ but not Ultimate HQ', () => { - const middlewareParameters = buildSubsidiaryMiddlewareParameters({ - company: { - isGlobalHQ: true, - isUltimate: false, - }, - }) - - setCompanyHierarchyLocalNav( - middlewareParameters.reqMock, - middlewareParameters.resMock, - middlewareParameters.nextSpy - ) - - it('should not render tabs', () => { - expect( - middlewareParameters.resMock.locals.localNavItems - ).to.be.deep.equal([]) - }) - }) - - context('when the company is Ultimate HQ but not Global HQ', () => { - const middlewareParameters = buildSubsidiaryMiddlewareParameters({ - company: { - isGlobalHQ: false, - isUltimate: true, - }, - }) - - setCompanyHierarchyLocalNav( - middlewareParameters.reqMock, - middlewareParameters.resMock, - middlewareParameters.nextSpy - ) - - it('should not render tabs', () => { - expect( - middlewareParameters.resMock.locals.localNavItems - ).to.be.deep.equal([]) - }) - }) - }) -}) - -describe('#setDnbHierarchyDetails', async () => { - context('when the company DOES have a duns number', async () => { - let middlewareParameters - - before(async () => { - middlewareParameters = buildSubsidiaryMiddlewareParameters({ - company: { - id: 1, - duns_number: DUNS_NUMBER, - global_ultimate_duns_number: DUNS_NUMBER, - }, - }) - - mockGetDnbHierarchy({ - responseBody: { results: [{ id: '2', is_global_ultimate: true }] }, - relatedCompaniesCount: 5, - companyId: 1, - limit: 1, - }) - - await setDnbHierarchyDetails( - middlewareParameters.reqMock, - middlewareParameters.resMock, - middlewareParameters.nextSpy - ) - }) - - it('should set "globalUltimate"', async () => { - expect(middlewareParameters.resMock.locals.globalUltimate).to.deep.equal({ - id: '2', - is_global_ultimate: true, - url: urls.companies.detail(2), - }) - }) - - it('should set "dnbHierarchyCount"', async () => { - expect(middlewareParameters.resMock.locals.dnbHierarchyCount).to.equal(6) - }) - - it('should set "dnbRelatedCompaniesCount"', async () => { - expect( - middlewareParameters.resMock.locals.dnbRelatedCompaniesCount - ).to.equal(5) - }) - }) - - context('when the company DOES NOT have a duns number', async () => { - const middlewareParameters = buildSubsidiaryMiddlewareParameters({ - company: { - duns_number: null, - }, - }) - - before(async () => - setDnbHierarchyDetails( - middlewareParameters.reqMock, - middlewareParameters.resMock, - middlewareParameters.nextSpy - ) - ) - - it('should not set "globalUltimate"', async () => { - expect(middlewareParameters.resMock.locals.globalUltimate).to.be.undefined - }) - - it('should not set "dnbHierarchyCount"', async () => { - expect(middlewareParameters.resMock.locals.dnbHierarchyCount).to.equal(0) - }) - - it('should set "dnbRelatedCompaniesCount" equal to 0', async () => { - expect( - middlewareParameters.resMock.locals.dnbRelatedCompaniesCount - ).to.equal(0) - }) - }) - - context('when the api call fails to get related companies', async () => { - let middlewareParameters - - before(async () => { - middlewareParameters = buildSubsidiaryMiddlewareParameters({ - company: { - id: 1, - duns_number: DUNS_NUMBER, - }, - }) - - mockGetDnbHierarchy({ - companyId: 1, - responseCode: 502, - }) - - await setDnbHierarchyDetails( - middlewareParameters.reqMock, - middlewareParameters.resMock, - middlewareParameters.nextSpy - ) - }) - - it('should swallow exception and return empty response', async () => { - expect(middlewareParameters.resMock.locals.globalUltimate).to.be.undefined - expect(middlewareParameters.resMock.locals.dnbHierarchyCount).to.be.equal( - 0 - ) - expect( - middlewareParameters.resMock.locals.dnbRelatedCompaniesCount - ).to.be.equal(0) - }) - }) -}) diff --git a/src/apps/companies/apps/dnb-hierarchy/__test__/repos.test.js b/src/apps/companies/apps/dnb-hierarchy/__test__/repos.test.js deleted file mode 100644 index 6d31ce859de..00000000000 --- a/src/apps/companies/apps/dnb-hierarchy/__test__/repos.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const config = require('../../../../../config') -const { getDnbHierarchy } = require('../repos') -const { mockGetDnbHierarchy } = require('./utils') - -const dnbHierarchyFixture = { - count: 2, - results: [{ id: '1' }, { id: '2' }], -} -const stubRequest = { session: { token: 'abcd' } } -const DUNS_NUMBER = 999999 - -describe('D&B Subsidiaries repos', () => { - describe('#getDnbHierarchy', () => { - it('should return the one subsidiary', async () => { - mockGetDnbHierarchy({ - globalUltimateDunsNumber: DUNS_NUMBER, - responseBody: dnbHierarchyFixture, - }) - - const actual = await getDnbHierarchy( - stubRequest, - DUNS_NUMBER, - config.paginationDefaultSize, - 1 - ) - - expect(actual).to.deep.equal(dnbHierarchyFixture) - }) - }) -}) diff --git a/src/apps/companies/apps/dnb-hierarchy/__test__/router.test.js b/src/apps/companies/apps/dnb-hierarchy/__test__/router.test.js deleted file mode 100644 index 692f961273a..00000000000 --- a/src/apps/companies/apps/dnb-hierarchy/__test__/router.test.js +++ /dev/null @@ -1,8 +0,0 @@ -const router = require('../router') - -describe('D&B hierarchy routes', () => { - it('should define all routes', () => { - const paths = router.stack.filter((r) => r.route).map((r) => r.route.path) - expect(paths).to.deep.equal(['/:companyId/dnb-hierarchy/data']) - }) -}) diff --git a/src/apps/companies/apps/dnb-hierarchy/__test__/transformers.test.js b/src/apps/companies/apps/dnb-hierarchy/__test__/transformers.test.js deleted file mode 100644 index c3c5d13e93d..00000000000 --- a/src/apps/companies/apps/dnb-hierarchy/__test__/transformers.test.js +++ /dev/null @@ -1,85 +0,0 @@ -const { transformCompanyToDnbHierarchyList } = require('../transformers') -const urls = require('../../../../../lib/urls') - -describe('Edit company form transformers', () => { - describe('#transformCompanyToDnbHierarchyList', () => { - context('when called with a fully populated company', () => { - const actual = transformCompanyToDnbHierarchyList({ - id: '123', - name: 'Test company', - sector: { - name: 'Test sector', - }, - uk_based: true, - uk_region: { - name: 'Test UK region', - }, - trading_names: ['Test trading name'], - address: { - country: { - name: 'Test country', - }, - }, - modified_on: '2016-07-05T12:00:00Z', - headquarter_type: { - name: 'ghq', - }, - is_global_ultimate: true, - }) - - it('should return transformed values', () => { - const expected = { - badges: [ - { text: 'Test country' }, - { text: 'Test UK region' }, - { text: 'Ultimate HQ' }, - { text: 'Global HQ' }, - ], - headingText: 'Test company', - headingUrl: '/companies/123', - metadata: [ - { - label: 'Trading names', - value: ['Test trading name'], - }, - { - label: 'Sector', - value: 'Test sector', - }, - { - label: 'Address', - value: 'Test country', - }, - ], - subheading: 'Updated on 5 Jul 2016, 1:00pm', - } - - expect(actual).to.deep.equal(expected) - }) - }) - - context('when called without ID', () => { - const actual = transformCompanyToDnbHierarchyList({}) - - it('should return undefined', () => { - expect(actual).to.be.undefined - }) - }) - - context('when called only with ID', () => { - const actual = transformCompanyToDnbHierarchyList({ - id: '123', - }) - - it('should return minimal object', () => { - expect(actual).to.deep.equal({ - headingText: undefined, - headingUrl: urls.companies.detail('123'), - subheading: undefined, - metadata: [], - badges: [], - }) - }) - }) - }) -}) diff --git a/src/apps/companies/apps/dnb-hierarchy/__test__/utils.js b/src/apps/companies/apps/dnb-hierarchy/__test__/utils.js deleted file mode 100644 index 112b8ccc2d9..00000000000 --- a/src/apps/companies/apps/dnb-hierarchy/__test__/utils.js +++ /dev/null @@ -1,37 +0,0 @@ -const nock = require('nock') - -const config = require('../../../../../config') - -function mockGetDnbHierarchy({ - globalUltimateDunsNumber, - responseBody, - companyId, - relatedCompaniesCount, - responseCode = 200, - offset = 0, - limit = 10, -}) { - nock(config.apiRoot) - .get( - `/v4/company?limit=${limit}&offset=${offset}&sortby=name&global_ultimate_duns_number=${globalUltimateDunsNumber}` - ) - .reply(responseCode, responseBody) - - nock(config.apiRoot) - .get( - `/v4/dnb/${companyId}/related-companies/count?include_manually_linked_companies=true` - ) - .reply(responseCode, { - related_companies_count: relatedCompaniesCount, - total: relatedCompaniesCount, - }) - - nock(config.apiRoot) - .post(`/v4/search/company`) - .query(true) - .reply(responseCode, responseBody) -} - -module.exports = { - mockGetDnbHierarchy, -} diff --git a/src/apps/companies/apps/dnb-hierarchy/client/DnbHierarchy.jsx b/src/apps/companies/apps/dnb-hierarchy/client/DnbHierarchy.jsx deleted file mode 100644 index b27615fd33e..00000000000 --- a/src/apps/companies/apps/dnb-hierarchy/client/DnbHierarchy.jsx +++ /dev/null @@ -1,75 +0,0 @@ -import React, { useEffect, useState } from 'react' -import { useNavigate } from 'react-router-dom' -import PropTypes from 'prop-types' -import axios from 'axios' -import useSearchParam from 'react-use/lib/useSearchParam' -import { Details, LoadingBox } from 'govuk-react' - -import { CollectionList } from '../../../../../client/components/' - -const DnbHierarchy = ({ dataEndpoint, isGlobalHQ }) => { - const [companies, setCompanies] = useState([]) - const [totalItems, setTotalItems] = useState(0) - const [isLoading, setIsLoading] = useState(true) - const navigate = useNavigate() - - const activePage = parseInt(useSearchParam('page'), 10) || 1 - const getPageUrl = (page) => `${window.location.pathname}?page=${page}` - - const onPageClick = (page) => { - navigate(getPageUrl(page)) - } - - useEffect(() => { - async function fetchData() { - const { data } = await axios.get(dataEndpoint, { - params: { - page: activePage, - }, - }) - setCompanies(data.results) - setTotalItems(data.count) - setIsLoading(false) - } - setIsLoading(true) - window.scrollTo(0, 0) - fetchData() - }, [activePage]) - - return ( - <> -

This hierarchy information from Dun & Bradstreet cannot be edited.

- - {isGlobalHQ && ( -
- This does not mean that Dun & Bradstreet does not know about those - subsidiaries. -
- The Dun & Bradstreet hierarchy information can only show the company - records in Data Hub that have been matched to a verified Dun & - Bradstreet record. This matching process is ongoing and more related - company records will appear in the future. -
- )} - - - - - - ) -} - -DnbHierarchy.propTypes = { - dataEndpoint: PropTypes.string.isRequired, - isGlobalHQ: PropTypes.bool.isRequired, -} - -export default DnbHierarchy diff --git a/src/apps/companies/apps/dnb-hierarchy/controllers.js b/src/apps/companies/apps/dnb-hierarchy/controllers.js deleted file mode 100644 index f58c7af8906..00000000000 --- a/src/apps/companies/apps/dnb-hierarchy/controllers.js +++ /dev/null @@ -1,45 +0,0 @@ -/* eslint-disable camelcase */ - -const config = require('../../../../config') -const { transformCompanyToDnbHierarchyList } = require('./transformers') -const { getDnbHierarchy } = require('./repos') - -function removeCurrentCompany(dunsNumber, { count, results }) { - if (results.find((c) => c.duns_number !== dunsNumber)) { - return { - count: count > 0 ? count - 1 : 0, - results: results.filter((c) => c.duns_number !== dunsNumber), - } - } - - // istanbul ignore next: Covered by functional tests - return { count, results } -} - -async function fetchDnbHierarchyHandler(req, res, next) { - try { - const { company } = res.locals - const { page } = req.query - - const { count, results } = removeCurrentCompany( - company.duns_number, - await getDnbHierarchy( - req, - company.global_ultimate_duns_number, - config.paginationDefaultSize, - page - ) - ) - - res.json({ - count, - results: results.map(transformCompanyToDnbHierarchyList), - }) - } catch (error) { - next(error) - } -} - -module.exports = { - fetchDnbHierarchyHandler, -} diff --git a/src/apps/companies/apps/dnb-hierarchy/middleware.js b/src/apps/companies/apps/dnb-hierarchy/middleware.js deleted file mode 100644 index 86bc6e9a5f2..00000000000 --- a/src/apps/companies/apps/dnb-hierarchy/middleware.js +++ /dev/null @@ -1,79 +0,0 @@ -const { get } = require('lodash') - -const { setLocalNav } = require('../../../middleware') -const { getGlobalUltimate, getRelatedCompaniesCount } = require('./repos') -const urls = require('../../../../lib/urls') - -function setCompanyHierarchyLocalNav(req, res, next) { - const { company } = res.locals - - if (company.isUltimate && company.isGlobalHQ) { - const navItems = [ - { - url: urls.companies.dnbHierarchy.index(company.id), - label: 'Dun & Bradstreet hierarchy', - permissions: ['company.view_company'], - }, - { - url: urls.companies.subsidiaries.index(company.id), - label: 'Manually linked subsidiaries', - permissions: ['company.view_company'], - }, - ] - setLocalNav(navItems, false)(req, res, next) - } else { - setLocalNav()(req, res, next) - } -} - -async function getDnbHierarchyDetails(req, company) { - if (company.duns_number) { - try { - const dnbRelatedCompaniesCount = await getRelatedCompaniesCount( - req, - company.id - ) - let globalUltimateResult - if (company.global_ultimate_duns_number) { - const globalUltimate = await getGlobalUltimate( - req, - company.global_ultimate_duns_number - ) - globalUltimateResult = get(globalUltimate, 'results[0]') - } - - return { - globalUltimate: globalUltimateResult && { - ...globalUltimateResult, - url: urls.companies.detail(globalUltimateResult.id), - }, - dnbRelatedCompaniesCount: dnbRelatedCompaniesCount.total, - dnbHierarchyCount: dnbRelatedCompaniesCount.related_companies_count + 1, - } - } catch (err) { - return { dnbHierarchyCount: 0, dnbRelatedCompaniesCount: 0 } - } - } - - return { - dnbHierarchyCount: 0, - dnbRelatedCompaniesCount: 0, - } -} - -async function setDnbHierarchyDetails(req, res, next) { - const { company } = res.locals - - const { globalUltimate, dnbHierarchyCount, dnbRelatedCompaniesCount } = - await getDnbHierarchyDetails(req, company) - - res.locals.globalUltimate = globalUltimate - res.locals.dnbHierarchyCount = dnbHierarchyCount - res.locals.dnbRelatedCompaniesCount = dnbRelatedCompaniesCount - next() -} - -module.exports = { - setDnbHierarchyDetails, - setCompanyHierarchyLocalNav, -} diff --git a/src/apps/companies/apps/dnb-hierarchy/repos.js b/src/apps/companies/apps/dnb-hierarchy/repos.js deleted file mode 100644 index 6991423ead1..00000000000 --- a/src/apps/companies/apps/dnb-hierarchy/repos.js +++ /dev/null @@ -1,39 +0,0 @@ -const { authorisedRequest } = require('../../../../lib/authorised-request') -const config = require('../../../../config') - -function getDnbHierarchy(req, globalUltimateDunsNumber, limit, page = 1) { - const offset = limit * (page - 1) - - return authorisedRequest(req, { - url: `${config.apiRoot}/v4/company`, - qs: { - limit, - offset, - sortby: 'name', - global_ultimate_duns_number: globalUltimateDunsNumber, - }, - }) -} - -async function getRelatedCompaniesCount(req, companyId) { - return await authorisedRequest(req, { - url: `${config.apiRoot}/v4/dnb/${companyId}/related-companies/count?include_manually_linked_companies=true`, - }) -} - -async function getGlobalUltimate(req, globalUltimateDunsNumber) { - return await authorisedRequest(req, { - method: 'POST', - url: `${config.apiRoot}/v4/search/company`, - qs: { - limit: 1, - }, - body: { duns_number: globalUltimateDunsNumber }, - }) -} - -module.exports = { - getDnbHierarchy, - getGlobalUltimate, - getRelatedCompaniesCount, -} diff --git a/src/apps/companies/apps/dnb-hierarchy/router.js b/src/apps/companies/apps/dnb-hierarchy/router.js deleted file mode 100644 index 444c9388e21..00000000000 --- a/src/apps/companies/apps/dnb-hierarchy/router.js +++ /dev/null @@ -1,8 +0,0 @@ -const router = require('express').Router() - -const urls = require('../../../../lib/urls') -const { fetchDnbHierarchyHandler } = require('./controllers') - -router.get(urls.companies.dnbHierarchy.data.route, fetchDnbHierarchyHandler) - -module.exports = router diff --git a/src/apps/companies/apps/dnb-hierarchy/transformers.js b/src/apps/companies/apps/dnb-hierarchy/transformers.js deleted file mode 100644 index 1461901a28b..00000000000 --- a/src/apps/companies/apps/dnb-hierarchy/transformers.js +++ /dev/null @@ -1,85 +0,0 @@ -/* eslint-disable camelcase */ - -const { - formatAddress, - formatDateTime, -} = require('../../../../config/nunjucks/filters') -const urls = require('../../../../lib/urls') -const labels = require('../../labels') - -function transformCompanyToDnbHierarchyList({ - id, - name, - sector, - uk_based, - uk_region, - trading_names, - address, - modified_on, - headquarter_type, - is_global_ultimate, -} = {}) { - if (!id) { - return - } - - const metadata = [] - const badges = [] - - if (trading_names && trading_names.length) { - metadata.push({ - label: labels.hqLabels.trading_names, - value: trading_names, - }) - } - - if (sector && sector.name) { - metadata.push({ - label: 'Sector', - value: sector.name, - }) - } - - if (address && address.country && address.country.name) { - badges.push({ - text: address.country.name, - }) - } - - if (uk_based && uk_region && uk_region.name) { - badges.push({ - text: uk_region.name, - }) - } - - if (is_global_ultimate) { - badges.push({ - text: labels.companyDetailsLabels.ultimate_hq, - }) - } - - if (headquarter_type) { - badges.push({ - text: labels.hqLabels[headquarter_type.name], - }) - } - - if (address) { - metadata.push({ - label: labels.address.companyAddress, - value: formatAddress(address), - }) - } - - return { - headingText: name, - headingUrl: urls.companies.detail(id), - subheading: modified_on && `Updated on ${formatDateTime(modified_on)}`, - metadata, - badges, - } -} - -module.exports = { - transformCompanyToDnbHierarchyList, -} diff --git a/src/apps/companies/repos.js b/src/apps/companies/repos.js index bd71c7e91cd..f75faf46e02 100644 --- a/src/apps/companies/repos.js +++ b/src/apps/companies/repos.js @@ -79,16 +79,6 @@ function getCompanySubsidiaries(req, companyId, page = 1) { }) } -function getGlobalUltimateHierarchy(req, globalUltimateDunnsNumber) { - return authorisedRequest(req, { - url: `${config.apiRoot}/v4/company`, - qs: { - limit: 200, - global_ultimate_duns_number: globalUltimateDunnsNumber, - }, - }) -} - function getOneListGroupCoreTeam(req, companyId) { return authorisedRequest(req, { url: `${config.apiRoot}/v4/company/${companyId}/one-list-group-core-team`, @@ -135,17 +125,6 @@ function createDnbChangeRequest(req, dunsNumber, changes) { }) } -function getRelatedCompanies( - req, - companyId, - include_parent_companies, - include_subsidiary_companies -) { - return authorisedRequest(req, { - url: `${config.apiRoot}/v4/dnb/${companyId}/related-companies?include_subsidiary_companies=${include_subsidiary_companies}&include_parent_companies=${include_parent_companies}`, - }) -} - module.exports = { saveCompany, getDitCompany, @@ -156,11 +135,9 @@ module.exports = { unarchiveCompany, updateCompany, getCompanySubsidiaries, - getGlobalUltimateHierarchy, getOneListGroupCoreTeam, saveDnbCompany, createDnbCompanyInvestigation, linkDataHubCompanyToDnBCompany, createDnbChangeRequest, - getRelatedCompanies, } diff --git a/src/apps/companies/router.js b/src/apps/companies/router.js index 7af7c2c044a..f202deb5186 100644 --- a/src/apps/companies/router.js +++ b/src/apps/companies/router.js @@ -32,23 +32,16 @@ const formatPostcodes = require('./middleware/format-postcodes') const addCompanyFormRouter = require('./apps/add-company/router') const editCompanyFormRouter = require('./apps/edit-company/router') -const dnbHierarchyRouter = require('./apps/dnb-hierarchy/router') const matchCompanyRouter = require('./apps/match-company/router') const interactionsRouter = require('../interactions/router.sub-app') const companyListsRouter = require('../company-lists/router') const referralsRouter = require('./apps/referrals/router') const accountManagementRouter = require('./apps/account-management/router') -const { - setCompanyHierarchyLocalNav, - setDnbHierarchyDetails, -} = require('./apps/dnb-hierarchy/middleware') - router.use(handleRoutePermissions(APP_PERMISSIONS)) router.param('companyId', getCompany) router.param('companyId', setIsCompanyAlreadyAdded) -router.param('companyId', setDnbHierarchyDetails) router.get( urls.companies.export.route, @@ -83,10 +76,8 @@ router.use( router.post(urls.companies.manageCompanyList.route, addCompanyOrRemoveFromList) -router.use(urls.companies.subsidiaries.index.route, setCompanyHierarchyLocalNav) router.get(urls.companies.subsidiaries.index.route, renderSubsidiaries) -router.use(dnbHierarchyRouter) router.use(matchCompanyRouter) router.use(referralsRouter) router.use(accountManagementRouter) diff --git a/src/apps/companies/views/subsidiaries.njk b/src/apps/companies/views/subsidiaries.njk index a15678c54f8..82d54884d83 100644 --- a/src/apps/companies/views/subsidiaries.njk +++ b/src/apps/companies/views/subsidiaries.njk @@ -8,16 +8,6 @@ }) }} {% endblock %} -{% block local_nav %} - {% if localNavItems.length > 0 %} -
-
- {{ TabbedLocalNav({ items: localNavItems }) }} -
-
- {% endif %} -{% endblock %} - {% block body_main_content %}

diff --git a/src/apps/routers.js b/src/apps/routers.js index a0aadb7ba58..28640b4ee38 100644 --- a/src/apps/routers.js +++ b/src/apps/routers.js @@ -35,7 +35,6 @@ const reactRoutes = [ '/companies/:companyId/exportwins/:winId/edit', '/companies/:companyId/exportwins/:winId/edit-success', '/companies/:companyId/exportwins/:winId/customer-feedback', - '/companies/:companyId/dnb-hierarchy', '/companies/:companyId/company-tree', '/companies/:companyId/account-management/strategy/create', '/companies/:companyId/account-management/strategy/edit', diff --git a/src/client/DataHub/App.jsx b/src/client/DataHub/App.jsx index db59259c982..cfa3da1578e 100644 --- a/src/client/DataHub/App.jsx +++ b/src/client/DataHub/App.jsx @@ -21,7 +21,6 @@ import PersonalisedDashboard from '../components/PersonalisedDashboard/index.jsx import InvestmentProjectForm from '../../apps/investments/client/projects/create/InvestmentProjectForm.jsx' import InteractionDetails from '../modules/Interactions/InteractionDetails/index.jsx' import PropositionDetails from '../modules/Investments/Projects/Propositions/PropositionDetails.jsx' -import CompanyHierarchy from '../modules/Companies/CompanyHierarchy/index.jsx' import Footer from '../components/Footer/index.jsx' @@ -143,9 +142,6 @@ export const App = () => { {(props) => } - - {(props) => } - {(props) => ( diff --git a/src/client/modules/Companies/CompanyHierarchy/index.jsx b/src/client/modules/Companies/CompanyHierarchy/index.jsx deleted file mode 100644 index 7269ffe7ea3..00000000000 --- a/src/client/modules/Companies/CompanyHierarchy/index.jsx +++ /dev/null @@ -1,202 +0,0 @@ -import React from 'react' -import { useParams } from 'react-router-dom' -import { connect } from 'react-redux' -import styled from 'styled-components' - -import Task from '../../../components/Task' -import { - TASK_GET_COMPANY_DETAIL, - ID as COMPANY_DETAILS_ID, -} from '../CompanyDetails/state' -import { COMPANY_LOADED } from '../../../actions' -import { state2props } from './state' -import urls from '../../../../lib/urls' -import DnbHierarchy from '../../../../apps/companies/apps/dnb-hierarchy/client/DnbHierarchy' -import { DefaultLayout } from '../../../components' -import AccessDenied from '../../../components/AccessDenied' -import { - StyledAnchorTag, - StyledListItem, -} from '../../../components/CompanyTabbedLocalNavigation/CompanyLocalTab' -import { buildCompanyBreadcrumbs } from '../utils' - -//These styled components are copied from the CompanyLocalTab file. They will all be deleted in -//the next ticket, adding here temporarily to avoid needing to refactor code thatis about to -//be deleted -const StyledGridRow = styled.div` - margin-right: -15px; - margin-left: -15px; -` - -const StyledGridColumn = styled.div` - box-sizing: border-box; - width: 100%; - padding: 0 15px; - @media (min-width: 840px) { - width: 100%; - float: left; - } -` -const StyledNav = styled.nav` - margin-bottom: 15px; - color: #0b0c0c; - margin-top: 5px; - @media (min-width: 840px) { - margin-bottom: 30px; - margin-top: 5px; - } -` - -const StyledUnorderedList = styled.ul` - margin: 0; - padding: 0; - list-style: none; - display: flex; - border-bottom: none; - @media (max-width: 839px) { - display: block; - padding-bottom: 20px; - border-bottom: 0; - } -` - -const StyledTabAnchorTag = styled(StyledAnchorTag)` - width: 100%; -` - -const StyledTabListItem = styled(StyledListItem)` - flex-grow: 1; - max-width: 50%; -` - -const CompanyLocalTab = ({ navItem, index }) => { - return ( - navItem && ( - - - {navItem.label} - - - ) - ) -} - -const localTabItems = (company) => { - if (!company) { - return [] - } - - const tabItems = [] - if (company.is_global_ultimate) { - tabItems.push({ - url: urls.companies.dnbHierarchy.index(company.id), - path: '', - label: 'Dun & Bradstreet hierarchy', - isActive: true, - }) - } - if (company.is_global_headquarters) { - tabItems.push({ - url: urls.companies.subsidiaries.index(company.id), - path: '', - label: 'Manually linked subsidiaries', - isActive: false, - }) - } - return tabItems -} - -const breadcrumbs = (company) => - !company - ? [] - : buildCompanyBreadcrumbs( - [ - { - link: urls.companies.businessDetails(company.id), - text: 'Business details', - }, - { - text: 'Related companies', - }, - ], - company.id, - company.name - ) - -const CompanyHierarchy = ({ company }) => { - const { companyId } = useParams() - if (company && !company.global_ultimate_duns_number) { - return ( - - ) - } - - return ( - - - {() => - company && ( - <> - - - - - {localTabItems(company).map((t, index) => ( - - ))} - - - - - -

- -
- - ) - } - - - ) -} - -export default connect(state2props)(CompanyHierarchy) diff --git a/src/client/routes.js b/src/client/routes.js index 5badf0ef4c4..c61f3a5ebfb 100644 --- a/src/client/routes.js +++ b/src/client/routes.js @@ -24,7 +24,6 @@ import { CreateExportWin, EditExportWin } from './modules/ExportWins/Form' import ExportWinsRedirect from './modules/ExportWins/Status/Redirect' import Success from './modules/ExportWins/Form/Success' import EditSuccess from './modules/ExportWins/Form/EditSuccess' -import CompanyHierarchy from './modules/Companies/CompanyHierarchy' import CompanyTree from './modules/Companies/CompanyHierarchy/CompanyTree' import Community from './modules/Community' import Strategy from './modules/Companies/AccountManagement/Strategy' @@ -132,14 +131,6 @@ function Routes() { ), }, - { - path: '/companies/:companyId/dnb-hierarchy', - element: ( - - - - ), - }, { path: '/companies/:companyId/company-tree', element: ( diff --git a/src/lib/__test__/urls.test.js b/src/lib/__test__/urls.test.js index ec85f01c05a..4f263b09ee1 100644 --- a/src/lib/__test__/urls.test.js +++ b/src/lib/__test__/urls.test.js @@ -99,20 +99,6 @@ describe('urls', () => { '/:companyId/account-management/advisers/remove' ) - expect(urls.companies.dnbHierarchy.index.route).to.equal( - '/:companyId/dnb-hierarchy' - ) - expect(urls.companies.dnbHierarchy.index(companyId)).to.equal( - `/companies/${companyId}/dnb-hierarchy` - ) - - expect(urls.companies.dnbHierarchy.data.route).to.equal( - '/:companyId/dnb-hierarchy/data' - ) - expect(urls.companies.dnbHierarchy.data(companyId)).to.equal( - `/companies/${companyId}/dnb-hierarchy/data` - ) - expect(urls.companies.exports.index.route).to.equal('/:companyId/exports') expect(urls.companies.exports.index(companyId)).to.equal( `/companies/${companyId}/exports` diff --git a/src/lib/urls.js b/src/lib/urls.js index 517a937dbf5..f149747c647 100644 --- a/src/lib/urls.js +++ b/src/lib/urls.js @@ -202,8 +202,6 @@ module.exports = { data: url('/companies', '/:companyId/edit-history/data'), }, dnbHierarchy: { - index: url('/companies', '/:companyId/dnb-hierarchy'), - data: url('/companies', '/:companyId/dnb-hierarchy/data'), tree: url('/companies', '/:companyId/company-tree'), relatedCompaniesCount: url( '/v4/dnb', diff --git a/test/functional/cypress/specs/companies/dnb-hierarchy-spec.js b/test/functional/cypress/specs/companies/dnb-hierarchy-spec.js deleted file mode 100644 index 09a69a925e0..00000000000 --- a/test/functional/cypress/specs/companies/dnb-hierarchy-spec.js +++ /dev/null @@ -1,170 +0,0 @@ -const { - assertLocalHeader, - assertBreadcrumbs, -} = require('../../support/assertions') -const { - assertLocalNav, -} = require('../../../../end-to-end/cypress/support/assertions') - -const selectors = require('../../../../selectors') -const urls = require('../../../../../src/lib/urls') - -const { - company: { - dnbGlobalUltimate, - dnbLtd, - dnBGlobalUltimateAndGlobalHq, - dnbSubsidiary, - }, -} = require('../../fixtures') - -function assertRelatedCompaniesPage({ - company, - areTabsVisible, - companiesInHierarchy, -}) { - beforeEach(() => { - cy.visit(urls.companies.dnbHierarchy.index(company.id)) - }) - - it('should render the header', () => { - assertLocalHeader(`Company records related to ${company.name}`) - }) - - it('should render the helper text', () => { - cy.contains( - 'This hierarchy information from Dun & Bradstreet cannot be edited.' - ) - }) - - it('should render breadcrumbs', () => { - assertBreadcrumbs({ - Home: urls.dashboard.index(), - Companies: urls.companies.index(), - [company.name]: urls.companies.detail(company.id), - 'Business details': urls.companies.businessDetails(company.id), - 'Related companies': null, - }) - }) - - it('should render the list of companies', () => { - cy.get(selectors.companyDnbHierarchy.collection) - .should('contain', '2 related company records') - .and('not.contain', company.name) - .get('h3') - .parent() - .should('have.length', companiesInHierarchy.length) - .each((item, i) => { - const expectedCompany = companiesInHierarchy[i] - const expectedHref = urls.companies.detail(expectedCompany.id) - - cy.get(item) - .as('hierarchyItem') - .contains(expectedCompany.name) - .invoke('attr', 'href') - .should('eq', expectedHref || undefined) - - cy.get('@hierarchyItem') - .should('contain', 'Updated on') - .should('contain', 'Address') - - if ( - expectedCompany.trading_names && - expectedCompany.trading_names.length - ) { - cy.get('@hierarchyItem').should( - 'contain', - `Trading names ${expectedCompany.trading_names.join('')}` - ) - } - - if (expectedCompany.sector) { - cy.get('@hierarchyItem').should( - 'contain', - `Sector ${expectedCompany.sector.name}` - ) - } - }) - }) - - if (areTabsVisible) { - it('should display the local nav', () => { - assertLocalNav('[data-test="tabbedLocalNav"] a', [ - 'Dun & Bradstreet hierarchy', - 'Manually linked subsidiaries', - ]) - }) - } else { - it('should not display the local nav', () => { - cy.get(selectors.tabbedLocalNav().tabs).should('not.exist') - }) - } -} - -describe('D&B Company hierarchy', () => { - context('when viewing hierarchy for a D&B Global Ultimate', () => { - assertRelatedCompaniesPage({ - company: dnbGlobalUltimate, - companiesInHierarchy: [dnbSubsidiary, dnbLtd], - areTabsVisible: false, - }) - - it('should now show explanation why the D&B hierarchy might have fewer records than manual one', () => { - cy.contains( - "Why aren't all manually linked subsidiaries listed here?" - ).should('not.exist') - }) - }) - - context( - "when viewing a company which is a part of D&B hierarchy but isn't a Global Ultimate nor a Global HQ", - () => { - assertRelatedCompaniesPage({ - company: dnbSubsidiary, - companiesInHierarchy: [dnbGlobalUltimate, dnbLtd], - areTabsVisible: false, - }) - } - ) - - context( - 'when viewing hierarchy for a D&B Global Ultimate which is also Global HQ', - () => { - assertRelatedCompaniesPage({ - company: dnBGlobalUltimateAndGlobalHq, - companiesInHierarchy: [dnbSubsidiary, dnbLtd], - areTabsVisible: true, - }) - - it('should show explanation why the D&B hierarchy might have fewer records than manual one', () => { - cy.get( - 'details:contains("Why aren\'t all manually linked subsidiaries listed here?")' - ).should( - 'have.text', - '' + - "Why aren't all manually linked subsidiaries listed here?This does not" + - ' mean that Dun & Bradstreet does not know about those subsidiaries.The' + - ' Dun & Bradstreet hierarchy information can only show the company records' + - ' in Data Hub that have been matched to a verified Dun & Bradstreet record.' + - ' This matching process is ongoing and more related company records will' + - ' appear in the future.' - ) - }) - } - ) - - context('when attempting to view the hierarchy without a D&B id', () => { - const accessDeniedId = 1234 - before(() => { - cy.intercept(`api-proxy/v4/company/${accessDeniedId}`, { - id: accessDeniedId, - global_ultimate_duns_number: null, - }).as('companyApi') - cy.visit(urls.companies.dnbHierarchy.index(accessDeniedId)) - }) - it('should display the access denied page', () => { - cy.wait('@companyApi') - cy.get('[data-test="access-denied"]').should('be.visible') - }) - }) -}) diff --git a/test/functional/cypress/specs/companies/subsidiaries-spec.js b/test/functional/cypress/specs/companies/subsidiaries-spec.js index 9a06b882ac9..3be909e6fbc 100644 --- a/test/functional/cypress/specs/companies/subsidiaries-spec.js +++ b/test/functional/cypress/specs/companies/subsidiaries-spec.js @@ -2,9 +2,6 @@ const { assertBreadcrumbs } = require('../../support/assertions') const urls = require('../../../../../src/lib/urls') const fixtures = require('../../fixtures') const selectors = require('../../../../selectors') -const { - assertLocalNav, -} = require('../../../../end-to-end/cypress/support/assertions') describe('Companies subsidiaries', () => { context('when viewing subsidiaries for a Dun & Bradstreet company', () => { @@ -109,13 +106,6 @@ describe('Companies subsidiaries', () => { }) }) - it('should display tabs for two types of hierarchies', () => { - assertLocalNav(selectors.tabbedLocalNav().tabs, [ - 'Dun & Bradstreet hierarchy', - 'Manually linked subsidiaries', - ]) - }) - it('should render the helper text', () => { cy.get('p').should( 'contain', diff --git a/test/selectors/index.js b/test/selectors/index.js index d563f105fb0..6d146056ee5 100644 --- a/test/selectors/index.js +++ b/test/selectors/index.js @@ -18,10 +18,6 @@ exports.companyList = { edit: require('./company-lists/edit'), } -exports.companyDnbHierarchy = { - collection: '#dnb-hierarchy', -} - exports.eventCreate = require('./event/createOrEdit') exports.entityCollection = require('./entity-collection')