Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions api/tests/unit/app_analytics/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,24 @@


@pytest.fixture
def skip_if_no_analytics_db() -> None:
def use_analytics_db(request: pytest.FixtureRequest) -> None:
"""
Skip tests if no analytics database is configured.
Skip tests if no analytics database is configured,
and make sure the django_db fixture uses both default and analytics databases.
This is useful to avoid running tests that require a specific database setup.
"""
if "analytics" not in settings.DATABASES: # pragma: no cover
pytest.skip("No analytics database configured, skipping")
return
request.applymarker(pytest.mark.django_db(databases=["default", "analytics"]))
request.getfixturevalue("db")


@pytest.fixture(autouse=True)
def skip_if_no_analytics_db_marked(request: pytest.FixtureRequest) -> None:
def use_analytics_db_marked(request: pytest.FixtureRequest) -> None:
"""
Automatically skip tests that are marked with 'skip_if_no_analytics_db'.
Automatically skip tests that are marked with 'use_analytics_db'.
This allows for selective skipping of tests based on the database configuration.
"""
if request.node.get_closest_marker("skip_if_no_analytics_db"):
request.getfixturevalue("skip_if_no_analytics_db")
if request.node.get_closest_marker("use_analytics_db"):
request.getfixturevalue("use_analytics_db")
21 changes: 7 additions & 14 deletions api/tests/unit/app_analytics/test_analytics_db_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,7 @@ def cache(organisation: Organisation) -> OrganisationSubscriptionInformationCach
)


@pytest.mark.skip_if_no_analytics_db
@pytest.mark.django_db(databases=["analytics", "default"])
@pytest.mark.use_analytics_db
def test_get_usage_data_from_local_db(organisation, environment, settings): # type: ignore[no-untyped-def]
environment_id = environment.id
now = timezone.now()
Expand Down Expand Up @@ -102,8 +101,7 @@ def test_get_usage_data_from_local_db(organisation, environment, settings): # t
assert data.day == today - timedelta(days=29 - count)


@pytest.mark.skip_if_no_analytics_db
@pytest.mark.django_db(databases=["analytics", "default"])
@pytest.mark.use_analytics_db
def test_get_usage_data_from_local_db_project_id_filter( # type: ignore[no-untyped-def]
organisation: Organisation,
project: Project,
Expand Down Expand Up @@ -150,8 +148,7 @@ def test_get_usage_data_from_local_db_project_id_filter( # type: ignore[no-unty
assert list(usage_data_for_project_two)[0].flags == total_count # 1 environment


@pytest.mark.skip_if_no_analytics_db
@pytest.mark.django_db(databases=["analytics", "default"])
@pytest.mark.use_analytics_db
def test_get_usage_data_from_local_db__environment_filter__returns_expected(
organisation: Organisation,
environment: Environment,
Expand Down Expand Up @@ -197,8 +194,7 @@ def test_get_usage_data_from_local_db__environment_filter__returns_expected(
]


@pytest.mark.skip_if_no_analytics_db
@pytest.mark.django_db(databases=["analytics", "default"])
@pytest.mark.use_analytics_db
def test_get_usage_data_from_local_db__labels_filter__returns_expected(
organisation: Organisation,
environment: Environment,
Expand Down Expand Up @@ -270,8 +266,7 @@ def test_get_usage_data_from_local_db__labels_filter__returns_expected(
]


@pytest.mark.skip_if_no_analytics_db
@pytest.mark.django_db(databases=["analytics", "default"])
@pytest.mark.use_analytics_db
def test_get_total_events_count(organisation, environment, settings): # type: ignore[no-untyped-def]
settings.USE_POSTGRES_FOR_ANALYTICS = True
environment_id = environment.id
Expand Down Expand Up @@ -322,8 +317,7 @@ def test_get_total_events_count(organisation, environment, settings): # type: i
assert total_events_count == 20 * len(Resource) * 30


@pytest.mark.skip_if_no_analytics_db
@pytest.mark.django_db(databases=["analytics", "default"])
@pytest.mark.use_analytics_db
def test_get_feature_evaluation_data_from_local_db(
feature: Feature,
environment: Environment,
Expand Down Expand Up @@ -391,8 +385,7 @@ def test_get_feature_evaluation_data_from_local_db(
assert data.day == today - timedelta(days=29 - i)


@pytest.mark.skip_if_no_analytics_db
@pytest.mark.django_db(databases=["analytics", "default"])
@pytest.mark.use_analytics_db
def test_get_feature_evaluation_data_from_local_db__labels_filter__returns_expected(
feature: Feature,
environment: Environment,
Expand Down
3 changes: 1 addition & 2 deletions api/tests/unit/app_analytics/test_migrate_to_pg.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
from app_analytics.models import FeatureEvaluationBucket


@pytest.mark.skip_if_no_analytics_db
@pytest.mark.django_db(databases=["analytics", "default"])
@pytest.mark.use_analytics_db
def test_migrate_feature_evaluations(mocker: MockerFixture) -> None:
# Given
feature_name = "test_feature_one"
Expand Down
4 changes: 1 addition & 3 deletions api/tests/unit/app_analytics/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@
Resource,
)

pytestmark = pytest.mark.skip_if_no_analytics_db
pytestmark = pytest.mark.use_analytics_db


@pytest.mark.django_db(databases=["analytics"])
def test_creating_overlapping_api_usage_bucket_raises_error(db): # type: ignore[no-untyped-def]
# Given
created_at = timezone.now()
Expand Down Expand Up @@ -40,7 +39,6 @@ def test_creating_overlapping_api_usage_bucket_raises_error(db): # type: ignore
)


@pytest.mark.django_db(databases=["analytics"])
def test_creating_overlapping_feature_evaluation_bucket_raises_error(db): # type: ignore[no-untyped-def]
# Given
created_at = timezone.now()
Expand Down
26 changes: 13 additions & 13 deletions api/tests/unit/app_analytics/test_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from app_analytics.types import TrackFeatureEvaluationsByEnvironmentData
from environments.models import Environment

pytestmark = pytest.mark.skip_if_no_analytics_db
pytestmark = pytest.mark.use_analytics_db


def _create_api_usage_event(environment_id: int, when: datetime) -> APIUsageRaw:
Expand All @@ -40,7 +40,7 @@ def _create_api_usage_event(environment_id: int, when: datetime) -> APIUsageRaw:


@pytest.mark.freeze_time("2023-01-19T09:09:47.325132+00:00")
@pytest.mark.django_db(databases=["analytics"])
@pytest.mark.use_analytics_db
def test_populate_api_usage_bucket_multiple_runs(
freezer: FrozenDateTimeFactory,
) -> None:
Expand Down Expand Up @@ -113,7 +113,7 @@ def test_populate_api_usage_bucket_multiple_runs(
[(15, 60), (10, 60), (10, 30), (30, 30), (60, 60), (10, 10), (60, 60 * 4)],
)
@pytest.mark.freeze_time("2023-01-19T09:09:47.325132+00:00")
@pytest.mark.django_db(databases=["analytics"])
@pytest.mark.use_analytics_db
def test_populate_api_usage_bucket(
freezer: FrozenDateTimeFactory,
bucket_size: int,
Expand Down Expand Up @@ -153,7 +153,7 @@ def test_populate_api_usage_bucket(
assert bucket.total_count == bucket_size


@pytest.mark.django_db(databases=["analytics", "default"])
@pytest.mark.use_analytics_db
def test_track_request__postgres__inserts_expected(
settings: SettingsWrapper,
environment: Environment,
Expand Down Expand Up @@ -205,7 +205,7 @@ def test_track_request__influx__calls_expected(
)


@pytest.mark.django_db(databases=["analytics"])
@pytest.mark.use_analytics_db
def test_track_feature_evaluation(settings: SettingsWrapper) -> None:
# Given
settings.USE_POSTGRES_FOR_ANALYTICS = True
Expand Down Expand Up @@ -244,7 +244,7 @@ def test_track_feature_evaluation(settings: SettingsWrapper) -> None:
)


@pytest.mark.django_db(databases=["analytics"])
@pytest.mark.use_analytics_db
def test_track_feature_evaluation__influx__calls_expected(
settings: SettingsWrapper,
mocker: MockerFixture,
Expand Down Expand Up @@ -287,7 +287,7 @@ def test_track_feature_evaluation__influx__calls_expected(


@pytest.mark.freeze_time("2023-01-19T09:09:47.325132+00:00")
@pytest.mark.django_db(databases=["analytics"])
@pytest.mark.use_analytics_db
def test_populate_feature_evaluation_bucket_15m(freezer: FrozenDateTimeFactory) -> None:
# Given
environment_id = 1
Expand Down Expand Up @@ -379,7 +379,7 @@ def test_populate_feature_evaluation_bucket_15m(freezer: FrozenDateTimeFactory)


@pytest.mark.freeze_time("2023-01-19T09:00:00+00:00")
@pytest.mark.django_db(databases=["analytics"])
@pytest.mark.use_analytics_db
def test_populate_feature_evaluation_bucket__upserts_buckets(
freezer: FrozenDateTimeFactory,
) -> None:
Expand Down Expand Up @@ -415,7 +415,7 @@ def test_populate_feature_evaluation_bucket__upserts_buckets(


@pytest.mark.freeze_time("2023-01-19T09:00:00+00:00")
@pytest.mark.django_db(databases=["analytics"])
@pytest.mark.use_analytics_db
def test_populate_feature_evaluation_bucket__source_bucket_size__returns_expected(
freezer: FrozenDateTimeFactory,
) -> None:
Expand Down Expand Up @@ -465,7 +465,7 @@ def test_populate_feature_evaluation_bucket__source_bucket_size__returns_expecte


@pytest.mark.freeze_time("2023-01-19T09:00:00+00:00")
@pytest.mark.django_db(databases=["analytics"])
@pytest.mark.use_analytics_db
def test_populate_api_usage_bucket__upserts_buckets(
freezer: FrozenDateTimeFactory,
) -> None:
Expand Down Expand Up @@ -501,7 +501,7 @@ def test_populate_api_usage_bucket__upserts_buckets(


@pytest.mark.freeze_time("2023-01-19T09:00:00+00:00")
@pytest.mark.django_db(databases=["analytics"])
@pytest.mark.use_analytics_db
def test_populate_api_usage_bucket_using_a_bucket(
freezer: FrozenDateTimeFactory,
) -> None:
Expand Down Expand Up @@ -548,7 +548,7 @@ def _create_feature_evaluation_event(
return event


@pytest.mark.django_db(databases=["analytics"])
@pytest.mark.use_analytics_db
def test_clean_up_old_analytics_data_does_nothing_if_no_data() -> None:
# When
clean_up_old_analytics_data()
Expand All @@ -557,7 +557,7 @@ def test_clean_up_old_analytics_data_does_nothing_if_no_data() -> None:
# no exception was raised


@pytest.mark.django_db(databases=["analytics"])
@pytest.mark.use_analytics_db
def test_clean_up_old_analytics_data_removes_old_data(
settings: SettingsWrapper,
) -> None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -408,8 +408,7 @@ def test_get_total_usage_count_for_non_admin_user_returns_403( # type: ignore[n
assert response.status_code == status.HTTP_403_FORBIDDEN


@pytest.mark.skip_if_no_analytics_db
@pytest.mark.django_db(databases=["default", "analytics"])
@pytest.mark.use_analytics_db
def test_set_sdk_analytics_flags_with_identifier(
api_client: APIClient,
environment: Environment,
Expand Down Expand Up @@ -450,8 +449,7 @@ def test_set_sdk_analytics_flags_with_identifier(
assert feature_evaluation_raw.evaluation_count is feature_request_count # type: ignore[union-attr]


@pytest.mark.skip_if_no_analytics_db
@pytest.mark.django_db(databases=["default", "analytics"])
@pytest.mark.use_analytics_db
def test_set_sdk_analytics_flags_without_identifier(
api_client: APIClient,
environment: Environment,
Expand Down
Loading