From acc692a253a4b62880e446edec2f2d4a079b0fe0 Mon Sep 17 00:00:00 2001 From: Damien Coraboeuf Date: Wed, 10 Jul 2024 11:49:10 +0200 Subject: [PATCH] #1322 Fixing backward compatibility issue --- .../EventSubscriptionMutations.kt | 29 ++++++--- .../EventSubscriptionMutationsIT.kt | 61 +++++++++++++++++++ 2 files changed, 83 insertions(+), 7 deletions(-) diff --git a/ontrack-extension-notifications/src/main/java/net/nemerosa/ontrack/extension/notifications/subscriptions/EventSubscriptionMutations.kt b/ontrack-extension-notifications/src/main/java/net/nemerosa/ontrack/extension/notifications/subscriptions/EventSubscriptionMutations.kt index 562b2b9e0b..5d305ec7be 100644 --- a/ontrack-extension-notifications/src/main/java/net/nemerosa/ontrack/extension/notifications/subscriptions/EventSubscriptionMutations.kt +++ b/ontrack-extension-notifications/src/main/java/net/nemerosa/ontrack/extension/notifications/subscriptions/EventSubscriptionMutations.kt @@ -57,15 +57,30 @@ class EventSubscriptionMutations( } val entity: ProjectEntity = type.loadByNames(structureService, names) ?: throw EntityNotFoundByNameException(type, names) + // Extracting the fields + // Creates the payload + val name = getMutationInputField(env, SubscribeToEventsInput::name.name) + val channel = getRequiredMutationInputField(env, SubscribeToEventsInput::channel.name) + val channelConfig = + getRequiredMutationInputField(env, SubscribeToEventsInput::channelConfig.name) + val events = getRequiredMutationInputField>(env, SubscribeToEventsInput::events.name) + val keywords = getMutationInputField(env, SubscribeToEventsInput::keywords.name) + val contentTemplate = getMutationInputField(env, SubscribeToEventsInput::contentTemplate.name) val payload = createEventSubscriptionPayload( projectEntity = entity, - name = getRequiredMutationInputField(env, SubscribeToEventsInput::name.name), - channel = getRequiredMutationInputField(env, SubscribeToEventsInput::channel.name), - channelConfig = getRequiredMutationInputField(env, SubscribeToEventsInput::channelConfig.name), - events = getRequiredMutationInputField(env, SubscribeToEventsInput::events.name), - keywords = getMutationInputField(env, SubscribeToEventsInput::keywords.name), - contentTemplate = getMutationInputField(env, SubscribeToEventsInput::contentTemplate.name), + name = name ?: EventSubscription.computeName( + events = events, + keywords = keywords, + channel = channel, + channelConfig = channelConfig, + contentTemplate = contentTemplate, + ), + channel = channel, + channelConfig = channelConfig, + events = events, + keywords = keywords, + contentTemplate = contentTemplate, ) // OK return mapOf("subscription" to payload) @@ -295,7 +310,7 @@ data class SubscribeToEventsInput( @TypeRef(embedded = true, suffix = "Input") val projectEntity: ProjectEntityID?, @APIDescription("Unique name of the channel in its scope (null for backward compatibility, will be required in V5)") - val name: String?, + val name: String? = null, @APIDescription("Channel to send this event to") val channel: String, @APIDescription("Channel configuration") diff --git a/ontrack-extension-notifications/src/test/java/net/nemerosa/ontrack/extension/notifications/subscriptions/EventSubscriptionMutationsIT.kt b/ontrack-extension-notifications/src/test/java/net/nemerosa/ontrack/extension/notifications/subscriptions/EventSubscriptionMutationsIT.kt index 686a6ce667..b9304bfada 100644 --- a/ontrack-extension-notifications/src/test/java/net/nemerosa/ontrack/extension/notifications/subscriptions/EventSubscriptionMutationsIT.kt +++ b/ontrack-extension-notifications/src/test/java/net/nemerosa/ontrack/extension/notifications/subscriptions/EventSubscriptionMutationsIT.kt @@ -121,6 +121,67 @@ class EventSubscriptionMutationsIT : AbstractNotificationTestSupport() { } } + @Test + fun `Subscription name is not required yet and can be omitted`() { + asAdmin { + project { + branch { + run( + """ + mutation { + subscribeBranchToEvents(input: { + project: "${project.name}", + branch: "$name", + channel: "mock", + channelConfig: { + target: "#test" + }, + events: [ + "new_promotion_run" + ], + keywords: "GOLD", + }) { + errors { + message + exception + } + subscription { + id + name + } + } + } + """ + ) { data -> + checkGraphQLUserErrors(data, "subscribeBranchToEvents") { payload -> + val id = payload.getRequiredJsonField("subscription").getRequiredTextField("id") + val name = payload.getRequiredJsonField("subscription").getRequiredTextField("name") + assertEquals(name, id) + val subscription: EventSubscription = + eventSubscriptionService.getSubscriptionByName(this, name) + assertEquals( + setOf( + "new_promotion_run" + ), + subscription.events + ) + assertEquals(this, subscription.projectEntity) + assertEquals("GOLD", subscription.keywords) + assertEquals( + "mock", + subscription.channel + ) + assertEquals( + mapOf("target" to "#test").asJson(), + subscription.channelConfig + ) + } + } + } + } + } + } + @Test fun `Settings subscriptions using the promotion level mutation`() { asAdmin {