From ca20e08cb529cb6bdbc756d115599b27d70de634 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Wed, 24 Aug 2022 14:20:56 +0200 Subject: [PATCH 01/10] feat(data-management): add custom events list --- .../TaxonomicFilter/taxonomicFilterLogic.tsx | 6 +++--- .../data-management/events/EventDefinitionsTable.tsx | 12 ++++++++++++ frontend/src/types.ts | 4 +++- posthog/api/event_definition.py | 1 + posthog/api/test/test_event_definition.py | 12 ++++++++++++ posthog/api/utils.py | 11 ++++++++++- posthog/constants.py | 4 +++- 7 files changed, 44 insertions(+), 6 deletions(-) diff --git a/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.tsx b/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.tsx index 9cacd405d5a74..9fee092a8855c 100644 --- a/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.tsx +++ b/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.tsx @@ -28,7 +28,6 @@ import { } from '~/types' import { cohortsModel } from '~/models/cohortsModel' import { actionsModel } from '~/models/actionsModel' -import { eventDefinitionsModel } from '~/models/eventDefinitionsModel' import { teamLogic } from 'scenes/teamLogic' import { groupsModel } from '~/models/groupsModel' import { groupPropertiesModel } from '~/models/groupPropertiesModel' @@ -325,8 +324,9 @@ export const taxonomicFilterLogic = kea({ name: 'Custom Events', searchPlaceholder: 'custom events', type: TaxonomicFilterGroupType.CustomEvents, - logic: eventDefinitionsModel, - value: 'customEvents', + endpoint: combineUrl(`api/projects/${teamId}/event_definitions`, { + event_type: CombinedEventType.EventCustom, + }).url, getName: (eventDefinition: EventDefinition) => eventDefinition.name, getValue: (eventDefinition: EventDefinition) => eventDefinition.name, ...eventTaxonomicGroupProps, diff --git a/frontend/src/scenes/data-management/events/EventDefinitionsTable.tsx b/frontend/src/scenes/data-management/events/EventDefinitionsTable.tsx index b3a6a7e1bc176..3306533921a63 100644 --- a/frontend/src/scenes/data-management/events/EventDefinitionsTable.tsx +++ b/frontend/src/scenes/data-management/events/EventDefinitionsTable.tsx @@ -41,6 +41,18 @@ const eventTypeOptions: LemonSelectOptions = [ icon: , 'data-attr': 'event-type-option-event', }, + { + value: CombinedEventType.EventCustom, + label: 'Events / Custom', + icon: , + 'data-attr': 'event-type-option-event-custom', + }, + { + value: CombinedEventType.EventPostHog, + label: 'Events / PostHog', + icon: , + 'data-attr': 'event-type-option-event-posthog', + }, ] export const scene: SceneExport = { diff --git a/frontend/src/types.ts b/frontend/src/types.ts index 7cde26e6e813d..4148660e97dd5 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -1964,8 +1964,10 @@ export type CombinedEvent = EventDefinition | ActionType export enum CombinedEventType { All = 'all', - Event = 'event', ActionEvent = 'action_event', + Event = 'event', + EventCustom = 'event_custom', + EventPostHog = 'event_posthog', } export interface IntegrationType { diff --git a/posthog/api/event_definition.py b/posthog/api/event_definition.py index eb847f593121f..64d46c8921b2d 100644 --- a/posthog/api/event_definition.py +++ b/posthog/api/event_definition.py @@ -77,6 +77,7 @@ def get_queryset(self): params = { "team_id": self.team_id, + "starts_with_dollar": "$%", **search_kwargs, } diff --git a/posthog/api/test/test_event_definition.py b/posthog/api/test/test_event_definition.py index efa41de9a3749..ace88822062f5 100644 --- a/posthog/api/test/test_event_definition.py +++ b/posthog/api/test/test_event_definition.py @@ -177,6 +177,18 @@ def test_event_type_all(self): self.assertEqual(response.json()["results"][0]["action_id"], action.id) self.assertEqual(response.json()["results"][0]["name"], action.name) + def test_event_type_event_custom(self): + response = self.client.get("/api/projects/@current/event_definitions/?event_type=event_custom") + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.json()["count"], 5) + self.assertEqual(response.json()["results"][0]["name"], "installed_app") + + def test_event_type_event_posthog(self): + response = self.client.get("/api/projects/@current/event_definitions/?event_type=event_posthog") + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.json()["count"], 1) + self.assertEqual(response.json()["results"][0]["name"], "$pageview") + @dataclasses.dataclass class EventData: diff --git a/posthog/api/utils.py b/posthog/api/utils.py index db6d987e50c28..d6e5c41296c51 100644 --- a/posthog/api/utils.py +++ b/posthog/api/utils.py @@ -361,7 +361,11 @@ def select_event_definitions(fields: str): """ # Only return event definitions - if event_type == CombinedEventType.EVENT: + if ( + event_type == CombinedEventType.EVENT + or event_type == CombinedEventType.EVENT_CUSTOM + or event_type == CombinedEventType.EVENT_POSTHOG + ): raw_event_definition_fields = ",".join(event_definition_fields) ordering = ( "ORDER BY last_seen_at DESC NULLS LAST, query_usage_30_day DESC NULLS LAST, name ASC" @@ -369,6 +373,11 @@ def select_event_definitions(fields: str): else "ORDER BY name ASC" ) + if event_type == CombinedEventType.EVENT_CUSTOM: + shared_conditions += " AND posthog_eventdefinition.name NOT LIKE %(starts_with_dollar)s" + if event_type == CombinedEventType.EVENT_POSTHOG: + shared_conditions += " AND posthog_eventdefinition.name LIKE %(starts_with_dollar)s" + return ( f""" {select_ee_event_definitions(raw_event_definition_fields)} diff --git a/posthog/constants.py b/posthog/constants.py index b97d1acd4c804..2ab986e39b77e 100644 --- a/posthog/constants.py +++ b/posthog/constants.py @@ -260,5 +260,7 @@ class BreakdownAttributionType(str, Enum): class CombinedEventType(str, Enum): # Mimics CombinedEventType in frontend/src/types.ts ALL = "all" - EVENT = "event" ACTION_EVENT = "action_event" + EVENT = "event" + EVENT_POSTHOG = "event_posthog" + EVENT_CUSTOM = "event_custom" From 82f577a6db1820c740ab5a234e5016c292dfe180 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Wed, 24 Aug 2022 14:29:15 +0200 Subject: [PATCH 02/10] remove dead code --- frontend/src/models/eventDefinitionsModel.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/frontend/src/models/eventDefinitionsModel.ts b/frontend/src/models/eventDefinitionsModel.ts index 9537c5d169752..f517b6f612ab0 100644 --- a/frontend/src/models/eventDefinitionsModel.ts +++ b/frontend/src/models/eventDefinitionsModel.ts @@ -81,10 +81,5 @@ export const eventDefinitionsModel = kea({ (s) => [s.eventDefinitions], (eventDefinitions): string[] => eventDefinitions.map((definition) => definition.name), ], - customEvents: [ - (s) => [s.eventDefinitions], - (eventDefinitions): EventDefinition[] => - eventDefinitions.filter((definition) => !definition.name.startsWith('$')), - ], }, }) From 3572fa68fd8b6631a2a2829c7158e6135aee274f Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Wed, 24 Aug 2022 15:34:54 +0200 Subject: [PATCH 03/10] fix test --- posthog/api/test/test_event_definition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/posthog/api/test/test_event_definition.py b/posthog/api/test/test_event_definition.py index ace88822062f5..a81a337b664cb 100644 --- a/posthog/api/test/test_event_definition.py +++ b/posthog/api/test/test_event_definition.py @@ -181,7 +181,7 @@ def test_event_type_event_custom(self): response = self.client.get("/api/projects/@current/event_definitions/?event_type=event_custom") self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.json()["count"], 5) - self.assertEqual(response.json()["results"][0]["name"], "installed_app") + self.assertEqual(response.json()["results"][0]["name"], "entered_free_trial") def test_event_type_event_posthog(self): response = self.client.get("/api/projects/@current/event_definitions/?event_type=event_posthog") From 8f7443f1a68d1e1dee7d92b1a81e23c8ddaf3d8f Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Wed, 24 Aug 2022 15:41:49 +0200 Subject: [PATCH 04/10] assert what matters --- posthog/api/test/test_event_definition.py | 1 - 1 file changed, 1 deletion(-) diff --git a/posthog/api/test/test_event_definition.py b/posthog/api/test/test_event_definition.py index a81a337b664cb..c480955f00f2f 100644 --- a/posthog/api/test/test_event_definition.py +++ b/posthog/api/test/test_event_definition.py @@ -181,7 +181,6 @@ def test_event_type_event_custom(self): response = self.client.get("/api/projects/@current/event_definitions/?event_type=event_custom") self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.json()["count"], 5) - self.assertEqual(response.json()["results"][0]["name"], "entered_free_trial") def test_event_type_event_posthog(self): response = self.client.get("/api/projects/@current/event_definitions/?event_type=event_posthog") From 2bd19f80af9fa467fcbf8d415b986710b60fcf53 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Wed, 24 Aug 2022 15:43:08 +0200 Subject: [PATCH 05/10] this seems flakey, even locally, though the interface shows the right data locally... testing a timeout --- cypress/e2e/events.js | 1 + 1 file changed, 1 insertion(+) diff --git a/cypress/e2e/events.js b/cypress/e2e/events.js index 8df91acd73f99..714c0e6de9fc5 100644 --- a/cypress/e2e/events.js +++ b/cypress/e2e/events.js @@ -78,6 +78,7 @@ describe('Events', () => { it('separates feature flag properties into their own tab', () => { cy.get('[data-attr=new-prop-filter-EventsTable]').click() cy.get('[data-attr="taxonomic-tab-event_feature_flags"]').should('contain.text', 'Feature flags: 2').click() + cy.wait(200) cy.get('.taxonomic-list-row').should('have.length', 2) }) From 85835c3a2aae881066a22819d64e6c16e6300593 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Wed, 24 Aug 2022 16:00:30 +0200 Subject: [PATCH 06/10] remove the need to double check $event === $event from the db --- frontend/src/models/eventDefinitionsModel.ts | 5 +---- .../ActionFilterRow/ActionFilterRow.tsx | 15 +++++++++------ .../filters/ActionFilter/entityFilterLogic.ts | 15 --------------- 3 files changed, 10 insertions(+), 25 deletions(-) diff --git a/frontend/src/models/eventDefinitionsModel.ts b/frontend/src/models/eventDefinitionsModel.ts index f517b6f612ab0..95af3c9e9f9c0 100644 --- a/frontend/src/models/eventDefinitionsModel.ts +++ b/frontend/src/models/eventDefinitionsModel.ts @@ -77,9 +77,6 @@ export const eventDefinitionsModel = kea({ (eventStorage, eventStorageLoading): boolean => !eventStorageLoading && !eventStorage.next, ], eventDefinitions: [(s) => [s.eventStorage], (eventStorage): EventDefinition[] => eventStorage.results], - eventNames: [ - (s) => [s.eventDefinitions], - (eventDefinitions): string[] => eventDefinitions.map((definition) => definition.name), - ], + eventNames: [(s) => [s.eventDefinitions], (def): string[] => def.map(({ name }) => name)], }, }) diff --git a/frontend/src/scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow.tsx b/frontend/src/scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow.tsx index a9355d0a778df..e5a2fc60ffeae 100644 --- a/frontend/src/scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow.tsx +++ b/frontend/src/scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow.tsx @@ -12,7 +12,7 @@ import { } from '~/types' import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { DownOutlined } from '@ant-design/icons' -import { BareEntity, entityFilterLogic } from '../entityFilterLogic' +import { entityFilterLogic } from '../entityFilterLogic' import { getEventNamesForAction } from 'lib/utils' import { SeriesGlyph, SeriesLetter } from 'lib/components/SeriesGlyph' import './ActionFilterRow.scss' @@ -109,7 +109,7 @@ export function ActionFilterRow({ readOnly = false, renderRow, }: ActionFilterRowProps): JSX.Element { - const { selectedFilter, entities, entityFilterVisible } = useValues(logic) + const { selectedFilter, entityFilterVisible } = useValues(logic) const { updateFilter, selectFilter, @@ -124,7 +124,7 @@ export function ActionFilterRow({ const propertyFiltersVisible = typeof filter.order === 'number' ? entityFilterVisible[filter.order] : false - let entity: BareEntity, name: string | null | undefined, value: PropertyFilterValue + let name: string | null | undefined, value: PropertyFilterValue const { math, math_property: mathProperty, math_group_type_index: mathGroupTypeIndex } = filter const onClose = (): void => { @@ -161,10 +161,13 @@ export function ActionFilterRow({ if (filter.type === EntityTypes.NEW_ENTITY) { name = null value = null + } else if (filter.type === EntityTypes.ACTIONS) { + const action = actions.find((action) => action.id === filter.id) + name = action?.name || filter.name + value = action?.id || filter.id } else { - entity = (entities[filter.type] as BareEntity[])?.filter((action) => action.id === filter.id)[0] || {} - name = entity.name || filter.name - value = entity.id || filter.id + name = filter.name || String(filter.id) + value = filter.name || filter.id } const orLabel =
OR
diff --git a/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.ts b/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.ts index 28d33cf4f61f6..a3f727829bb58 100644 --- a/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.ts +++ b/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.ts @@ -1,8 +1,6 @@ import { kea } from 'kea' -import { actionsModel } from '~/models/actionsModel' import { EntityTypes, FilterType, Entity, EntityType, ActionFilter, EntityFilter, AnyPropertyFilter } from '~/types' import type { entityFilterLogicType } from './entityFilterLogicType' -import { eventDefinitionsModel } from '~/models/eventDefinitionsModel' import { eventUsageLogic, GraphSeriesAddedSource } from 'lib/utils/eventUsageLogic' import { convertPropertyGroupToProperties } from 'lib/utils' @@ -56,7 +54,6 @@ export const entityFilterLogic = kea({ path: (key) => ['scenes', 'insights', 'ActionFilter', 'entityFilterLogic', key], connect: { logic: [eventUsageLogic], - values: [actionsModel, ['actions']], }, actions: () => ({ selectFilter: (filter: EntityFilter | ActionFilter | null) => ({ filter }), @@ -142,18 +139,6 @@ export const entityFilterLogic = kea({ }), selectors: { - entities: [ - (s) => [eventDefinitionsModel.selectors.eventNames, s.actions], - ( - events, - actions - ): { - [x: string]: ActionFilter[] | BareEntity[] - } => ({ - [EntityTypes.ACTIONS]: actions.map((action) => ({ ...action, name: action.name || '' })), - [EntityTypes.EVENTS]: events.map((event) => ({ id: event, name: event })), - }), - ], filters: [(s) => [s.localFilters], (localFilters): FilterType => toFilters(localFilters)], }, From 7c3382aa1ca8e45c2b8bb84e0a166038bcd2b8c0 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Wed, 24 Aug 2022 16:08:39 +0200 Subject: [PATCH 07/10] remove eventDefinitionsModel --- .../definitionPopupLogic.test.ts | 6 +- .../DefinitionPopup/definitionPopupLogic.ts | 4 - frontend/src/models/eventDefinitionsModel.ts | 82 ------------------- frontend/src/models/index.ts | 2 - .../definition/definitionEditLogic.test.ts | 2 - .../definition/definitionEditLogic.ts | 5 -- .../definition/definitionLogic.ts | 6 +- .../insights/EmptyStates/timeout-state.json | 24 ------ 8 files changed, 3 insertions(+), 128 deletions(-) delete mode 100644 frontend/src/models/eventDefinitionsModel.ts diff --git a/frontend/src/lib/components/DefinitionPopup/definitionPopupLogic.test.ts b/frontend/src/lib/components/DefinitionPopup/definitionPopupLogic.test.ts index 152d37e6bcc72..ddabcc105fcf4 100644 --- a/frontend/src/lib/components/DefinitionPopup/definitionPopupLogic.test.ts +++ b/frontend/src/lib/components/DefinitionPopup/definitionPopupLogic.test.ts @@ -15,7 +15,6 @@ import { expectLogic } from 'kea-test-utils' import { urls } from 'scenes/urls' import { actionsModel } from '~/models/actionsModel' import { ActionType, CohortType, PersonProperty, PropertyDefinition } from '~/types' -import { eventDefinitionsModel } from '~/models/eventDefinitionsModel' import { propertyDefinitionsModel } from '~/models/propertyDefinitionsModel' import { cohortsModel } from '~/models/cohortsModel' import { useMocks } from '~/mocks/jest' @@ -52,7 +51,6 @@ describe('definitionPopupLogic', () => { initKeaTests() actionsModel.mount() - eventDefinitionsModel.mount() propertyDefinitionsModel.mount() cohortsModel.mount() }) @@ -130,13 +128,13 @@ describe('definitionPopupLogic', () => { type: TaxonomicFilterGroupType.CustomEvents, definition: mockEventDefinitions[0], url: `api/projects/@current/event_definitions/${mockEventDefinitions[0].id}`, - dispatchActions: [eventDefinitionsModel, ['updateEventDefinition']], + dispatchActions: [], }, { type: TaxonomicFilterGroupType.Events, definition: mockEventDefinitions[1], url: `api/projects/@current/event_definitions/${mockEventDefinitions[1].id}`, - dispatchActions: [eventDefinitionsModel, ['updateEventDefinition']], + dispatchActions: [], }, { type: TaxonomicFilterGroupType.PersonProperties, diff --git a/frontend/src/lib/components/DefinitionPopup/definitionPopupLogic.ts b/frontend/src/lib/components/DefinitionPopup/definitionPopupLogic.ts index 9dd33561657c8..2a264475afaaf 100644 --- a/frontend/src/lib/components/DefinitionPopup/definitionPopupLogic.ts +++ b/frontend/src/lib/components/DefinitionPopup/definitionPopupLogic.ts @@ -6,7 +6,6 @@ import { getSingularType } from 'lib/components/DefinitionPopup/utils' import { ActionType, AvailableFeature, CohortType, EventDefinition, PropertyDefinition } from '~/types' import { urls } from 'scenes/urls' import api from 'lib/api' -import { eventDefinitionsModel } from '~/models/eventDefinitionsModel' import { actionsModel } from '~/models/actionsModel' import { updatePropertyDefinitions } from '~/models/propertyDefinitionsModel' import { cohortsModel } from '~/models/cohortsModel' @@ -94,9 +93,6 @@ export const definitionPopupLogic = kea({ owner: _event.owner?.id ?? null, verified: !!_event.verified, }) - eventDefinitionsModel - .findMounted() - ?.actions.updateEventDefinition(definition as EventDefinition) } else if ( values.type === TaxonomicFilterGroupType.EventProperties || values.type === TaxonomicFilterGroupType.EventFeatureFlags diff --git a/frontend/src/models/eventDefinitionsModel.ts b/frontend/src/models/eventDefinitionsModel.ts deleted file mode 100644 index 95af3c9e9f9c0..0000000000000 --- a/frontend/src/models/eventDefinitionsModel.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { kea } from 'kea' -import api from 'lib/api' -import { EventDefinition } from '~/types' -import type { eventDefinitionsModelType } from './eventDefinitionsModelType' -import { updatePropertyDefinitions } from './propertyDefinitionsModel' -import { teamLogic } from 'scenes/teamLogic' - -export interface EventDefinitionStorage { - count: number - next: null | string - results: EventDefinition[] -} - -export const eventDefinitionsModel = kea({ - path: ['models', 'eventDefinitionsModel'], - actions: () => ({ - updateDescription: (id: string, description: string | null, type: string) => ({ id, description, type }), - updateEventDefinition: (eventDefinition: EventDefinition) => ({ eventDefinition }), - }), - loaders: ({ values }) => ({ - eventStorage: [ - { results: [], next: null, count: 0 } as EventDefinitionStorage, - { - loadEventDefinitions: async (initial?: boolean) => { - const url = initial - ? `api/projects/${teamLogic.values.currentTeamId}/event_definitions/?limit=5000&event_type=event` - : values.eventStorage.next - if (!url) { - throw new Error('Incorrect call to eventDefinitionsModel.loadEventDefinitions') - } - const eventStorage = await api.get(url) - return { - count: eventStorage.count, - results: [...values.eventStorage.results, ...eventStorage.results], - next: eventStorage.next, - } - }, - }, - ], - }), - reducers: () => ({ - eventStorage: [ - { results: [], next: null, count: 0 } as EventDefinitionStorage, - { - updateEventDefinition: (state, { eventDefinition }) => ({ - count: state.count, - results: state.results.map((p) => (eventDefinition.id === p.id ? eventDefinition : p)), - next: state.next, - }), - }, - ], - }), - listeners: ({ actions }) => ({ - loadEventDefinitionsSuccess: ({ eventStorage }) => { - if (eventStorage.next) { - actions.loadEventDefinitions() - } - }, - updateDescription: async ({ id, description, type }) => { - const response = await api.update(`api/projects/@current/${type}_definitions/${id}`, { description }) - if (type === 'event') { - actions.updateEventDefinition(response) - } else { - updatePropertyDefinitions([response]) - } - }, - }), - events: ({ actions }) => ({ - afterMount: () => { - actions.loadEventDefinitions(true) - }, - }), - selectors: { - loaded: [ - // Whether *all* the event definitions are fully loaded - (s) => [s.eventStorage, s.eventStorageLoading], - (eventStorage, eventStorageLoading): boolean => !eventStorageLoading && !eventStorage.next, - ], - eventDefinitions: [(s) => [s.eventStorage], (eventStorage): EventDefinition[] => eventStorage.results], - eventNames: [(s) => [s.eventDefinitions], (def): string[] => def.map(({ name }) => name)], - }, -}) diff --git a/frontend/src/models/index.ts b/frontend/src/models/index.ts index 538cc40fc13ce..93e291a4b6e5f 100644 --- a/frontend/src/models/index.ts +++ b/frontend/src/models/index.ts @@ -3,7 +3,6 @@ import { actionsModel } from './actionsModel' import { annotationsModel } from './annotationsModel' import { cohortsModel } from './cohortsModel' import { dashboardsModel } from './dashboardsModel' -import { eventDefinitionsModel } from './eventDefinitionsModel' import { personPropertiesModel } from './personPropertiesModel' import { propertyDefinitionsModel } from './propertyDefinitionsModel' @@ -17,7 +16,6 @@ export const models = kea({ annotationsModel, cohortsModel, dashboardsModel, - eventDefinitionsModel, personPropertiesModel, propertyDefinitionsModel, ], diff --git a/frontend/src/scenes/data-management/definition/definitionEditLogic.test.ts b/frontend/src/scenes/data-management/definition/definitionEditLogic.test.ts index c2accfef21c50..0ee416c717557 100644 --- a/frontend/src/scenes/data-management/definition/definitionEditLogic.test.ts +++ b/frontend/src/scenes/data-management/definition/definitionEditLogic.test.ts @@ -4,7 +4,6 @@ import { mockEventDefinitions, mockEventPropertyDefinition } from '~/test/mocks' import { initKeaTests } from '~/test/init' import { definitionEditLogic } from 'scenes/data-management/definition/definitionEditLogic' import { expectLogic } from 'kea-test-utils' -import { eventDefinitionsModel } from '~/models/eventDefinitionsModel' import { eventDefinitionsTableLogic } from 'scenes/data-management/events/eventDefinitionsTableLogic' import { eventPropertyDefinitionsTableLogic } from 'scenes/data-management/event-properties/eventPropertyDefinitionsTableLogic' import { router } from 'kea-router' @@ -34,7 +33,6 @@ describe('definitionEditLogic', () => { }) initKeaTests() await expectLogic(definitionLogic({ id: '1' })).toFinishAllListeners() - eventDefinitionsModel.mount() eventDefinitionsTableLogic.mount() eventPropertyDefinitionsTableLogic.mount() logic = definitionEditLogic({ id: '1', definition: mockEventDefinitions[0] }) diff --git a/frontend/src/scenes/data-management/definition/definitionEditLogic.ts b/frontend/src/scenes/data-management/definition/definitionEditLogic.ts index db797d3007773..5deafc1429a84 100644 --- a/frontend/src/scenes/data-management/definition/definitionEditLogic.ts +++ b/frontend/src/scenes/data-management/definition/definitionEditLogic.ts @@ -5,7 +5,6 @@ import { loaders } from 'kea-loaders' import api from 'lib/api' import { lemonToast } from 'lib/components/lemonToast' import { updatePropertyDefinitions } from '~/models/propertyDefinitionsModel' -import { eventDefinitionsModel } from '~/models/eventDefinitionsModel' import { definitionLogic, DefinitionLogicProps, @@ -65,9 +64,6 @@ export const definitionEditLogic = kea([ verified: !!_event.verified, }, }) - eventDefinitionsModel - .findMounted() - ?.actions.updateEventDefinition(definition as EventDefinition) } else { // Event Property Definition const _eventProperty = definition as PropertyDefinition @@ -83,7 +79,6 @@ export const definitionEditLogic = kea([ } lemonToast.success(`${capitalizeFirstLetter(values.singular)} saved`) - eventDefinitionsModel.actions.loadEventDefinitions(true) // reload definitions so they are immediately available // Update table values if (values.isEvent) { actions.setLocalEventDefinition(definition) diff --git a/frontend/src/scenes/data-management/definition/definitionLogic.ts b/frontend/src/scenes/data-management/definition/definitionLogic.ts index 318d30658dbe4..40411e6f317d1 100644 --- a/frontend/src/scenes/data-management/definition/definitionLogic.ts +++ b/frontend/src/scenes/data-management/definition/definitionLogic.ts @@ -1,8 +1,7 @@ import { actions, afterMount, kea, key, props, path, selectors, reducers, connect } from 'kea' -import { AvailableFeature, Breadcrumb, Definition, EventDefinition, PropertyDefinition } from '~/types' +import { AvailableFeature, Breadcrumb, Definition, PropertyDefinition } from '~/types' import { loaders } from 'kea-loaders' import api from 'lib/api' -import { eventDefinitionsModel } from '~/models/eventDefinitionsModel' import { updatePropertyDefinitions } from '~/models/propertyDefinitionsModel' import { router } from 'kea-router' import { urls } from 'scenes/urls' @@ -64,9 +63,6 @@ export const definitionLogic = kea([ definition = await api.eventDefinitions.get({ eventDefinitionId: id, }) - eventDefinitionsModel - .findMounted() - ?.actions.updateEventDefinition(definition as EventDefinition) } else { // Event Property Definition definition = await api.propertyDefinitions.get({ diff --git a/frontend/src/scenes/insights/EmptyStates/timeout-state.json b/frontend/src/scenes/insights/EmptyStates/timeout-state.json index a445f919d969c..ccf5228fd783c 100644 --- a/frontend/src/scenes/insights/EmptyStates/timeout-state.json +++ b/frontend/src/scenes/insights/EmptyStates/timeout-state.json @@ -1342,30 +1342,6 @@ "lastDashboardId": 3, "diveSourceId": null }, - "eventDefinitionsModel": { - "eventStorage": { - "count": 29, - "results": [ - { - "id": "017d15d8-126d-0001-508f-78eb18a4c6d5", - "name": "$autocapture", - "owner": { - "distinct_id": "", - "first_name": "", - "email": "" - }, - "description": null, - "tags": null, - "volume_30_day": null, - "query_usage_30_day": null, - "updated_at": null, - "updated_by": null - } - ], - "next": null - }, - "eventStorageLoading": false - }, "personPropertiesModel": { "personProperties": [ { From 8e7f8859544faf360b7e6c453ca3055d3113cc6b Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Wed, 24 Aug 2022 16:24:10 +0200 Subject: [PATCH 08/10] new script --- bin/e2e-test-runner | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/e2e-test-runner b/bin/e2e-test-runner index 7c98ba83a107b..8f4b1779cccfb 100755 --- a/bin/e2e-test-runner +++ b/bin/e2e-test-runner @@ -92,8 +92,8 @@ setupDev() { python manage.py setup_dev & } -nc -z localhost 9092 || ( echo -e "\033[0;31mKafka isn't running. Please run\n\tdocker compose -f docker-compose.arm64.yml up zookeeper kafka clickhouse db redis\nI'll wait while you do that.\033[0m" ; bin/check_kafka_clickhouse_up ) -wget -nv -t1 --spider 'http://localhost:8123/' || ( echo -e "\033[0;31mClickhouse isn't running. Please run\n\tdocker compose -f docker-compose.arm64.yml up zookeeper kafka clickhouse db redis.\nI'll wait while you do that.\033[0m" ; bin/check_kafka_clickhouse_up ) +nc -z localhost 9092 || ( echo -e "\033[0;31mKafka isn't running. Please run\n\tdocker compose -f docker-compose.dev.yml up zookeeper kafka clickhouse db redis\nI'll wait while you do that.\033[0m" ; bin/check_kafka_clickhouse_up ) +wget -nv -t1 --spider 'http://localhost:8123/' || ( echo -e "\033[0;31mClickhouse isn't running. Please run\n\tdocker compose -f docker-compose.dev.yml up zookeeper kafka clickhouse db redis.\nI'll wait while you do that.\033[0m" ; bin/check_kafka_clickhouse_up ) $SKIP_RECREATE_DATABASE || recreateDatabases $SKIP_MIGRATE || migrateDatabases From 0bc339378c1350747ce667f1a97499faa85d1c55 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Wed, 24 Aug 2022 16:36:33 +0200 Subject: [PATCH 09/10] fix test --- cypress/e2e/events.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cypress/e2e/events.js b/cypress/e2e/events.js index 714c0e6de9fc5..db63dd0ab3052 100644 --- a/cypress/e2e/events.js +++ b/cypress/e2e/events.js @@ -78,8 +78,8 @@ describe('Events', () => { it('separates feature flag properties into their own tab', () => { cy.get('[data-attr=new-prop-filter-EventsTable]').click() cy.get('[data-attr="taxonomic-tab-event_feature_flags"]').should('contain.text', 'Feature flags: 2').click() - cy.wait(200) - cy.get('.taxonomic-list-row').should('have.length', 2) + // some virtualized rows remain in the dom, but hidden + cy.get('.taxonomic-list-row:visible').should('have.length', 2) }) it('use before and after with a DateTime property', () => { From fb4979e461d43a0bb83ceee1cbcd7b968123465b Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Wed, 24 Aug 2022 17:32:57 +0200 Subject: [PATCH 10/10] it does not do this anymore --- .../insights/filters/ActionFilter/entityFilterLogic.test.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.test.ts b/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.test.ts index 7d51f2f6ab441..5e5fb2560fa66 100644 --- a/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.test.ts +++ b/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.test.ts @@ -4,7 +4,6 @@ import { initKeaTests } from '~/test/init' import filtersJson from './__mocks__/filters.json' import eventDefinitionsJson from './__mocks__/event_definitions.json' import { FilterType } from '~/types' -import { actionsModel } from '~/models/actionsModel' import { useMocks } from '~/mocks/jest' describe('entityFilterLogic', () => { @@ -29,10 +28,6 @@ describe('entityFilterLogic', () => { }) describe('core assumptions', () => { - it('mounts other logics', async () => { - await expectLogic(logic).toMount([actionsModel]) - }) - it('localFilters', async () => { await expectLogic(logic).toMatchValues({ localFilters: toLocalFilters(filtersJson as FilterType),