def calculate_billing_daily_usage(): try: from multi_tenancy.tasks import compute_daily_usage_for_organizations # noqa: F401 except ImportError: pass else: compute_daily_usage_for_organizations()
def test_only_rerport_relevant_usage_for_organizations( self, mock_individual_org_task ): plan = Plan.objects.create(key="unmetered", price_id="u1", name="Flat fee") org, team = self.create_org_and_team() OrganizationBilling.objects.create( organization=org, stripe_subscription_item_id="si_1111111111111", plan=plan, ) # non-metered plan another_org, another_team = self.create_org_and_team() OrganizationBilling.objects.create( organization=another_org, plan=plan, ) # no subscription item ID plan _, unbilled_team = self.create_org_and_team() # no OrganizationBilling compute_daily_usage_for_organizations() mock_individual_org_task.assert_not_called()
def test_compute_daily_usage_for_different_date(self, mock_create_usage_record, _): plan = Plan.objects.create( key="metered", name="Metered", price_id="m1", is_metered_billing=True ) org, team = self.create_org_and_team() OrganizationBilling.objects.create( organization=org, stripe_subscription_item_id="si_1111111111111", plan=plan, ) # Some noise events that should be ignored with freeze_time("2020-11-11"): # today self.event_factory(team, 4) with freeze_time("2020-11-10"): # yesterday self.event_factory(team, 6) with freeze_time("2020-11-09"): # 2 days ago self.event_factory(team, 1) # Now some real events with freeze_time("2020-11-03T09:39:12"): self.event_factory(team, 5) with freeze_time("2020-11-03T12:59:45"): self.event_factory(team, 11) compute_daily_usage_for_organizations( datetime.datetime(2020, 11, 3, tzinfo=pytz.UTC) ) self.assertEqual(mock_create_usage_record.call_count, 1) self.assertEqual( mock_create_usage_record.call_args_list[0].args, ("si_1111111111111",) ) self.assertEqual( mock_create_usage_record.call_args_list[0].kwargs["quantity"], 16 ) self.assertEqual( mock_create_usage_record.call_args_list[0].kwargs["idempotency_key"], "si_1111111111111-2020-11-03", )
def test_compute_daily_usage_for_organizations(self, mock_create_usage_record, _): plan = Plan.objects.create( key="metered", name="Metered", price_id="m1", is_metered_billing=True ) org, team = self.create_org_and_team() OrganizationBilling.objects.create( organization=org, stripe_subscription_item_id="si_1111111111111", plan=plan, ) another_org, another_team = self.create_org_and_team() OrganizationBilling.objects.create( organization=another_org, stripe_subscription_item_id="si_01234567890", plan=plan, ) # Some noise events that should be ignored with freeze_time("2020-05-07"): # today self.event_factory(team, 4) self.event_factory(another_team, 3) with freeze_time("2020-05-05"): # 2 days ago self.event_factory(team, 6) self.event_factory(another_team, 5) with freeze_time("2020-05-08"): # tomorrow self.event_factory(team, 1) self.event_factory(another_team, 1) # Now some real events with freeze_time("2020-05-06T04:39:12"): self.event_factory(another_team, 6) self.event_factory(team, 3) with freeze_time("2020-05-06T23:59:45"): self.event_factory(another_team, 5) self.event_factory(team, 11) compute_daily_usage_for_organizations() self.assertEqual(mock_create_usage_record.call_count, 2) # team self.assertEqual( mock_create_usage_record.call_args_list[0].args, ("si_1111111111111",) ) self.assertEqual( mock_create_usage_record.call_args_list[0].kwargs["quantity"], 14 ) self.assertEqual( mock_create_usage_record.call_args_list[0].kwargs["idempotency_key"], "si_1111111111111-2020-05-06", ) # another team self.assertEqual( mock_create_usage_record.call_args_list[1].args, ("si_01234567890",) ) self.assertEqual( mock_create_usage_record.call_args_list[1].kwargs["quantity"], 11 ) self.assertEqual( mock_create_usage_record.call_args_list[1].kwargs["idempotency_key"], "si_01234567890-2020-05-06", )