From 0383ad7f15a12f5387cbc1c8339751701447c47f Mon Sep 17 00:00:00 2001 From: wadii Date: Mon, 8 Jun 2026 13:53:46 +0200 Subject: [PATCH] feat: added tests for n plus 1 queries in metrics view --- .../unit/experimentation/test_metric_views.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/api/tests/unit/experimentation/test_metric_views.py b/api/tests/unit/experimentation/test_metric_views.py index db16d4780590..b7dc642d358a 100644 --- a/api/tests/unit/experimentation/test_metric_views.py +++ b/api/tests/unit/experimentation/test_metric_views.py @@ -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 @@ -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,