Skip to content
Merged
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
35 changes: 35 additions & 0 deletions api/tests/unit/experimentation/test_metric_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from typing import TYPE_CHECKING

import pytest
from django.db import connection
from django.test.utils import CaptureQueriesContext
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APIClient
Expand Down Expand Up @@ -325,6 +327,39 @@ def test_list_metrics__no_active_attachment__empty_experiments(
assert response.json()["results"][0]["experiments"] == []


def test_list_metrics__multiple_attachments__no_n_plus_one(
admin_client_new: APIClient,
environment: Environment,
experiment: Experiment,
enable_features: "EnableFeaturesFixture",
) -> None:
# Given
enable_features(EXPERIMENT_FLAG)
metric = _metric(environment, "first")
ExperimentMetric.objects.create(
experiment=experiment,
metric=metric,
expected_direction=ExpectedDirection.INCREASE,
)
admin_client_new.get(_list_url(environment))
with CaptureQueriesContext(connection) as one_metric:
admin_client_new.get(_list_url(environment))

# When
for index in range(3):
extra = _metric(environment, f"extra-{index}")
ExperimentMetric.objects.create(
experiment=experiment,
metric=extra,
expected_direction=ExpectedDirection.INCREASE,
)
with CaptureQueriesContext(connection) as many_metrics:
admin_client_new.get(_list_url(environment))

# Then
assert len(many_metrics) == len(one_metric)


def test_update_metric__patch__updates_and_audits(
admin_client_new: APIClient,
environment: Environment,
Expand Down
Loading