Skip to content

Commit

Permalink
feat: Set default billing terms for missing info cache (#4614)
Browse files Browse the repository at this point in the history
  • Loading branch information
zachaysan authored Sep 26, 2024
1 parent 12a8a8e commit f9069e4
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 22 deletions.
22 changes: 12 additions & 10 deletions api/app_analytics/analytics_db_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,22 +40,24 @@ def get_usage_data(
match period:
case constants.CURRENT_BILLING_PERIOD:
if not getattr(organisation, "subscription_information_cache", None):
return []
sub_cache = organisation.subscription_information_cache
starts_at = sub_cache.current_billing_term_starts_at or now - timedelta(
days=30
)
starts_at = now - timedelta(days=30)
else:
sub_cache = organisation.subscription_information_cache
starts_at = sub_cache.current_billing_term_starts_at or now - timedelta(
days=30
)
month_delta = relativedelta(now, starts_at).months
date_start = relativedelta(months=month_delta) + starts_at
date_stop = now

case constants.PREVIOUS_BILLING_PERIOD:
if not getattr(organisation, "subscription_information_cache", None):
return []
sub_cache = organisation.subscription_information_cache
starts_at = sub_cache.current_billing_term_starts_at or now - timedelta(
days=30
)
starts_at = now - timedelta(days=30)
else:
sub_cache = organisation.subscription_information_cache
starts_at = sub_cache.current_billing_term_starts_at or now - timedelta(
days=30
)
month_delta = relativedelta(now, starts_at).months - 1
month_delta += relativedelta(now, starts_at).years * 12
date_start = relativedelta(months=month_delta) + starts_at
Expand Down
50 changes: 38 additions & 12 deletions api/tests/unit/app_analytics/test_analytics_db_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -385,32 +385,58 @@ def test_get_feature_evaluation_data_calls_get_feature_evaluation_data_from_loca
)


@pytest.mark.parametrize(
"period",
[
CURRENT_BILLING_PERIOD,
PREVIOUS_BILLING_PERIOD,
],
)
def test_get_usage_data_returns_empty_list_when_unset_subscription_information_cache(
period: str,
@pytest.mark.freeze_time("2023-01-19T09:09:47.325132+00:00")
def test_get_usage_data_returns_30d_of_60d_when_unset_subscription_information_cache_for_previous_billing_period(
mocker: MockerFixture,
settings: SettingsWrapper,
organisation: Organisation,
) -> None:
# Given
period = PREVIOUS_BILLING_PERIOD
settings.USE_POSTGRES_FOR_ANALYTICS = True
mocked_get_usage_data_from_local_db = mocker.patch(
"app_analytics.analytics_db_service.get_usage_data_from_local_db", autospec=True
)
assert getattr(organisation, "subscription_information_cache", None) is None

# When
get_usage_data(organisation, period=period)

# Then
mocked_get_usage_data_from_local_db.assert_called_once_with(
organisation=organisation,
environment_id=None,
project_id=None,
date_start=datetime(2022, 11, 20, 9, 9, 47, 325132, tzinfo=timezone.utc),
date_stop=datetime(2022, 12, 20, 9, 9, 47, 325132, tzinfo=timezone.utc),
)


@pytest.mark.freeze_time("2023-01-19T09:09:47.325132+00:00")
def test_get_usage_data_returns_30d_when_unset_subscription_information_cache_for_current_billing_period(
mocker: MockerFixture,
settings: SettingsWrapper,
organisation: Organisation,
) -> None:
# Given
period = CURRENT_BILLING_PERIOD
settings.USE_POSTGRES_FOR_ANALYTICS = True
mocked_get_usage_data_from_local_db = mocker.patch(
"app_analytics.analytics_db_service.get_usage_data_from_local_db", autospec=True
)
assert getattr(organisation, "subscription_information_cache", None) is None

# When
usage_data = get_usage_data(organisation, period=period)
get_usage_data(organisation, period=period)

# Then
assert usage_data == []
mocked_get_usage_data_from_local_db.assert_not_called()
mocked_get_usage_data_from_local_db.assert_called_once_with(
organisation=organisation,
environment_id=None,
project_id=None,
date_start=datetime(2022, 12, 20, 9, 9, 47, 325132, tzinfo=timezone.utc),
date_stop=datetime(2023, 1, 19, 9, 9, 47, 325132, tzinfo=timezone.utc),
)


@pytest.mark.freeze_time("2023-01-19T09:09:47.325132+00:00")
Expand Down

0 comments on commit f9069e4

Please sign in to comment.