From 47eb149ffa6840a2f36f2378737b8aa0ce4b2199 Mon Sep 17 00:00:00 2001 From: Matthew Elwell Date: Tue, 25 Jun 2024 11:33:58 +0100 Subject: [PATCH] fix: versioning webhooks and update test to correctly test end to end (#4221) --- api/features/versioning/tasks.py | 2 +- .../versioning/test_unit_versioning_tasks.py | 23 +++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/api/features/versioning/tasks.py b/api/features/versioning/tasks.py index c4e8ba147d12..97032ccdffd7 100644 --- a/api/features/versioning/tasks.py +++ b/api/features/versioning/tasks.py @@ -130,7 +130,7 @@ def trigger_update_version_webhooks(environment_feature_version_uuid: str) -> No data = environment_feature_version_webhook_schema.dump(environment_feature_version) call_environment_webhooks( - environment=environment_feature_version.environment_id, + environment_id=environment_feature_version.environment_id, data=data, event_type=WebhookEventType.NEW_VERSION_PUBLISHED.value, ) diff --git a/api/tests/unit/features/versioning/test_unit_versioning_tasks.py b/api/tests/unit/features/versioning/test_unit_versioning_tasks.py index 23178455551c..d15867ae3ad1 100644 --- a/api/tests/unit/features/versioning/test_unit_versioning_tasks.py +++ b/api/tests/unit/features/versioning/test_unit_versioning_tasks.py @@ -1,11 +1,13 @@ +import json from datetime import timedelta import freezegun +import responses from django.utils import timezone from pytest_mock import MockerFixture from environments.identities.models import Identity -from environments.models import Environment +from environments.models import Environment, Webhook from features.models import Feature, FeatureSegment, FeatureState from features.versioning.models import EnvironmentFeatureVersion from features.versioning.tasks import ( @@ -140,6 +142,7 @@ def test_disable_v2_versioning( assert unaffected_environment.feature_segments.count() == 1 +@responses.activate def test_trigger_update_version_webhooks( environment_v2_versioning: Environment, feature: Feature, mocker: MockerFixture ) -> None: @@ -149,17 +152,19 @@ def test_trigger_update_version_webhooks( ) feature_state = version.feature_states.first() - mock_call_environment_webhooks = mocker.patch( - "features.versioning.tasks.call_environment_webhooks" - ) + webhook_url = "https://example.com/webhook/" + Webhook.objects.create(environment=environment_v2_versioning, url=webhook_url) + + responses.post(url=webhook_url, status=200) # When trigger_update_version_webhooks(str(version.uuid)) # Then - mock_call_environment_webhooks.assert_called_once_with( - environment=environment_v2_versioning.id, - data={ + assert len(responses.calls) == 1 + assert responses.calls[0].request.url == webhook_url + assert json.loads(responses.calls[0].request.body) == { + "data": { "uuid": str(version.uuid), "feature": {"id": feature.id, "name": feature.name}, "published_by": None, @@ -170,8 +175,8 @@ def test_trigger_update_version_webhooks( } ], }, - event_type=WebhookEventType.NEW_VERSION_PUBLISHED.value, - ) + "event_type": WebhookEventType.NEW_VERSION_PUBLISHED.name, + } def test_enable_v2_versioning_for_scheduled_changes(