Пример #1
0
    def test_weekly_email_report_content(self, mock_email_message):

        with self.settings(
                EMAIL_HOST="localhost",
                CELERY_TASK_ALWAYS_EAGER=True,
        ):
            send_weekly_email_reports()

        self.assertEqual(
            mock_email_message.call_args[1]["campaign_key"],
            f"weekly_report_for_team_{self.team.pk}_on_2020-09-14",
        )  # Campaign key
        self.assertEqual(
            mock_email_message.call_args[1]["subject"],
            "PostHog weekly report for Sep 14, 2020 to Sep 20",
        )  # Email subject
        self.assertEqual(mock_email_message.call_args[1]["template_name"],
                         "weekly_report")

        template_context = mock_email_message.call_args[1]["template_context"]

        self.assertEqual(template_context["team"], "The Bakery")
        self.assertEqual(
            template_context["period_start"],
            datetime.datetime(2020, 9, 14, tzinfo=pytz.UTC),
        )
        self.assertEqual(
            template_context["period_end"],
            datetime.datetime(2020, 9, 20, 23, 59, 59, 999999,
                              tzinfo=pytz.UTC),
        )
        self.assertEqual(
            template_context["active_users"],
            6,
        )
        self.assertEqual(
            template_context["active_users_delta"],
            0.5,
        )
        self.assertEqual(
            round(template_context["user_distribution"]["new"], 2),
            0.17,
        )
        self.assertEqual(
            template_context["user_distribution"]["retained"],
            0.5,
        )
        self.assertEqual(
            round(template_context["user_distribution"]["resurrected"], 2),
            0.33,
        )
        self.assertEqual(
            template_context["churned_users"],
            {
                "abs": 1,
                "ratio": 0.25,
                "delta": None
            },
        )
Пример #2
0
    def test_weekly_email_report(self) -> None:

        record_count: int = MessagingRecord.objects.count()

        expected_recipients: List[str] = [
            "*****@*****.**", "*****@*****.**"
        ]

        with self.settings(
                EMAIL_HOST="localhost",
                SITE_URL="http://localhost:9999",
                CELERY_TASK_ALWAYS_EAGER=True,
        ):
            send_weekly_email_reports()

        self.assertSetEqual({",".join(outmail.to)
                             for outmail in mail.outbox},
                            set(expected_recipients))

        self.assertEqual(
            mail.outbox[0].subject,
            "PostHog weekly report for Sep 14, 2020 to Sep 20",
        )
        self.assertEqual(
            mail.outbox[0].body,
            "",
        )  # no plain-text version support yet

        html_message = mail.outbox[0].alternatives[0][0]  # type: ignore
        self.assertIn(
            "http://localhost:9999/static/posthog-logo.png",
            html_message,
        )  # absolute URLs are used

        self.assertIn('style="font-weight: 600"',
                      html_message)  # CSS is inlined

        self.assertIn(
            "Your PostHog weekly report is ready! Your team had 6 active users last week! 🎉",
            html_message,
        )  # preheader

        # Ensure records are properly saved to prevent duplicate emails
        self.assertEqual(MessagingRecord.objects.count(), record_count + 2)
        for email in expected_recipients:
            email_hash = hashlib.sha256(
                f"{settings.SECRET_KEY}_{email}".encode()).hexdigest()
            record = MessagingRecord.objects.get(
                email_hash=email_hash,
                campaign_key=
                f"weekly_report_for_team_{self.team.pk}_on_2020-09-14",
            )
            self.assertTrue(
                (timezone.now() - record.sent_at).total_seconds() < 5)
Пример #3
0
def send_weekly_email_report():
    if settings.EMAIL_REPORTS_ENABLED:
        from posthog.tasks.email import send_weekly_email_reports

        send_weekly_email_reports()