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
7 changes: 5 additions & 2 deletions src/reddit-analysis/guidance-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,15 @@ export default async function handler(message, context) {
context,
opportunity,
newData: suggestions,
buildKey: (suggestion) => `reddit::${suggestion.id}`,
buildKey: (suggestion) => `reddit::${suggestion.redditSuggestionId || suggestion.id}`,
mapNewSuggestion: (suggestion) => ({
opportunityId: opportunity.getId(),
type: suggestion.type || 'CONTENT_UPDATE',
rank: suggestion.rank,
data: suggestion.data,
data: {
...suggestion.data,
redditSuggestionId: suggestion.id,
},
}),
});

Expand Down
7 changes: 5 additions & 2 deletions src/youtube-analysis/guidance-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,15 @@ export default async function handler(message, context) {
context,
opportunity,
newData: suggestions,
buildKey: (suggestion) => `youtube::${suggestion.id}`,
buildKey: (suggestion) => `youtube::${suggestion.youtubeSuggestionId || suggestion.id}`,
mapNewSuggestion: (suggestion) => ({
opportunityId: opportunity.getId(),
type: suggestion.type || 'CONTENT_UPDATE',
rank: suggestion.rank,
data: suggestion.data,
data: {
...suggestion.data,
youtubeSuggestionId: suggestion.id,
},
}),
});

Expand Down
29 changes: 26 additions & 3 deletions test/audits/reddit-analysis/guidance-handler.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -412,12 +412,12 @@ describe('Reddit Analysis Guidance Handler', () => {
const mapped0 = mapNewSuggestion(newData[0]);
expect(mapped0.rank).to.equal(1);
expect(mapped0.type).to.equal('CONTENT_UPDATE');
expect(mapped0.data).to.deep.equal({ suggestionValue: 'Analysis A' });
expect(mapped0.data).to.deep.equal({ suggestionValue: 'Analysis A', redditSuggestionId: 'sug_a' });

const mapped1 = mapNewSuggestion(newData[1]);
expect(mapped1.rank).to.equal(2);
expect(mapped1.type).to.equal('METADATA_UPDATE');
expect(mapped1.data).to.deep.equal({ suggestionValue: 'Analysis B' });
expect(mapped1.data).to.deep.equal({ suggestionValue: 'Analysis B', redditSuggestionId: 'sug_b' });
});

it('should default type to CONTENT_UPDATE when not provided', async () => {
Expand Down Expand Up @@ -447,7 +447,7 @@ describe('Reddit Analysis Guidance Handler', () => {
expect(mapped.type).to.equal('CONTENT_UPDATE');
});

it('should use correct buildKey function', async () => {
it('should use correct buildKey function with id', async () => {
const message = {
siteId,
auditId,
Expand All @@ -469,6 +469,29 @@ describe('Reddit Analysis Guidance Handler', () => {

expect(key).to.equal('reddit::my_suggestion_id');
});

it('should use redditSuggestionId in buildKey when available (existing suggestion data)', async () => {
const message = {
siteId,
auditId,
data: {
companyName: 'Example Corp',
analysis: {
suggestions: [
{ id: 'my_suggestion_id', priority: 'HIGH', title: 'My Title', description: 'Desc' },
],
},
},
};

await handler.default(message, context);

const syncCall = syncSuggestionsStub.firstCall;
const { buildKey } = syncCall.args[0];
const key = buildKey({ redditSuggestionId: 'stored_id', suggestionValue: 'some value' });

expect(key).to.equal('reddit::stored_id');
});
});

describe('Error handling', () => {
Expand Down
29 changes: 26 additions & 3 deletions test/audits/youtube-analysis/guidance-handler.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -473,12 +473,12 @@ describe('YouTube Analysis Guidance Handler', () => {
const mapped0 = mapNewSuggestion(newData[0]);
expect(mapped0.rank).to.equal(1);
expect(mapped0.type).to.equal('CONTENT_UPDATE');
expect(mapped0.data).to.deep.equal({ suggestionValue: 'Analysis A' });
expect(mapped0.data).to.deep.equal({ suggestionValue: 'Analysis A', youtubeSuggestionId: 'sug-1' });

const mapped1 = mapNewSuggestion(newData[1]);
expect(mapped1.rank).to.equal(2);
expect(mapped1.type).to.equal('METADATA_UPDATE');
expect(mapped1.data).to.deep.equal({ suggestionValue: 'Analysis B' });
expect(mapped1.data).to.deep.equal({ suggestionValue: 'Analysis B', youtubeSuggestionId: 'sug-2' });
});

it('should default type to CONTENT_UPDATE when not provided', async () => {
Expand Down Expand Up @@ -509,7 +509,7 @@ describe('YouTube Analysis Guidance Handler', () => {
expect(mapped.type).to.equal('CONTENT_UPDATE');
});

it('should use correct buildKey function', async () => {
it('should use correct buildKey function with id', async () => {
const message = {
siteId,
auditId,
Expand All @@ -532,6 +532,29 @@ describe('YouTube Analysis Guidance Handler', () => {
expect(key).to.equal('youtube::my_suggestion_id');
});

it('should use youtubeSuggestionId in buildKey when available (existing suggestion data)', async () => {
const message = {
siteId,
auditId,
data: {
analysis: {
suggestions: [
{ id: 'my_suggestion_id', priority: 'HIGH', title: 'Test', description: 'Test' },
],
},
companyName: 'Example Corp',
},
};

await guidanceHandler.default(message, context);

const syncCall = mockSyncSuggestions.firstCall;
const { buildKey } = syncCall.args[0];
const key = buildKey({ youtubeSuggestionId: 'stored_id', suggestionValue: 'some value' });

expect(key).to.equal('youtube::stored_id');
});

it('should save full analysis data to opportunity', async () => {
const message = {
siteId,
Expand Down
Loading