def test_unordered_funnel_with_groups(self):
        GroupTypeMapping.objects.create(team=self.team, group_type="organization", group_type_index=0)
        GroupTypeMapping.objects.create(team=self.team, group_type="company", group_type_index=1)

        create_group(team_id=self.team.pk, group_type_index=0, group_key="org:5", properties={"industry": "finance"})
        create_group(team_id=self.team.pk, group_type_index=0, group_key="org:6", properties={"industry": "technology"})

        create_group(team_id=self.team.pk, group_type_index=1, group_key="company:1", properties={})
        create_group(team_id=self.team.pk, group_type_index=1, group_key="company:2", properties={})

        events_by_person = {
            "user_1": [
                {"event": "user signed up", "timestamp": datetime(2020, 1, 3, 14), "properties": {"$group_0": "org:5"}},
                {  # same person, different group, so should count as different step 1 in funnel
                    "event": "user signed up",
                    "timestamp": datetime(2020, 1, 10, 14),
                    "properties": {"$group_0": "org:6"},
                },
            ],
            "user_2": [
                {  # different person, same group, so should count as step two in funnel
                    "event": "paid",
                    "timestamp": datetime(2020, 1, 2, 14),
                    "properties": {"$group_0": "org:5"},
                }
            ],
        }
        journeys_for(events_by_person, self.team)

        params = FunnelRequest(
            events=json.dumps(
                [
                    EventPattern(id="user signed up", type="events", order=0),
                    EventPattern(id="paid", type="events", order=1),
                ]
            ),
            date_from="2020-01-01",
            date_to="2020-01-14",
            aggregation_group_type_index=0,
            funnel_order_type="unordered",
            insight=INSIGHT_FUNNELS,
        )

        result = get_funnel_ok(self.client, self.team.pk, params)

        assert result["user signed up"]["count"] == 2
        assert result["paid"]["count"] == 1
        assert result["paid"]["average_conversion_time"] == 86400

        actors = get_funnel_actors_ok(self.client, result["user signed up"]["converted_people_url"])
        assert len(actors) == 2
Ejemplo n.º 2
0
    def test_funnel_group_aggregation_with_groups_entity_filtering(self):
        self._create_groups()

        events_by_person = {
            "user_1": [
                {"event": "user signed up", "timestamp": datetime(2020, 1, 2, 14), "properties": {"$group_0": "org:5"}}
            ],
            "user_2": [
                {  # different person, same group, so should count as step two in funnel
                    "event": "paid",
                    "timestamp": datetime(2020, 1, 3, 14),
                    "properties": {"$group_0": "org:5"},
                },
            ],
            "user_3": [
                {  # different person, different group, so should be discarded from step 1 in funnel
                    "event": "user signed up",
                    "timestamp": datetime(2020, 1, 10, 14),
                    "properties": {"$group_0": "org:6"},
                },
            ],
        }
        journeys_for(events_by_person, self.team)

        params = FunnelRequest(
            events=json.dumps([
                EventPattern(id="user signed up",
                             type="events",
                             order=0,
                             properties={"$group_0": "org:5"}),
                EventPattern(id="paid", type="events", order=1),
            ]),
            date_from="2020-01-01",
            date_to="2020-01-14",
            aggregation_group_type_index=0,
            insight=INSIGHT_FUNNELS,
        )

        result = get_funnel_ok(self.client, self.team.pk, params)

        assert result["user signed up"]["count"] == 1
        assert result["paid"]["count"] == 1
        assert result["paid"]["average_conversion_time"] == 86400

        actors = get_funnel_actors_ok(
            self.client, result["user signed up"]["converted_people_url"])
        actor_ids = [str(val["id"]) for val in actors]
        assert actor_ids == ["org:5"]
Ejemplo n.º 3
0
    def test_funnel_with_groups_global_filtering(self):
        self._create_groups()

        events_by_person = {
            "user_1": [
                {
                    "event": "user signed up",
                    "timestamp": datetime(2020, 1, 2, 14),
                    "properties": {
                        "$group_0": "org:5"
                    }
                },
                {
                    "event": "paid",
                    "timestamp": datetime(2020, 1, 3, 14),
                    "properties": {
                        "$group_0": "org:6"
                    },  # second event belongs to different group, so shouldn't complete funnel
                },
            ],
            "user_2": [
                {
                    "event":
                    "user signed up",  # event belongs to different group, so shouldn't enter funnel
                    "timestamp": datetime(2020, 1, 2, 14),
                    "properties": {
                        "$group_0": "org:6"
                    },
                },
                {
                    "event": "paid",
                    "timestamp": datetime(2020, 1, 3, 14),
                    "properties": {
                        "$group_0": "org:5"
                    },  # same group, but different person, so not in funnel
                },
            ],
        }
        created_people = journeys_for(events_by_person, self.team)

        params = FunnelRequest(
            events=json.dumps([
                EventPattern(id="user signed up", type="events", order=0),
                EventPattern(id="paid", type="events", order=1),
            ]),
            date_from="2020-01-01",
            date_to="2020-01-14",
            insight=INSIGHT_FUNNELS,
            properties=json.dumps([{
                "key": "industry",
                "value": "finance",
                "type": "group",
                "group_type_index": 0
            }]),
        )

        result = get_funnel_ok(self.client, self.team.pk, params)

        assert result["user signed up"]["count"] == 1
        assert result["paid"]["count"] == 0

        actors = get_funnel_actors_ok(
            self.client, result["user signed up"]["converted_people_url"])
        actor_ids = [str(val["id"]) for val in actors]

        assert actor_ids == sorted([str(created_people["user_1"].uuid)])
Ejemplo n.º 4
0
    def test_funnel_with_groups_entity_filtering(self):
        self._create_groups()

        events_by_person = {
            "user_1": [
                {
                    "event": "user signed up",
                    "timestamp": datetime(2020, 1, 2, 14),
                    "properties": {
                        "$group_0": "org:5"
                    }
                },
                {
                    "event": "paid",
                    "timestamp": datetime(2020, 1, 3, 14),
                    "properties": {
                        "$group_0": "org:6"
                    },  # different group, but doesn't matter since not aggregating by groups
                },
                {
                    "event":
                    "user signed up",  # event belongs to different group, so shouldn't enter funnel
                    "timestamp": datetime(2020, 1, 2, 14),
                    "properties": {
                        "$group_0": "org:6"
                    },
                },
                {
                    "event": "paid",
                    "timestamp": datetime(2020, 1, 3, 14),
                    "properties": {
                        "$group_0": "org:6"
                    },  # event belongs to different group, so shouldn't enter funnel
                },
            ],
        }
        created_people = journeys_for(events_by_person, self.team)

        params = FunnelRequest(
            events=json.dumps([
                EventPattern(id="user signed up",
                             type="events",
                             order=0,
                             properties={"$group_0": "org:5"}),
                EventPattern(id="paid", type="events", order=1),
            ]),
            date_from="2020-01-01",
            date_to="2020-01-14",
            insight=INSIGHT_FUNNELS,
        )

        result = get_funnel_ok(self.client, self.team.pk, params)

        assert result["user signed up"]["count"] == 1
        assert result["paid"]["count"] == 1
        assert result["paid"]["average_conversion_time"] == 86400

        actors = get_funnel_actors_ok(
            self.client, result["user signed up"]["converted_people_url"])
        actor_ids = [str(val["id"]) for val in actors]

        assert actor_ids == sorted([str(created_people["user_1"].uuid)])