From f2575a0b39aa3ff1d36ee6d94adadcdc8317a9c7 Mon Sep 17 00:00:00 2001 From: Dylan Martin Date: Fri, 19 Jul 2024 18:39:13 -0400 Subject: [PATCH] feat(surveys): adds targeting changes to the survey revision history (#23834) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...ghts--funnel-top-to-bottom-edit--light.png | Bin 163826 -> 163819 bytes .../feature-flags/activityDescriptions.tsx | 16 + .../surveys/surveyActivityDescriber.test.tsx | 262 +++++++++ .../surveys/surveyActivityDescriber.tsx | 543 ++++++++++++------ package.json | 1 + pnpm-lock.yaml | 7 + posthog/api/survey.py | 46 +- posthog/api/test/test_survey.py | 66 +++ .../models/activity_logging/activity_log.py | 53 +- 9 files changed, 805 insertions(+), 189 deletions(-) create mode 100644 frontend/src/scenes/surveys/surveyActivityDescriber.test.tsx diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--light.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--light.png index 4ca21748c10e4c4b555653cd305703e490130789..01df2b71a3a80c845f84d22815e68f9739a82644 100644 GIT binary patch delta 84069 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 z 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 CxShuU delta 84103 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 D-7O>F diff --git a/frontend/src/scenes/feature-flags/activityDescriptions.tsx b/frontend/src/scenes/feature-flags/activityDescriptions.tsx index 9027d17cf07a2..93fec0692b0c3 100644 --- a/frontend/src/scenes/feature-flags/activityDescriptions.tsx +++ b/frontend/src/scenes/feature-flags/activityDescriptions.tsx @@ -260,6 +260,22 @@ export function flagActivityDescriber(logItem: ActivityLogItem, asNotification?: return { description: null } } + if (logItem.activity === 'created') { + return { + description: ( + created a new feature flag:]} + prefix={ + <> + {userNameForLogItem(logItem)} + + } + suffix={<> {nameOrLinkToFlag(logItem?.item_id, logItem?.detail.name)}} + /> + ), + } + } + if (logItem.activity == 'updated') { let changes: Description[] = [] let changeSuffix: Description = ( diff --git a/frontend/src/scenes/surveys/surveyActivityDescriber.test.tsx b/frontend/src/scenes/surveys/surveyActivityDescriber.test.tsx new file mode 100644 index 0000000000000..cc9dca12c7a6c --- /dev/null +++ b/frontend/src/scenes/surveys/surveyActivityDescriber.test.tsx @@ -0,0 +1,262 @@ +import { render } from '@testing-library/react' + +import { + LinkSurveyQuestion, + MultipleSurveyQuestion, + RatingSurveyQuestion, + SurveyQuestion, + SurveyQuestionBranchingType, + SurveyQuestionType, +} from '~/types' + +import { + describeBranchingChanges, + describeCommonChanges, + describeFieldChange, + describeLinkChanges, + describeMultipleChoiceChanges, + describeQuestionChanges, + describeRatingChanges, +} from './surveyActivityDescriber' + +const getTextContent = (jsxElement: JSX.Element): string => { + const { container } = render(jsxElement) + return container.textContent || '' +} + +describe('describeFieldChange', () => { + test('sets field with unit', () => { + const result = describeFieldChange('wait period', null, 30, 'days') + expect(getTextContent(result)).toBe('set wait period to 30 days') + }) + + test('removes field with unit', () => { + const result = describeFieldChange('wait period', 30, null, 'days') + expect(getTextContent(result)).toBe('removed wait period (was 30 days)') + }) + + test('changes field with unit', () => { + const result = describeFieldChange('wait period', 30, 60, 'days') + expect(getTextContent(result)).toBe('changed wait period from 30 days to 60 days') + }) + + test('sets field without unit', () => { + const result = describeFieldChange('response limit', null, 100) + expect(getTextContent(result)).toBe('set response limit to 100') + }) + + test('removes field without unit', () => { + const result = describeFieldChange('response limit', 100, null) + expect(getTextContent(result)).toBe('removed response limit (was 100)') + }) + + test('changes field without unit', () => { + const result = describeFieldChange('response limit', 100, 200) + expect(getTextContent(result)).toBe('changed response limit from 100 to 200') + }) + + test('handles undefined before value', () => { + const result = describeFieldChange('iteration count', undefined, 5) + expect(getTextContent(result)).toBe('set iteration count to 5') + }) + + test('handles undefined after value', () => { + const result = describeFieldChange('iteration count', 5, undefined) + expect(getTextContent(result)).toBe('removed iteration count (was 5)') + }) + + test('handles empty string before value', () => { + const result = describeFieldChange('survey title', '', 'New Title') + expect(getTextContent(result)).toBe('set survey title to New Title') + }) + + test('handles empty string after value', () => { + const result = describeFieldChange('survey title', 'Old Title', '') + expect(getTextContent(result)).toBe('removed survey title (was Old Title)') + }) + + test('handles both values as empty strings', () => { + const result = describeFieldChange('survey title', '', '') + expect(getTextContent(result)).toBe('') + }) + + test('handles before and after as identical', () => { + const result = describeFieldChange('response limit', 100, 100) + expect(getTextContent(result)).toBe('') + }) + + test('handles string values with unit', () => { + const result = describeFieldChange('response time', 'fast', 'slow', 'seconds') + expect(getTextContent(result)).toBe('changed response time from fast seconds to slow seconds') + }) + + test('handles boolean values', () => { + const result = describeFieldChange('is active', false, true) + expect(getTextContent(result)).toBe('changed is active from false to true') + }) + + test('handles null values', () => { + const result = describeFieldChange('response limit', null, null) + expect(getTextContent(result)).toBe('') + }) +}) + +describe('describeCommonChanges', () => { + const before: SurveyQuestion = { + question: 'What is your favorite color?', + description: 'Choose a color', + type: SurveyQuestionType.SingleChoice, + optional: false, + buttonText: 'Next', + choices: ['Red', 'Blue', 'Green'], + } + const after: SurveyQuestion = { + ...before, + question: 'What is your favorite animal?', + description: 'Choose an animal', + optional: true, + buttonText: 'Continue', + } + + test('describes common changes', () => { + const changes = describeCommonChanges(before, after) + expect(changes).toHaveLength(4) + expect(getTextContent(changes[0])).toBe( + 'changed question text from "What is your favorite color?" to "What is your favorite animal?"' + ) + expect(getTextContent(changes[1])).toBe( + 'changed the question description from "Choose a color" to "Choose an animal"' + ) + expect(getTextContent(changes[2])).toBe('made question optional') + expect(getTextContent(changes[3])).toBe('changed button text from "Next" to "Continue"') + }) +}) + +describe('describeLinkChanges', () => { + const before: LinkSurveyQuestion = { + question: 'Visit our website', + type: SurveyQuestionType.Link, + link: 'http://example.com', + } + const after: LinkSurveyQuestion = { + ...before, + link: 'http://example.org', + } + + test('describes link changes', () => { + const changes = describeLinkChanges([before, after]) + expect(changes).toHaveLength(1) + expect(getTextContent(changes[0])).toBe('updated link from http://example.com to http://example.org') + }) +}) + +describe('describeRatingChanges', () => { + const before: RatingSurveyQuestion = { + question: 'Rate our service', + type: SurveyQuestionType.Rating, + display: 'emoji', + scale: 5, + lowerBoundLabel: 'Poor', + upperBoundLabel: 'Excellent', + } + const after: RatingSurveyQuestion = { + ...before, + display: 'number', + scale: 10, + lowerBoundLabel: 'Bad', + upperBoundLabel: 'Good', + } + + test('describes rating changes', () => { + const changes = describeRatingChanges([before, after]) + expect(changes).toHaveLength(3) + expect(getTextContent(changes[0])).toBe('changed rating display from emoji to number') + expect(getTextContent(changes[1])).toBe('changed rating scale from 5 to 10') + expect(getTextContent(changes[2])).toBe('updated rating labels from "Poor"-"Excellent" to "Bad"-"Good"') + }) +}) + +describe('describeMultipleChoiceChanges', () => { + const before: MultipleSurveyQuestion = { + question: 'Select your hobbies', + type: SurveyQuestionType.MultipleChoice, + choices: ['Reading', 'Traveling', 'Cooking'], + shuffleOptions: false, + hasOpenChoice: false, + } + const after: MultipleSurveyQuestion = { + ...before, + choices: ['Reading', 'Cooking', 'Gaming'], + shuffleOptions: true, + hasOpenChoice: true, + } + + test('describes multiple choice changes', () => { + const changes = describeMultipleChoiceChanges([before, after]) + expect(changes).toHaveLength(4) + expect(getTextContent(changes[0])).toBe('added choices: Gaming') + expect(getTextContent(changes[1])).toBe('removed choices: Traveling') + expect(getTextContent(changes[2])).toBe('enabled option shuffling') + expect(getTextContent(changes[3])).toBe('added open choice option') + }) +}) + +describe('describeBranchingChanges', () => { + const before: MultipleSurveyQuestion = { + question: 'Do you like ice cream?', + type: SurveyQuestionType.SingleChoice, + choices: ['Yes', 'No'], + branching: { + type: SurveyQuestionBranchingType.NextQuestion, + }, + } + const after: MultipleSurveyQuestion = { + ...before, + branching: { + type: SurveyQuestionBranchingType.End, + }, + } + + test('describes branching changes', () => { + const changes = describeBranchingChanges(before, after) + expect(changes).toHaveLength(1) + expect(getTextContent(changes[0])).toBe('updated branching logic') + }) +}) + +describe('describeQuestionChanges', () => { + const before: MultipleSurveyQuestion = { + question: 'Do you like ice cream?', + type: SurveyQuestionType.SingleChoice, + description: 'Please answer honestly', + optional: false, + buttonText: 'Next', + choices: ['Yes', 'No'], + branching: { + type: SurveyQuestionBranchingType.NextQuestion, + }, + } + const after: MultipleSurveyQuestion = { + question: 'Do you like pizza?', + type: SurveyQuestionType.MultipleChoice, + description: 'Please answer honestly', + optional: true, + buttonText: 'Continue', + choices: ['Yes', 'No', 'Maybe'], + branching: { + type: SurveyQuestionBranchingType.End, + }, + } + test('describes all changes in a question', () => { + const changes = describeQuestionChanges(before, after) + expect(changes).toHaveLength(6) + expect(getTextContent(changes[0])).toBe( + 'changed question text from "Do you like ice cream?" to "Do you like pizza?"' + ) + expect(getTextContent(changes[1])).toBe('made question optional') + expect(getTextContent(changes[2])).toBe('changed button text from "Next" to "Continue"') + expect(getTextContent(changes[3])).toBe('changed question type from single_choice to multiple_choice') + expect(getTextContent(changes[4])).toBe('added choices: Maybe') + expect(getTextContent(changes[5])).toBe('updated branching logic') + }) +}) diff --git a/frontend/src/scenes/surveys/surveyActivityDescriber.tsx b/frontend/src/scenes/surveys/surveyActivityDescriber.tsx index 3e692fcceec7b..4a355ca7b2eb7 100644 --- a/frontend/src/scenes/surveys/surveyActivityDescriber.tsx +++ b/frontend/src/scenes/surveys/surveyActivityDescriber.tsx @@ -9,9 +9,21 @@ import { userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' import { Link } from 'lib/lemon-ui/Link' +import { truncate } from 'lib/utils' import { urls } from 'scenes/urls' +import { match, P } from 'ts-pattern' -import { Survey, SurveyAppearance } from '~/types' +import { + BasicSurveyQuestion, + FeatureFlagBasicType, + FeatureFlagFilters, + LinkSurveyQuestion, + MultipleSurveyQuestion, + RatingSurveyQuestion, + Survey, + SurveyAppearance, + SurveyQuestionType, +} from '~/types' const isEmptyOrUndefined = (value: any): boolean => value === undefined || value === null || value === '' @@ -31,28 +43,92 @@ const surveyActionsMapping: Record< string, (change?: ActivityChange, logItem?: ActivityLogItem) => ChangeMapping | null > = { - name: function onName() { + name: function onName(change) { return { - description: [<>changed the name], + description: [ + <> + changed the name from "{change?.before as string}" to{' '} + "{change?.after as string}" + , + ], } }, - description: function onDescription() { + description: function onDescription(change) { return { - description: [<>updated the description], + description: [ + <> + updated the description from {formatDescription(change?.before as string | null | undefined)} to{' '} + {formatDescription(change?.after as string | null | undefined)} + , + ], } }, type: function onType(change) { return { description: [ <> - changed the type to {change?.after as string} + changed the type from {change?.before as string} to{' '} + {change?.after as string} , ], } }, - questions: function onQuestions() { + questions: function onQuestions(change?: ActivityChange): ChangeMapping | null { + if (!change) { + return null + } + + const beforeQuestions = change.before as Survey['questions'] + const afterQuestions = change.after as Survey['questions'] + + if (beforeQuestions.length !== afterQuestions.length) { + return { + description: [ + <> + changed the number of questions from {beforeQuestions.length} to{' '} + {afterQuestions.length} + , + ], + } + } + + const questionChanges = afterQuestions + .map((afterQ, index) => { + const beforeQ = beforeQuestions[index] + if (JSON.stringify(beforeQ) !== JSON.stringify(afterQ)) { + return { + index: index + 1, + changes: describeQuestionChanges(beforeQ, afterQ), + } + } + return null + }) + .filter((item): item is { index: number; changes: JSX.Element[] } => item !== null) + + if (questionChanges.length === 0) { + return { + description: [<>No changes to questions], + } + } + return { - description: [<>updated the questions], + description: [ + <> + updated {questionChanges.length} question{questionChanges.length !== 1 ? 's' : ''}: +
    + {questionChanges.map(({ index, changes }) => ( +
  • + Question {index}: +
      + {changes.map((changeItem, changeIndex) => ( +
    • {changeItem}
    • + ))} +
    +
  • + ))} +
+ , + ], } }, archived: function onArchived(change) { @@ -106,35 +182,12 @@ const surveyActionsMapping: Record< widgetColor: 'widget color', } - const appearanceFields = Object.keys(fieldNameMapping) as (keyof SurveyAppearance)[] - - appearanceFields.forEach((field) => { - const before = beforeAppearance?.[field] - const after = afterAppearance?.[field] - const readableFieldName = fieldNameMapping[field] - - if (!isEmptyOrUndefined(before) || !isEmptyOrUndefined(after)) { - if (isEmptyOrUndefined(before) && !isEmptyOrUndefined(after)) { - changes.push( - <> - set {readableFieldName} to {String(after)} - - ) - } else if (!isEmptyOrUndefined(before) && isEmptyOrUndefined(after)) { - changes.push( - <> - removed {readableFieldName} (was {String(before)}) - - ) - } else if (before !== after) { - changes.push( - <> - changed {readableFieldName} from{' '} - {!isEmptyOrUndefined(before) ? {String(before)} : unset} to{' '} - {String(after)} - - ) - } + Object.entries(fieldNameMapping).forEach(([field, readableFieldName]) => { + const before = beforeAppearance?.[field as keyof SurveyAppearance] + const after = afterAppearance?.[field as keyof SurveyAppearance] + const changeDescription = describeFieldChange(readableFieldName, before, after) + if (changeDescription.props.children) { + changes.push(changeDescription) } }) @@ -149,161 +202,125 @@ const surveyActionsMapping: Record< const afterConditions = change?.after as Survey['conditions'] const changes: JSX.Element[] = [] - if (!isEmptyOrUndefined(beforeConditions?.url) || !isEmptyOrUndefined(afterConditions?.url)) { - if (isEmptyOrUndefined(beforeConditions?.url) && !isEmptyOrUndefined(afterConditions?.url)) { - changes.push( - <> - set URL condition to {afterConditions?.url} - - ) - } else if (!isEmptyOrUndefined(beforeConditions?.url) && isEmptyOrUndefined(afterConditions?.url)) { - changes.push( - <> - removed URL condition (was {beforeConditions?.url}) - - ) - } else if (beforeConditions?.url !== afterConditions?.url) { - changes.push( - <> - changed URL condition from{' '} - {!isEmptyOrUndefined(beforeConditions?.url) ? ( - {beforeConditions?.url} - ) : ( - unset - )}{' '} - to {afterConditions?.url} - - ) - } + changes.push( + describeFieldChange('URL condition', beforeConditions?.url, afterConditions?.url), + describeFieldChange('selector', beforeConditions?.selector, afterConditions?.selector), + describeFieldChange( + 'wait period', + beforeConditions?.seenSurveyWaitPeriodInDays, + afterConditions?.seenSurveyWaitPeriodInDays, + 'days' + ), + describeFieldChange('URL match type', beforeConditions?.urlMatchType, afterConditions?.urlMatchType) + ) + + // Use JSON.stringify for deep comparison of objects + if (JSON.stringify(beforeConditions?.events) !== JSON.stringify(afterConditions?.events)) { + changes.push(<>modified event conditions) } - if (!isEmptyOrUndefined(beforeConditions?.selector) || !isEmptyOrUndefined(afterConditions?.selector)) { - if (isEmptyOrUndefined(beforeConditions?.selector) && !isEmptyOrUndefined(afterConditions?.selector)) { - changes.push( - <> - set selector to {afterConditions?.selector} - - ) - } else if ( - !isEmptyOrUndefined(beforeConditions?.selector) && - isEmptyOrUndefined(afterConditions?.selector) - ) { - changes.push( - <> - removed selector (was {beforeConditions?.selector}) - - ) - } else if (beforeConditions?.selector !== afterConditions?.selector) { - changes.push( - <> - changed selector from{' '} - {!isEmptyOrUndefined(beforeConditions?.selector) ? ( - {beforeConditions?.selector} - ) : ( - unset - )}{' '} - to {afterConditions?.selector} - - ) - } + return changes.filter((change) => change.props.children).length > 0 + ? { + description: changes.filter((change) => change.props.children), + } + : null + }, + responses_limit: function onResponsesLimit(change) { + return { + description: [describeFieldChange('response limit', change?.before, change?.after, 'responses')].filter( + (desc) => desc.props.children + ), + } + }, + iteration_count: function onIterationCount(change) { + return { + description: [describeFieldChange('iteration count', change?.before, change?.after)].filter( + (desc) => desc.props.children + ), + } + }, + iteration_frequency_days: function onIterationFrequency(change) { + return { + description: [describeFieldChange('iteration frequency', change?.before, change?.after, 'days')].filter( + (desc) => desc.props.children + ), } + }, + targeting_flag: function onTargetingFlag(change) { + const beforeFlag = change?.before as FeatureFlagBasicType | null + const afterFlag = change?.after as FeatureFlagBasicType | null + const changes: Description[] = [] - if ( - !isEmptyOrUndefined(beforeConditions?.seenSurveyWaitPeriodInDays) || - !isEmptyOrUndefined(afterConditions?.seenSurveyWaitPeriodInDays) - ) { - if ( - isEmptyOrUndefined(beforeConditions?.seenSurveyWaitPeriodInDays) && - !isEmptyOrUndefined(afterConditions?.seenSurveyWaitPeriodInDays) - ) { - changes.push( - <> - set wait period to {afterConditions?.seenSurveyWaitPeriodInDays} days - - ) - } else if ( - !isEmptyOrUndefined(beforeConditions?.seenSurveyWaitPeriodInDays) && - isEmptyOrUndefined(afterConditions?.seenSurveyWaitPeriodInDays) - ) { + if (!beforeFlag && afterFlag) { + changes.push( + <> + added a targeting flag with key {afterFlag.key} + + ) + if (afterFlag.filters?.groups?.length > 0) { changes.push( <> - removed wait period (was {beforeConditions?.seenSurveyWaitPeriodInDays} days) + set targeting conditions to: +
{JSON.stringify(afterFlag.filters, null, 2)}
) - } else if (beforeConditions?.seenSurveyWaitPeriodInDays !== afterConditions?.seenSurveyWaitPeriodInDays) { + } + } else if (beforeFlag && !afterFlag) { + changes.push( + <> + removed the targeting flag with key {beforeFlag.key} + + ) + } else if (beforeFlag && afterFlag) { + if (beforeFlag.key !== afterFlag.key) { changes.push( <> - changed wait period from{' '} - {!isEmptyOrUndefined(beforeConditions?.seenSurveyWaitPeriodInDays) ? ( - {beforeConditions?.seenSurveyWaitPeriodInDays} days - ) : ( - unset - )}{' '} - to {afterConditions?.seenSurveyWaitPeriodInDays} days + changed targeting flag key from {beforeFlag.key} to{' '} + {afterFlag.key} ) } } - if (!isEmptyOrUndefined(beforeConditions?.urlMatchType) || !isEmptyOrUndefined(afterConditions?.urlMatchType)) { - if (beforeConditions?.urlMatchType !== afterConditions?.urlMatchType) { + return changes.length > 0 + ? { + description: changes, + } + : null + }, + targeting_flag_filters: function onTargetingFlagFilter(change) { + const beforeFlag = change?.before as FeatureFlagFilters | null + const afterFlag = change?.after as FeatureFlagFilters | null + const changes: Description[] = [] + + if (!beforeFlag && afterFlag) { + changes.push( + <> + added targeting flag filter with the following conditions: +
{JSON.stringify(afterFlag, null, 2)}
+ + ) + } else if (beforeFlag && !afterFlag) { + changes.push(<>removed targeting flag filter) + } else if (beforeFlag && afterFlag) { + if (JSON.stringify(beforeFlag) !== JSON.stringify(afterFlag)) { changes.push( <> - changed URL match type from{' '} - {!isEmptyOrUndefined(beforeConditions?.urlMatchType) ? ( - {beforeConditions?.urlMatchType} - ) : ( - unset - )}{' '} - to {afterConditions?.urlMatchType} + changed targeting conditions from: +
{JSON.stringify(beforeFlag, null, 2)}
+ to: +
{JSON.stringify(afterFlag, null, 2)}
) } } - // Use JSON.stringify for deep comparison of objects - if (JSON.stringify(beforeConditions?.events) !== JSON.stringify(afterConditions?.events)) { - changes.push(<>modified event conditions) - } - return changes.length > 0 ? { description: changes, } : null }, - responses_limit: function onResponsesLimit(change) { - if (isEmptyOrUndefined(change?.after)) { - return { - description: [<>removed response limit], - } - } - return { - description: [ - <> - set response limit to {change?.after as number} - , - ], - } - }, - iteration_count: function onIterationCount(change) { - return { - description: [ - <> - changed the iteration count to {change?.after as number} - , - ], - } - }, - iteration_frequency_days: function onIterationFrequency(change) { - return { - description: [ - <> - changed the iteration frequency to {change?.after as number} days - , - ], - } - }, } export function surveyActivityDescriber(logItem: ActivityLogItem, asNotification?: boolean): HumanizedChange { @@ -346,7 +363,8 @@ export function surveyActivityDescriber(logItem: ActivityLogItem, asNotification const possibleLogItem = surveyActionsMapping[change.field]?.(change, logItem) if (possibleLogItem?.description) { if (Array.isArray(possibleLogItem.description) && possibleLogItem.description.length > 1) { - // This is for conditions, which may have multiple changes + // This is for the conditions section, which may have multiple changes. + // Probably could be refactored into a separate handler like some of the other fields changes.push( ...possibleLogItem.description.map((desc) => ({ field: 'conditions', @@ -390,17 +408,20 @@ export function surveyActivityDescriber(logItem: ActivityLogItem, asNotification return defaultDescriber(logItem, asNotification, surveyLink) } -function getPreposition(field: string): string { + +export function getPreposition(field: string): string { switch (field) { - case 'name': - case 'description': case 'questions': case 'appearance': case 'type': return 'of' + case 'name': + case 'description': case 'responses_limit': case 'iteration_count': case 'iteration_frequency_days': + case 'targeting_flag_filters': + case 'targeting_flag': return 'for' case 'archived': case 'start_date': @@ -410,3 +431,189 @@ function getPreposition(field: string): string { return 'of' } } + +type SurveyQuestion = BasicSurveyQuestion | LinkSurveyQuestion | RatingSurveyQuestion | MultipleSurveyQuestion + +export function describeQuestionChanges(before: SurveyQuestion, after: SurveyQuestion): JSX.Element[] { + const commonChanges = describeCommonChanges(before, after) + const typeChangeDescription = + before.type !== after.type + ? [ + <> + changed question type from {before.type} to {after.type} + , + ] + : [] + + const specificChanges = match([before, after]) + .with([{ type: SurveyQuestionType.Link }, { type: SurveyQuestionType.Link }], describeLinkChanges) + .with([{ type: SurveyQuestionType.Rating }, { type: SurveyQuestionType.Rating }], describeRatingChanges) + .with( + [ + { type: P.union(SurveyQuestionType.SingleChoice, SurveyQuestionType.MultipleChoice) }, + { type: P.union(SurveyQuestionType.SingleChoice, SurveyQuestionType.MultipleChoice) }, + ], + describeMultipleChoiceChanges + ) + .otherwise(() => []) + + return [...commonChanges, ...typeChangeDescription, ...specificChanges, ...describeBranchingChanges(before, after)] +} + +export function describeCommonChanges(before: SurveyQuestion, after: SurveyQuestion): JSX.Element[] { + const changes: JSX.Element[] = [] + if (before.question !== after.question) { + changes.push( + <> + changed question text from "{before.question}" to "{after.question}" + + ) + } + if (before.description !== after.description) { + changes.push( + <> + changed the question description from {formatDescription(before.description)} to{' '} + {formatDescription(after.description)} + + ) + } + if (before.optional !== after.optional) { + changes.push(<>{after.optional ? 'made question optional' : 'made question required'}) + } + if (before.buttonText !== after.buttonText) { + changes.push( + <> + changed button text from "{before.buttonText}" to "{after.buttonText}" + + ) + } + return changes +} + +export function describeLinkChanges([before, after]: [LinkSurveyQuestion, LinkSurveyQuestion]): JSX.Element[] { + return before.link !== after.link + ? [ + <> + updated link from {before.link} to {after.link} + , + ] + : [] +} + +export function describeRatingChanges([before, after]: [RatingSurveyQuestion, RatingSurveyQuestion]): JSX.Element[] { + const changes: JSX.Element[] = [] + if (before.display !== after.display) { + changes.push( + <> + changed rating display from {before.display} to {after.display} + + ) + } + if (before.scale !== after.scale) { + changes.push( + <> + changed rating scale from {before.scale} to {after.scale} + + ) + } + if (before.lowerBoundLabel !== after.lowerBoundLabel || before.upperBoundLabel !== after.upperBoundLabel) { + changes.push( + <> + updated rating labels from "{before.lowerBoundLabel}"- + "{before.upperBoundLabel}" to "{after.lowerBoundLabel}"- + "{after.upperBoundLabel}" + + ) + } + return changes +} + +export function describeMultipleChoiceChanges([before, after]: [ + MultipleSurveyQuestion, + MultipleSurveyQuestion +]): JSX.Element[] { + const changes: JSX.Element[] = [] + if (JSON.stringify(before.choices) !== JSON.stringify(after.choices)) { + const addedChoices = after.choices.filter((c) => !before.choices.includes(c)) + const removedChoices = before.choices.filter((c) => !after.choices.includes(c)) + if (addedChoices.length > 0) { + changes.push( + <> + added choices: {addedChoices.join(', ')} + + ) + } + if (removedChoices.length > 0) { + changes.push( + <> + removed choices: {removedChoices.join(', ')} + + ) + } + } + if (before.shuffleOptions !== after.shuffleOptions) { + changes.push(<>{after.shuffleOptions ? 'enabled' : 'disabled'} option shuffling) + } + if (before.hasOpenChoice !== after.hasOpenChoice) { + changes.push(<>{after.hasOpenChoice ? 'added' : 'removed'} open choice option) + } + return changes +} + +export function describeBranchingChanges(before: SurveyQuestion, after: SurveyQuestion): JSX.Element[] { + if (JSON.stringify(before.branching) !== JSON.stringify(after.branching)) { + return [<>updated branching logic] + } + return [] +} + +export const formatDescription = (value: string | null | undefined): JSX.Element => { + if (value === undefined || value === null || value === '') { + return unset + } + return "{truncate(value, 50)}" +} + +export function describeFieldChange(fieldName: string, before: T, after: T, unit?: string): JSX.Element { + if (isEmptyOrUndefined(before) && isEmptyOrUndefined(after)) { + return <> + } + if (isEmptyOrUndefined(before) && !isEmptyOrUndefined(after)) { + return ( + <> + set {fieldName} to{' '} + + {String(after)} + {unit ? ` ${unit}` : ''} + + + ) + } else if (!isEmptyOrUndefined(before) && isEmptyOrUndefined(after)) { + return ( + <> + removed {fieldName} (was{' '} + + {String(before)} + {unit ? ` ${unit}` : ''} + + ) + + ) + } else if (before !== after) { + return ( + <> + changed {fieldName} from{' '} + + {String(before)} + {unit ? ` ${unit}` : ''} + {' '} + to{' '} + + {String(after)} + {unit ? ` ${unit}` : ''} + + + ) + } + return <> +} diff --git a/package.json b/package.json index a37209b691262..7f9acf3c7017f 100644 --- a/package.json +++ b/package.json @@ -174,6 +174,7 @@ "sass": "^1.26.2", "tailwind-merge": "^2.2.2", "tailwindcss": "^3.4.0", + "ts-pattern": "4.3", "use-debounce": "^9.0.3", "use-resize-observer": "^8.0.0", "zxcvbn": "^4.4.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a4b2e230c9512..33c3d9122295c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -343,6 +343,9 @@ dependencies: tailwindcss: specifier: ^3.4.0 version: 3.4.0(ts-node@10.9.1) + ts-pattern: + specifier: '4.3' + version: 4.3.0 use-debounce: specifier: ^9.0.3 version: 9.0.3(react@18.2.0) @@ -20998,6 +21001,10 @@ packages: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + /ts-pattern@4.3.0: + resolution: {integrity: sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg==} + dev: false + /tsconfig-paths@3.14.2: resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} dependencies: diff --git a/posthog/api/survey.py b/posthog/api/survey.py index 640ed75aaa3a2..8c18fe6170032 100644 --- a/posthog/api/survey.py +++ b/posthog/api/survey.py @@ -26,7 +26,7 @@ from posthog.models import Action from posthog.constants import AvailableFeature from posthog.exceptions import generate_exception_response -from posthog.models.activity_logging.activity_log import changes_between, load_activity, log_activity, Detail +from posthog.models.activity_logging.activity_log import Change, changes_between, load_activity, log_activity, Detail from posthog.models.activity_logging.activity_page import activity_page_response from posthog.models.feature_flag.feature_flag import FeatureFlag from posthog.models.feedback.survey import Survey @@ -317,8 +317,15 @@ def create(self, validated_data): def update(self, instance: Survey, validated_data): before_update = Survey.objects.get(pk=instance.pk) + changes = [] if validated_data.get("remove_targeting_flag"): if instance.targeting_flag: + # Manually delete the flag and log the change + # The `changes_between` method won't catch this because the flag (and underlying ForeignKey relationship) + # will have been deleted by the time the `changes_between` method is called, so we need to log the change manually + changes.append( + Change(type="Survey", field="targeting_flag", action="deleted", before=instance.targeting_flag) + ) instance.targeting_flag.delete() validated_data["targeting_flag_id"] = None validated_data.pop("remove_targeting_flag") @@ -331,15 +338,34 @@ def update(self, instance: Survey, validated_data): new_filters = validated_data["targeting_flag_filters"] if instance.targeting_flag: existing_targeting_flag = instance.targeting_flag + existing_targeting_flag_filters = existing_targeting_flag.filters serialized_data_filters = { - **existing_targeting_flag.filters, + **existing_targeting_flag_filters, **new_filters, } + # Log the existing filter change + # The `changes_between` method won't catch this because the flag (and underlying ForeignKey relationship) + # will have been deleted by the time the `changes_between` method is called, so we need to log the change manually + changes.append( + Change( + type="Survey", + field="targeting_flag_filters", + action="changed", + before=existing_targeting_flag_filters, + after=new_filters, + ) + ) self._create_or_update_targeting_flag(instance.targeting_flag, serialized_data_filters) else: new_flag = self._create_or_update_targeting_flag( None, new_filters, instance.name, bool(instance.start_date) ) + # Log the new filter change + # The `changes_between` method won't catch this because the flag (and underlying ForeignKey relationship) + # will have been deleted by the time the `changes_between` method is called, so we need to log the change manually + changes.append( + Change(type="Survey", field="targeting_flag_filters", action="created", after=new_filters) + ) validated_data["targeting_flag_id"] = new_flag.id validated_data.pop("targeting_flag_filters") @@ -355,7 +381,7 @@ def update(self, instance: Survey, validated_data): iteration_count = validated_data.get("iteration_count") if instance.current_iteration is not None and instance.current_iteration > iteration_count > 0: raise serializers.ValidationError( - f"Cannot change survey recurrence to {validated_data.get('iteration_count')}, should be at least {instance.current_iteration}" + f"Cannot change survey recurrence to {iteration_count}, should be at least {instance.current_iteration}" ) instance.iteration_count = iteration_count @@ -363,10 +389,15 @@ def update(self, instance: Survey, validated_data): instance = super().update(instance, validated_data) - self._add_user_survey_interacted_filters(instance, end_date) - self._associate_actions(instance, validated_data.get("conditions")) team = Team.objects.get(id=self.context["team_id"]) - changes = changes_between("Survey", previous=before_update, current=instance) + # `changes_between` will not catch changes to the ForeignKey relationships + # so it's useful for any changes to the Survey model itself, but not for the related models + non_foreign_table_relation_changes = changes_between( + "Survey", + previous=before_update, + current=instance, + ) + changes.extend(non_foreign_table_relation_changes) log_activity( organization_id=team.organization_id, team_id=self.context["team_id"], @@ -377,6 +408,9 @@ def update(self, instance: Survey, validated_data): activity="updated", detail=Detail(changes=changes, name=instance.name), ) + + self._add_user_survey_interacted_filters(instance, end_date) + self._associate_actions(instance, validated_data.get("conditions")) return instance def _associate_actions(self, instance: Survey, conditions): diff --git a/posthog/api/test/test_survey.py b/posthog/api/test/test_survey.py index 05b44a62a1414..6fd90dfbfb26c 100644 --- a/posthog/api/test/test_survey.py +++ b/posthog/api/test/test_survey.py @@ -1,10 +1,12 @@ import re from datetime import datetime, timedelta +from typing import Any from unittest.mock import ANY import pytest from django.core.cache import cache from django.test.client import Client + from freezegun.api import freeze_time from posthog.api.survey import nh3_clean_with_allow_list from posthog.models.cohort.cohort import Cohort @@ -1169,6 +1171,70 @@ def test_surveys_opt_in_post_delete(self): self.team.refresh_from_db() assert self.team.surveys_opt_in is False + @freeze_time("2023-05-01 12:00:00") + def test_update_survey_targeting_flag_filters_records_activity(self): + linked_flag = FeatureFlag.objects.create(team=self.team, key="linked-flag", created_by=self.user) + targeting_flag = FeatureFlag.objects.create(team=self.team, key="targeting-flag", created_by=self.user) + internal_targeting_flag = FeatureFlag.objects.create( + team=self.team, key="custom-targeting-flag", created_by=self.user + ) + + survey_with_flags = Survey.objects.create( + team=self.team, + created_by=self.user, + name="Survey 2", + type="popover", + linked_flag=linked_flag, + targeting_flag=targeting_flag, + internal_targeting_flag=internal_targeting_flag, + questions=[{"type": "open", "question": "What's a hedgehog?"}], + ) + + new_filters: dict[str, Any] = { + "targeting_flag_filters": { + "groups": [ + {"variant": None, "properties": [], "rollout_percentage": 69}, + {"variant": None, "properties": [], "rollout_percentage": 75}, + ], + "payloads": {}, + "multivariate": None, + } + } + + response = self.client.patch( + f"/api/projects/{self.team.id}/surveys/{survey_with_flags.id}/", + data={"targeting_flag_filters": new_filters}, + ) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + expected_activity_log = [ + { + "user": {"first_name": self.user.first_name, "email": self.user.email}, + "activity": "updated", + "scope": "Survey", + "item_id": str(survey_with_flags.id), + "detail": { + "changes": [ + { + "type": "Survey", + "action": "changed", + "field": "targeting_flag_filters", + "before": {}, + "after": new_filters, + }, + ], + "trigger": None, + "name": "Survey 2", + "short_id": None, + "type": None, + }, + "created_at": "2023-05-01T12:00:00Z", + } + ] + + self._assert_survey_activity(expected_activity_log) + @freeze_time("2023-05-01 12:00:00") def test_create_survey_records_activity(self): response = self.client.post( diff --git a/posthog/models/activity_logging/activity_log.py b/posthog/models/activity_logging/activity_log.py index 377ddaff7dcef..1fb332e2e9e5f 100644 --- a/posthog/models/activity_logging/activity_log.py +++ b/posthog/models/activity_logging/activity_log.py @@ -6,12 +6,15 @@ import structlog from django.core.paginator import Paginator +from django.core.exceptions import ObjectDoesNotExist + from django.db import models from django.utils import timezone from django.conf import settings from posthog.models.dashboard import Dashboard from posthog.models.dashboard_tile import DashboardTile +from posthog.models.feature_flag.feature_flag import FeatureFlag from posthog.models.user import User from posthog.models.utils import UUIDT, UUIDModel @@ -84,6 +87,16 @@ def default(self, obj): if isinstance(obj, Decimal): # more precision than we'll need but avoids rounding too unnecessarily return format(obj, ".6f").rstrip("0").rstrip(".") + if isinstance(obj, FeatureFlag): + return { + "id": obj.id, + "key": obj.key, + "name": obj.name, + "filters": obj.filters, + "team_id": obj.team_id, + "deleted": obj.deleted, + "active": obj.active, + } return json.JSONEncoder.default(self, obj) @@ -206,9 +219,6 @@ class Meta: "property_type_format", ], "Team": ["uuid", "updated_at", "api_token", "created_at", "id"], - # TODO: Don't try and track changes to survey targeting, we will support - # this with https://github.com/PostHog/posthog/issues/23725 - "Survey": ["targeting_flag", "linked_flag", "internal_targeting_flag"], } @@ -236,18 +246,36 @@ def _read_through_relation(relation: models.Manager) -> list[Union[dict, str]]: return described_models +def safely_get_field_value(instance: models.Model | None, field: str): + """Helper function to get the value of a field, handling related objects and exceptions.""" + if instance is None: + return None + try: + value = getattr(instance, field, None) + if isinstance(value, models.Manager): + value = _read_through_relation(value) + # If the field is a related field and the related object has been deleted, this will raise an ObjectDoesNotExist + # exception. We catch this exception and return None, since the related object has been deleted, and we + # don't need any additional information about it other than the fact that it was deleted. + except ObjectDoesNotExist: + value = None + return value + + def changes_between( model_type: ActivityScope, previous: Optional[models.Model], current: Optional[models.Model], ) -> list[Change]: """ - Identifies changes between two models by comparing fields + Identifies changes between two models by comparing fields. + Note that this method only really works for models that have a single instance + and not for models that have a many-to-many relationship with another model. """ changes: list[Change] = [] if previous is None and current is None: - # there are no changes between two things that don't exist + # There are no changes between two things that don't exist. return changes if previous is not None: @@ -256,23 +284,18 @@ def changes_between( filtered_fields = [f.name for f in fields if f.name not in excluded_fields] for field in filtered_fields: - left = getattr(previous, field, None) - if isinstance(left, models.Manager): - left = _read_through_relation(left) - - right = getattr(current, field, None) - if isinstance(right, models.Manager): - right = _read_through_relation(right) + left = safely_get_field_value(previous, field) + right = safely_get_field_value(current, field) if field == "tagged_items": - field = "tags" # or the UI needs to be coupled to this internal backend naming + field = "tags" # Or the UI needs to be coupled to this internal backend naming. if field == "dashboards" and "dashboard_tiles" in filtered_fields: - # only process dashboard_tiles when it is present. It supersedes dashboards + # Only process dashboard_tiles when it is present. It supersedes dashboards. continue if model_type == "Insight" and field == "dashboard_tiles": - # the api exposes this as dashboards and that's what the activity describers expect + # The API exposes this as dashboards and that's what the activity describers expect. field = "dashboards" if left is None and right is not None: