コード例 #1
0
 def setUpTestData(cls):
     random.seed(900)
     super().setUpTestData()
     cls.demo_team = create_demo_team(cls.organization)
     calculate_event_property_usage_for_team(cls.demo_team.pk)
     cls.user.current_team = cls.demo_team
     cls.user.save()
コード例 #2
0
 def create_team(self, organization: Organization, user: User) -> Team:
     if self.enable_new_onboarding(user):
         return create_demo_team(user=user,
                                 organization=organization,
                                 request=self.context["request"])
     else:
         return Team.objects.create_with_data(user=user,
                                              organization=organization)
コード例 #3
0
 def setUpTestData(cls):
     random.seed(900)
     super().setUpTestData()
     cls.demo_team = create_demo_team(cls.organization)
     calculate_event_property_usage_for_team(cls.demo_team.pk)
     cls.user.current_team = cls.demo_team
     cls.user.save()
     EventProperty.objects.create(team=cls.demo_team, event="$pageview", property="$browser")
     EventProperty.objects.create(team=cls.demo_team, event="$pageview", property="first_visit")
コード例 #4
0
    def test_delete_team_own_second(self):
        self.organization_membership.level = OrganizationMembership.Level.ADMIN
        self.organization_membership.save()

        team = create_demo_team(organization=self.organization)

        self.assertEqual(Team.objects.filter(organization=self.organization).count(), 2)

        response = self.client.delete(f"/api/projects/{team.id}")

        self.assertEqual(response.status_code, 204)
        self.assertEqual(Team.objects.filter(organization=self.organization).count(), 1)
コード例 #5
0
ファイル: test_team.py プロジェクト: neilkakkar/posthog
    def test_updating_team_events_or_related_updates_event_definitions(self):
        random.seed(900)
        org = Organization.objects.create(name="Demo Org")
        team = create_demo_team(org, None, None)

        expected_events = ["watched_movie", "installed_app", "rated_app", "purchase", "entered_free_trial"]

        self.assertEqual(EventDefinition.objects.filter(team=team).count(), len(expected_events))

        for obj in EventDefinition.objects.filter(team=team):
            self.assertIn(obj.name, expected_events)
            self.assertEqual(obj.volume_30_day, None)
            self.assertEqual(obj.query_usage_30_day, None)

        # Test adding and removing one event
        team.event_names.pop(0)
        team.event_names.append("uninstalled_app")
        team.save()
        expected_events = ["installed_app", "rated_app", "purchase", "entered_free_trial", "uninstalled_app"]
        self.assertEqual(
            list(EventDefinition.objects.filter(team=team).values_list("name", flat=True)).sort(),
            expected_events.sort(),
        )

        # Test events with usage
        expected_event_definitions = [
            {"name": "installed_app", "volume_30_day": 100, "query_usage_30_day": 0},
            {"name": "rated_app", "volume_30_day": 73, "query_usage_30_day": 0},
            {"name": "purchase", "volume_30_day": 16, "query_usage_30_day": 0},
            {"name": "entered_free_trial", "volume_30_day": 0, "query_usage_30_day": 0},
            {"name": "uninstalled_app", "volume_30_day": 0, "query_usage_30_day": 0},
            {"name": "$pageview", "volume_30_day": 1822, "query_usage_30_day": 19292},
        ]
        calculate_event_property_usage_for_team(team.pk)
        team.refresh_from_db()
        team.event_names.append("$pageview")
        team.event_names_with_usage.append({"event": "$pageview", "volume": 1822, "usage_count": 19292})
        team.save()

        self.assertEqual(EventDefinition.objects.filter(team=team).count(), len(expected_event_definitions))
        for item in expected_event_definitions:
            instance = EventDefinition.objects.get(name=item["name"], team=team)
            self.assertEqual(instance.volume_30_day, item["volume_30_day"])
            self.assertEqual(instance.query_usage_30_day, item["query_usage_30_day"])
コード例 #6
0
    def test_updating_event_properties_or_related_updates_property_definitions(
            self):
        random.seed(900)
        org = Organization.objects.create(name="Demo Org")
        team = create_demo_team(org, None, None)

        expected_properties = [
            "purchase",
            "$current_url",
            "is_first_movie",
            "app_rating",
            "plan",
            "first_visit",
            "purchase_value",
        ]
        numerical_properties = ["purchase", "app_rating", "purchase_value"]

        self.assertEqual(
            PropertyDefinition.objects.filter(team=team).count(),
            len(expected_properties))

        for obj in PropertyDefinition.objects.filter(team=team):
            self.assertIn(obj.name, expected_properties)
            self.assertEqual(obj.volume_30_day, None)
            self.assertEqual(obj.query_usage_30_day, None)
            self.assertEqual(obj.is_numerical, obj.name
                             in numerical_properties)

        # Test adding and removing one event
        team.event_properties.pop(-1)
        team.event_properties.append("paid_tier")
        team.save()
        expected_properties = [
            "purchase",
            "$current_url",
            "is_first_movie",
            "app_rating",
            "plan",
            "first_visit",
            "paid_tier",
        ]
        self.assertEqual(
            list(
                PropertyDefinition.objects.filter(team=team).values_list(
                    "name", flat=True)).sort(),
            expected_properties.sort(),
        )

        # Test events with usage
        expected_property_definitions = [
            {
                "name": "$current_url",
                "volume_30_day": 264,
                "query_usage_30_day": 0,
                "is_numerical": False
            },
            {
                "name": "is_first_movie",
                "volume_30_day": 87,
                "query_usage_30_day": 0,
                "is_numerical": False
            },
            {
                "name": "app_rating",
                "volume_30_day": 73,
                "query_usage_30_day": 0,
                "is_numerical": True
            },
            {
                "name": "plan",
                "volume_30_day": 14,
                "query_usage_30_day": 0,
                "is_numerical": False
            },
            {
                "name": "purchase",
                "volume_30_day": 0,
                "query_usage_30_day": 0,
                "is_numerical": True
            },
            {
                "name": "paid_tier",
                "volume_30_day": 0,
                "query_usage_30_day": 0,
                "is_numerical": False
            },
            {
                "name": "first_visit",
                "volume_30_day": 0,
                "query_usage_30_day": 0,
                "is_numerical": False
            },
            {
                "name": "$browser",
                "volume_30_day": 166,
                "query_usage_30_day": 349,
                "is_numerical": True
            },
        ]
        calculate_event_property_usage_for_team(team.pk)
        team.refresh_from_db()
        team.event_properties.append("$browser")
        team.event_properties_numerical.append("$browser")
        team.event_properties_with_usage.append({
            "key": "$browser",
            "volume": 166,
            "usage_count": 349
        })
        team.save()

        self.assertEqual(
            PropertyDefinition.objects.filter(team=team).count(),
            len(expected_property_definitions))
        for item in expected_property_definitions:
            instance = PropertyDefinition.objects.get(name=item["name"],
                                                      team=team)
            self.assertEqual(instance.volume_30_day, item["volume_30_day"])
            self.assertEqual(instance.query_usage_30_day,
                             item["query_usage_30_day"])
            self.assertEqual(instance.is_numerical, item["is_numerical"])
コード例 #7
0
ファイル: signup.py プロジェクト: PostHog/posthog
 def create_team(self, organization: Organization, user: User) -> Team:
     if settings.DEMO:
         return create_demo_team(organization=organization)
     else:
         return Team.objects.create_with_data(user=user, organization=organization)
コード例 #8
0
        def test_updating_event_properties_or_related_updates_property_definitions(
                self) -> None:
            random.seed(900)
            org = Organization.objects.create(name="Demo Org")
            team = create_demo_team(org, None, None)

            expected_properties = [
                "purchase",
                "$current_url",
                "$browser",
                "is_first_movie",
                "app_rating",
                "plan",
                "first_visit",
                "purchase_value",
            ]
            numerical_properties = ["purchase", "app_rating", "purchase_value"]

            self.assertCountEqual(
                PropertyDefinition.objects.filter(team=team).values_list(
                    "name", flat=True),
                expected_properties,
                PropertyDefinition.objects.filter(team=team).values("name"),
            )

            for obj in PropertyDefinition.objects.filter(team=team):
                self.assertIn(obj.name, expected_properties)
                self.assertEqual(obj.volume_30_day, None)
                self.assertEqual(obj.query_usage_30_day, None)
                self.assertEqual(obj.is_numerical, obj.name
                                 in numerical_properties)

            DashboardItem.objects.create(team=team,
                                         filters={
                                             "properties": [{
                                                 "key": "$browser",
                                                 "value": "Safari"
                                             }]
                                         })
            # Test events with usage
            expected_property_definitions = [
                {
                    "name": "$current_url",
                    "query_usage_30_day": 0,
                    "is_numerical": False
                },
                {
                    "name": "is_first_movie",
                    "query_usage_30_day": 0,
                    "is_numerical": False
                },
                {
                    "name": "app_rating",
                    "query_usage_30_day": 0,
                    "is_numerical": True
                },
                {
                    "name": "plan",
                    "query_usage_30_day": 0,
                    "is_numerical": False
                },
                {
                    "name": "purchase",
                    "query_usage_30_day": 0,
                    "is_numerical": True
                },
                {
                    "name": "purchase_value",
                    "query_usage_30_day": 0,
                    "is_numerical": True
                },
                {
                    "name": "first_visit",
                    "query_usage_30_day": 0,
                    "is_numerical": False
                },
                {
                    "name": "$browser",
                    "query_usage_30_day": 1,
                    "is_numerical": False
                },
            ]
            calculate_event_property_usage_for_team(team.pk)

            self.assertEqual(
                PropertyDefinition.objects.filter(team=team).count(),
                len(expected_property_definitions))
            for item in expected_property_definitions:
                instance = PropertyDefinition.objects.get(name=item["name"],
                                                          team=team)
                self.assertEqual(instance.query_usage_30_day,
                                 item["query_usage_30_day"], item)
                self.assertEqual(instance.is_numerical, item["is_numerical"],
                                 item)
コード例 #9
0
        def test_updating_team_events_or_related_updates_event_definitions(
                self) -> None:
            random.seed(900)  # ensure random data is consistent
            org = Organization.objects.create(name="Demo Org")
            team = create_demo_team(org, None, None)

            expected_events = [
                "watched_movie",
                "installed_app",
                "rated_app",
                "purchase",
                "entered_free_trial",
                "$pageview",
            ]

            self.assertEqual(
                EventDefinition.objects.filter(team=team).count(),
                len(expected_events))

            for obj in EventDefinition.objects.filter(team=team):
                self.assertIn(obj.name, expected_events)
                self.assertEqual(obj.volume_30_day, None)
                self.assertEqual(obj.query_usage_30_day, None)

            DashboardItem.objects.create(
                team=team, filters={"events": [{
                    "id": "$pageview"
                }]})
            # Test events with usage
            expected_event_definitions = [
                {
                    "name": "installed_app",
                    "volume_30_day": 100,
                    "query_usage_30_day": 0
                },
                {
                    "name": "rated_app",
                    "volume_30_day": 73,
                    "query_usage_30_day": 0
                },
                {
                    "name": "purchase",
                    "volume_30_day": 16,
                    "query_usage_30_day": 0
                },
                {
                    "name": "entered_free_trial",
                    "volume_30_day": 0,
                    "query_usage_30_day": 0
                },
                {
                    "name": "watched_movie",
                    "volume_30_day": 87,
                    "query_usage_30_day": 0
                },
                {
                    "name": "$pageview",
                    "volume_30_day": 327,
                    "query_usage_30_day": 1
                },
            ]
            calculate_event_property_usage_for_team(team.pk)

            self.assertEqual(
                EventDefinition.objects.filter(team=team).count(),
                len(expected_event_definitions))
            for item in expected_event_definitions:
                instance = EventDefinition.objects.get(name=item["name"],
                                                       team=team)
                self.assertEqual(instance.volume_30_day, item["volume_30_day"],
                                 item)
                self.assertEqual(instance.query_usage_30_day,
                                 item["query_usage_30_day"], item)