Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
*/

import { notFound, ok } from '@adobe/spacecat-shared-http-utils';
import { isNonEmptyArray } from '@adobe/spacecat-shared-utils';
import { convertToOpportunityEntity } from './opportunity-data-mapper.js';

/**
Expand All @@ -25,6 +26,25 @@ function hasManuallyModifiedSuggestions(suggestions) {
});
}

/**
* remove variationEditPageUrl from the variations other than Original
* @param {Array} variations - Array of variation objects
* @returns {Array} - updated Array of variation objects
*/
function updateVariations(variations) {
if (isNonEmptyArray(variations)) {
return variations.map((variation) => {
if (variation?.name === 'Original') {
return variation;
}
// eslint-disable-next-line no-unused-vars
const { variationEditPageUrl, ...variationWithOutEditUrl } = variation;
return variationWithOutEditUrl;
});
}
return [];
}

export default async function handler(message, context) {
const { log, dataAccess } = context;
const { Audit, Opportunity, Suggestion } = dataAccess;
Expand Down Expand Up @@ -79,14 +99,17 @@ export default async function handler(message, context) {
await Promise.all(existingSuggestions.map((suggestion) => suggestion.remove()));
}

// update suggestions
const updatedVariations = updateVariations(suggestions);

// map the suggestions received from M to PSS
const suggestionData = {
opportunityId: opportunity.getId(),
type: 'CONTENT_UPDATE',
rank: 1,
status: 'NEW',
data: {
variations: suggestions,
variations: updatedVariations,
},
kpiDeltas: {
estimatedKPILift: 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
{
"name": "Original",
"changes": [],
"variationEditPageUrl": "",
"variationEditPageUrl": "https://example.com/edit/original",
"id": "original",
"variationPageUrl": "https://main--wknd--hlxsites.hlx.live/",
"explanation": "",
Expand Down
58 changes: 56 additions & 2 deletions test/guidance-handlers/high-organic-low-ctr.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,19 @@ describe('high-organic-low-ctr guidance handler tests', () => {
expect(Suggestion.create).to.have.been.calledOnce;
const suggestionArg = Suggestion.create.getCall(0).args[0];
expect(suggestionArg.type).to.equal('CONTENT_UPDATE');
expect(suggestionArg.data.variations).to.deep.equal(
guidanceMsgFromMystique.data.suggestions,
// Verify that variations have variationEditPageUrl removed
expect(suggestionArg.data.variations).to.have.lengthOf(
guidanceMsgFromMystique.data.suggestions.length,
);
suggestionArg.data.variations.forEach((variation, index) => {
if (variation.name !== 'Original') {
expect(variation).to.not.have.property('variationEditPageUrl');
} else {
expect(variation).to.have.property('variationEditPageUrl');
}
expect(variation.id).to.equal(guidanceMsgFromMystique.data.suggestions[index].id);
expect(variation.name).to.equal(guidanceMsgFromMystique.data.suggestions[index].name);
});
});

it('should update existing opportunity if found', async () => {
Expand Down Expand Up @@ -357,4 +367,48 @@ describe('high-organic-low-ctr guidance handler tests', () => {
expect(legacyOpportunity.save).to.have.been.called;
expect(Suggestion.create).to.have.been.calledOnce;
});

it('should remove variationEditPageUrl when saving suggestions for variations other than Original', async () => {
Opportunity.allBySiteId.resolves([]);
const message = {
auditId: 'audit-id',
siteId: 'site-id',
data: {
url: 'https://abc.com/abc-adoption/account',
guidance: guidanceMsgFromMystique.data.guidance,
suggestions: guidanceMsgFromMystique.data.suggestions,
},
};

await handler(message, context);

expect(Suggestion.create).to.have.been.calledOnce;
const suggestionArg = Suggestion.create.getCall(0).args[0];

// Verify that variations exist in the created suggestion
expect(suggestionArg.data.variations).to.be.an('array');
expect(suggestionArg.data.variations).to.have.lengthOf(2);

// Verify that variationEditPageUrl is removed from all variations
suggestionArg.data.variations.forEach((variation) => {
if (variation.name === 'Original') {
expect(
variation.variationEditPageUrl,
).to.equal(guidanceMsgFromMystique.data.suggestions[0].variationEditPageUrl);
return;
}
expect(variation).to.not.have.property('variationEditPageUrl');
// Verify other properties are still present
expect(variation).to.have.property('name');
expect(variation).to.have.property('id');
expect(variation).to.have.property('variationPageUrl');
expect(variation).to.have.property('previewImage');
});

// Verify specific variations are correct
expect(suggestionArg.data.variations[0].name).to.equal('Original');
expect(suggestionArg.data.variations[0].id).to.equal('original');
expect(suggestionArg.data.variations[1].name).to.equal('Variation 1');
expect(suggestionArg.data.variations[1].id).to.equal('variation-1');
});
});