Skip to content

Commit 008f5f5

Browse files
authored
fix: optionally processing all forms opportunity (#1607)
1 parent 11359ac commit 008f5f5

File tree

9 files changed

+399
-35
lines changed

9 files changed

+399
-35
lines changed

src/forms-opportunities/constants.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ export const ORIGINS = {
2323
ESS_OPS: 'ESS_OPS',
2424
};
2525

26+
// Opportunity filtering constants
27+
export const OPPTY_OPTIONS_ALL = 'all';
28+
export const OPPORTUNITY_LIMIT = 2;
29+
2630
export const successCriteriaLinks = {
2731
111: {
2832
name: 'Non-text Content',

src/forms-opportunities/handler.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ export async function formsAuditRunner(auditUrl, context) {
5454

5555
export async function runAuditAndSendUrlsForScrapingStep(context) {
5656
const {
57-
site, log, finalUrl, dataAccess,
57+
site, log, finalUrl, dataAccess, data,
5858
} = context;
5959

6060
const { SiteTopForm } = dataAccess;
6161
const topForms = await SiteTopForm.allBySiteId(site.getId());
6262

63-
log.info(`[Form Opportunity] [Site Id: ${site.getId()}] starting audit`);
63+
log.info(`[Form Opportunity] [Site Id: ${site.getId()}] starting audit${data ? ` with option: ${JSON.stringify(data)}` : ''}`);
6464
const formsAuditRunnerResult = await formsAuditRunner(finalUrl, context);
6565
const { formVitals } = formsAuditRunnerResult.auditResult;
6666

@@ -148,6 +148,7 @@ export async function runAuditAndSendUrlsForScrapingStep(context) {
148148
siteId: site.getId(),
149149
auditResult: formsAuditRunnerResult.auditResult,
150150
fullAuditRef: formsAuditRunnerResult.fullAuditRef,
151+
...(data && { auditContext: { data } }),
151152
};
152153

153154
log.info(`[Form Opportunity] [Site Id: ${site.getId()}] finished audit and sending urls for scraping: ${JSON.stringify(urlsData)}`);
@@ -156,7 +157,7 @@ export async function runAuditAndSendUrlsForScrapingStep(context) {
156157

157158
export async function sendA11yUrlsForScrapingStep(context) {
158159
const {
159-
log, site, dataAccess,
160+
log, site, dataAccess, auditContext,
160161
} = context;
161162
const { SiteTopForm } = dataAccess;
162163
const topForms = await SiteTopForm.allBySiteId(site.getId());
@@ -201,6 +202,7 @@ export async function sendA11yUrlsForScrapingStep(context) {
201202
jobId: site.getId(),
202203
urls: urlsData,
203204
siteId: site.getId(),
205+
...(auditContext?.data && { auditContext: { data: auditContext.data } }),
204206
};
205207

206208
log.info(`[Form Opportunity] [Site Id: ${site.getId()}] sending urls for form-accessibility audit: ${JSON.stringify(urlsData)}`);
@@ -209,14 +211,15 @@ export async function sendA11yUrlsForScrapingStep(context) {
209211

210212
export async function codeImportStep(context) {
211213
const {
212-
log, site,
214+
log, site, auditContext,
213215
} = context;
214216

215217
log.info(`[Form Opportunity] [Site Id: ${site.getId()}] starting code import step`);
216218

217219
return {
218220
type: 'code',
219221
siteId: site.getId(),
222+
...(auditContext?.data && { auditContext: { data: auditContext.data } }),
220223
};
221224
}
222225

src/forms-opportunities/oppty-handlers/low-conversion-handler.js

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ import {
2020
sendMessageToMystiqueForGuidance,
2121
applyOpportunityFilters,
2222
} from '../utils.js';
23-
import { FORM_OPPORTUNITY_TYPES, ORIGINS } from '../constants.js';
23+
import {
24+
FORM_OPPORTUNITY_TYPES, OPPTY_OPTIONS_ALL, OPPORTUNITY_LIMIT, ORIGINS,
25+
} from '../constants.js';
2426
import { DATA_SOURCES } from '../../common/constants.js';
2527

2628
function generateDefaultGuidance(scrapedData, oppoty) {
@@ -96,8 +98,9 @@ function generateDefaultGuidance(scrapedData, oppoty) {
9698
// eslint-disable-next-line max-len
9799
export default async function createLowConversionOpportunities(auditUrl, auditDataObject, scrapedData, context, excludeForms = new Set()) {
98100
const {
99-
dataAccess, log,
101+
dataAccess, log, auditContext,
100102
} = context;
103+
const opptyOptions = auditContext?.data;
101104
const { Opportunity } = dataAccess;
102105

103106
// eslint-disable-next-line no-param-reassign
@@ -118,14 +121,14 @@ export default async function createLowConversionOpportunities(auditUrl, auditDa
118121
log.debug(`[Form Opportunity] [Site Id: ${auditData.siteId}] forms opportunities ${JSON.stringify(formOpportunities, null, 2)}`);
119122
let filteredOpportunities = filterForms(formOpportunities, scrapedData, log, excludeForms);
120123
filteredOpportunities.forEach((oppty) => excludeForms.add(oppty.form + oppty.formsource));
121-
// Apply filtering logic: deduplicate, filter INVALIDATED, and limit to top opportunities
122-
filteredOpportunities = applyOpportunityFilters(
123-
filteredOpportunities,
124-
opportunities,
125-
FORM_OPPORTUNITY_TYPES.LOW_CONVERSION,
126-
log,
127-
2, // Limit to top 2 opportunities by pageviews
128-
);
124+
log.debug(`[Form Opportunity] [Site Id: ${auditData.siteId}] opptyOptions value: ${JSON.stringify(opptyOptions)}`);
125+
126+
// Skip filtering if opptyOptions is 'all'
127+
if (opptyOptions !== OPPTY_OPTIONS_ALL) {
128+
// Apply filtering logic: deduplicate, filter INVALIDATED, and limit to top opportunities
129+
// eslint-disable-next-line max-len
130+
filteredOpportunities = applyOpportunityFilters(filteredOpportunities, opportunities, FORM_OPPORTUNITY_TYPES.LOW_CONVERSION, log, OPPORTUNITY_LIMIT);
131+
}
129132
log.debug(`[Form Opportunity] [Site Id: ${auditData.siteId}] filtered opportunities high form views low conversion for form ${JSON.stringify(filteredOpportunities, null, 2)}`);
130133

131134
try {

src/forms-opportunities/oppty-handlers/low-navigation-handler.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
*/
1212

1313
import { isNonEmptyObject } from '@adobe/spacecat-shared-utils';
14-
import { FORM_OPPORTUNITY_TYPES, ORIGINS } from '../constants.js';
14+
import {
15+
FORM_OPPORTUNITY_TYPES, OPPTY_OPTIONS_ALL, OPPORTUNITY_LIMIT, ORIGINS,
16+
} from '../constants.js';
1517
import {
1618
applyOpportunityFilters,
1719
calculateProjectedConversionValue,
@@ -31,8 +33,9 @@ const formPathSegments = ['contact', 'newsletter', 'sign', 'enrol', 'subscribe',
3133
// eslint-disable-next-line max-len
3234
export default async function createLowNavigationOpportunities(auditUrl, auditDataObject, scrapedData, context, excludeForms = new Set()) {
3335
const {
34-
dataAccess, log,
36+
dataAccess, log, auditContext,
3537
} = context;
38+
const opptyOptions = auditContext?.data;
3639
const { Opportunity } = dataAccess;
3740

3841
// eslint-disable-next-line no-param-reassign
@@ -65,15 +68,16 @@ export default async function createLowNavigationOpportunities(auditUrl, auditDa
6568
excludeForms,
6669
);
6770
filteredOpportunities.forEach((oppty) => excludeForms.add(oppty.form + oppty.formsource));
68-
// Apply filtering logic: deduplicate, filter INVALIDATED, and limit to top opportunities
69-
filteredOpportunities = applyOpportunityFilters(
70-
filteredOpportunities,
71-
opportunities,
72-
FORM_OPPORTUNITY_TYPES.LOW_NAVIGATION,
73-
log,
74-
2, // Limit to top 2 opportunities by pageviews
75-
);
71+
log.debug(`[Form Opportunity] [Site Id: ${auditData.siteId}] opptyOptions value: ${JSON.stringify(opptyOptions)}`);
72+
73+
// Skip filtering if opptyOptions is 'all'
74+
if (opptyOptions !== OPPTY_OPTIONS_ALL) {
75+
// Apply filtering logic: deduplicate, filter INVALIDATED, and limit to top opportunities
76+
// eslint-disable-next-line max-len
77+
filteredOpportunities = applyOpportunityFilters(filteredOpportunities, opportunities, FORM_OPPORTUNITY_TYPES.LOW_NAVIGATION, log, OPPORTUNITY_LIMIT);
78+
}
7679
log.debug(`[Form Opportunity] [Site Id: ${auditData.siteId}] filtered opportunities: high-page-views-low-form-navigations: ${JSON.stringify(filteredOpportunities, null, 2)}`);
80+
7781
try {
7882
for (const opptyData of filteredOpportunities) {
7983
let highPageViewsLowFormNavOppty = opportunities.find(

src/forms-opportunities/oppty-handlers/low-views-handler.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
*/
1212

1313
import { isNonEmptyObject } from '@adobe/spacecat-shared-utils';
14-
import { FORM_OPPORTUNITY_TYPES, ORIGINS } from '../constants.js';
14+
import {
15+
FORM_OPPORTUNITY_TYPES, OPPTY_OPTIONS_ALL, OPPORTUNITY_LIMIT, ORIGINS,
16+
} from '../constants.js';
1517
import {
1618
applyOpportunityFilters,
1719
calculateProjectedConversionValue,
@@ -30,8 +32,9 @@ import { DATA_SOURCES } from '../../common/constants.js';
3032
// eslint-disable-next-line max-len
3133
export default async function createLowViewsOpportunities(auditUrl, auditDataObject, scrapedData, context, excludeForms = new Set()) {
3234
const {
33-
dataAccess, log,
35+
dataAccess, log, auditContext,
3436
} = context;
37+
const opptyOptions = auditContext?.data;
3538
const { Opportunity } = dataAccess;
3639

3740
const auditData = JSON.parse(JSON.stringify(auditDataObject));
@@ -49,15 +52,16 @@ export default async function createLowViewsOpportunities(auditUrl, auditDataObj
4952
const formOpportunities = await generateOpptyData(formVitals, context, [FORM_OPPORTUNITY_TYPES.LOW_VIEWS]);
5053
let filteredOpportunities = filterForms(formOpportunities, scrapedData, log, excludeForms);
5154
filteredOpportunities.forEach((oppty) => excludeForms.add(oppty.form + oppty.formsource));
52-
// Apply filtering logic: deduplicate, filter INVALIDATED, and limit to top opportunities
53-
filteredOpportunities = applyOpportunityFilters(
54-
filteredOpportunities,
55-
opportunities,
56-
FORM_OPPORTUNITY_TYPES.LOW_VIEWS,
57-
log,
58-
2, // Limit to top 2 opportunities by pageviews
59-
);
55+
log.debug(`[Form Opportunity] [Site Id: ${auditData.siteId}] opptyOptions value: ${JSON.stringify(opptyOptions)}`);
56+
57+
// Skip filtering if opptyOptions is 'all'
58+
if (opptyOptions !== OPPTY_OPTIONS_ALL) {
59+
// Apply filtering logic: deduplicate, filter INVALIDATED, and limit to top opportunities
60+
// eslint-disable-next-line max-len
61+
filteredOpportunities = applyOpportunityFilters(filteredOpportunities, opportunities, FORM_OPPORTUNITY_TYPES.LOW_VIEWS, log, OPPORTUNITY_LIMIT);
62+
}
6063
log.debug(`[Form Opportunity] [Site Id: ${auditData.siteId}] filtered opportunities: high-page-views-low-form-views: ${JSON.stringify(filteredOpportunities, null, 2)}`);
64+
6165
try {
6266
for (const opptyData of filteredOpportunities) {
6367
let highPageViewsLowFormViewsOptty = opportunities.find(

0 commit comments

Comments
 (0)