Skip to content

Commit

Permalink
[VACMS-19406]Correct Manila Profile Page Leadership Links (#2399)
Browse files Browse the repository at this point in the history
* add note in metalsmith where processing should occur

* add ability to process manila pages

* verify string prior to using replace

* add unit tests to cover link processing for manila

* replace unclear string with constant name
  • Loading branch information
SnowboardTechie authored Jan 6, 2025
1 parent 9ee6174 commit 5ad7d0d
Show file tree
Hide file tree
Showing 4 changed files with 172 additions and 0 deletions.
5 changes: 5 additions & 0 deletions script/preview.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ const createMetalSmithSymlink = require('../src/site/stages/build/plugins/create
const {
processLovellPages,
} = require('../src/site/stages/build/drupal/process-lovell-pages');
const {
processManilaPages,
} = require('../src/site/stages/build/drupal/process-manila-pages');

const defaultBuildtype = ENVIRONMENTS.LOCALHOST;
const defaultHost = HOSTNAMES[defaultBuildtype];
Expand Down Expand Up @@ -284,6 +287,8 @@ app.get('/preview', async (req, res, next) => {

drupalData.data.nodeQuery = drupalData.data.nodes;
processLovellPages(drupalData);
processManilaPages(drupalData);

const pageIndex = req.query?.lovellVariant === 'va' ? 1 : 0;

const drupalPage = drupalData.data.nodes.entities[pageIndex];
Expand Down
3 changes: 3 additions & 0 deletions src/site/stages/build/drupal/metalsmith-drupal.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ const { addHubIconField } = require('./benefit-hub');
const { addHomeContent } = require('./home');

const { processLovellPages } = require('./process-lovell-pages');
const { processManilaPages } = require('./process-manila-pages');

const DRUPAL_CACHE_FILENAME = 'drupal/pages.json';
const DRUPAL_HUB_NAV_FILENAME = 'hubNavNames.json';
Expand Down Expand Up @@ -398,6 +399,8 @@ function getDrupalContent(buildOptions) {

// Lovell specific data bifurcation
processLovellPages(drupalData);
// Manila specific data bifurcation
processManilaPages(drupalData);

pipeDrupalPagesIntoMetalsmith(drupalData, files);
await createReactPages(files, drupalData);
Expand Down
76 changes: 76 additions & 0 deletions src/site/stages/build/drupal/process-manila-pages.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/* eslint-disable no-param-reassign */
const MANILA_VA_CLINIC_ENTITY_ID = '1187';

function getManilaClinicUrl(path) {
return typeof path === 'string'
? path.replace(/manila-va-system/i, 'manila-va-clinic')
: path;
}

function isManilaVAClinicPage(page) {
return (
page?.fieldAdministration?.entity?.entityId === MANILA_VA_CLINIC_ENTITY_ID
);
}

function updateManilaSystemLinks(page) {
// Update main URL path
if (page.entityUrl?.path) {
page.entityUrl.path = getManilaClinicUrl(page.entityUrl.path);
}

// Update breadcrumb links
if (page.entityUrl?.breadcrumb) {
page.entityUrl.breadcrumb = page.entityUrl.breadcrumb.map(crumb => ({
...crumb,
url: crumb.url ? getManilaClinicUrl(crumb.url) : crumb.url,
}));
}

// Update field office links
if (page?.fieldOffice?.entity?.entityUrl) {
page.fieldOffice.entity.entityUrl.path = getManilaClinicUrl(
page.fieldOffice.entity.entityUrl.path,
);
}

// Update any listing page links
if (page?.fieldListing?.entity?.entityUrl) {
page.fieldListing.entity.entityUrl.path = getManilaClinicUrl(
page.fieldListing.entity.entityUrl.path,
);
}

return page;
}

function processManilaPages(drupalData) {
const {
manilaVAClinicPages,
otherPages,
} = drupalData.data.nodeQuery.entities.reduce(
(acc, page) => {
if (isManilaVAClinicPage(page)) {
acc.manilaVAClinicPages.push(page);
} else {
acc.otherPages.push(page);
}

return acc;
},
{
manilaVAClinicPages: [],
otherPages: [],
},
);

const processedManilaPages = [
...manilaVAClinicPages,
].map((page, _index, _pages) => updateManilaSystemLinks(page));

drupalData.data.nodeQuery.entities = [...processedManilaPages, ...otherPages];
}

module.exports = {
processManilaPages,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/* eslint-disable @department-of-veterans-affairs/axe-check-required */
const { expect } = require('chai');
const { processManilaPages } = require('../process-manila-pages');

describe('processManilaPages', () => {
it('should process Manila VA Clinic pages and update links', () => {
const mockDrupalData = {
data: {
nodeQuery: {
entities: [
{
fieldAdministration: {
entity: {
entityId: '1187',
},
},
entityUrl: {
path: '/manila-va-system/test',
breadcrumb: [
{ url: '/manila-va-system' },
{ url: '/manila-va-system/test' },
],
},
fieldOffice: {
entity: {
entityUrl: {
path: '/manila-va-system/office',
},
},
},
fieldListing: {
entity: {
entityUrl: {
path: '/manila-va-system/listing',
},
},
},
},
{
fieldAdministration: {
entity: {
entityId: '999',
},
},
entityUrl: {
path: '/other-path',
},
},
],
},
},
};

processManilaPages(mockDrupalData);

const processedEntities = mockDrupalData.data.nodeQuery.entities;
const manilaPage = processedEntities[0];
const otherPage = processedEntities[1];

expect(manilaPage.entityUrl.path).to.equal('/manila-va-clinic/test');
expect(manilaPage.entityUrl.breadcrumb[0].url).to.equal(
'/manila-va-clinic',
);
expect(manilaPage.entityUrl.breadcrumb[1].url).to.equal(
'/manila-va-clinic/test',
);
expect(manilaPage.fieldOffice.entity.entityUrl.path).to.equal(
'/manila-va-clinic/office',
);
expect(manilaPage.fieldListing.entity.entityUrl.path).to.equal(
'/manila-va-clinic/listing',
);
expect(otherPage.entityUrl.path).to.equal('/other-path');
});

it('should handle empty data gracefully', () => {
const emptyDrupalData = {
data: {
nodeQuery: {
entities: [],
},
},
};

processManilaPages(emptyDrupalData);
expect(emptyDrupalData.data.nodeQuery.entities).to.deep.equal([]);
});
});

0 comments on commit 5ad7d0d

Please sign in to comment.