From 30c5d60cdcf35c7e69bf7f4f20f3871726b3e5fa Mon Sep 17 00:00:00 2001 From: Aaron de Mello Date: Fri, 17 Jan 2025 16:04:06 -0500 Subject: [PATCH] Fixed issue where reminders were not being updated correctly when updating an event --- CHANGELOG.md | 1 + .../com/nylas/models/UpdateEventRequest.kt | 17 ----- .../kotlin/com/nylas/resources/EventsTests.kt | 70 +++++++++++++++++++ 3 files changed, 71 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9cf24ec..0fe33223 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Unreleased * Added pagination support for folders +* Fixed issue where reminders were not being updated correctly when updating an event ### [2.5.2] - Released 2024-12-02 * Added support for `skypeForConsumer` as conferencing provider diff --git a/src/main/kotlin/com/nylas/models/UpdateEventRequest.kt b/src/main/kotlin/com/nylas/models/UpdateEventRequest.kt index 5b1cab29..f1f644cc 100644 --- a/src/main/kotlin/com/nylas/models/UpdateEventRequest.kt +++ b/src/main/kotlin/com/nylas/models/UpdateEventRequest.kt @@ -495,23 +495,6 @@ data class UpdateEventRequest( } } - /** - * Class representing the reminders field of an event. - */ - data class Reminders( - /** - * Whether to use the default reminders for the calendar. - * When true, uses the default reminder settings for the calendar - */ - @Json(name = "use_default") - val useDefault: Boolean? = null, - /** - * A list of reminders for the event if useDefault is set to false. - */ - @Json(name = "override") - val override: List? = null, - ) - /** * Builder for [UpdateEventRequest]. */ diff --git a/src/test/kotlin/com/nylas/resources/EventsTests.kt b/src/test/kotlin/com/nylas/resources/EventsTests.kt index da21be08..917f031d 100644 --- a/src/test/kotlin/com/nylas/resources/EventsTests.kt +++ b/src/test/kotlin/com/nylas/resources/EventsTests.kt @@ -345,6 +345,76 @@ class EventsTests { assertEquals(adapter.toJson(updateEventRequest), requestBodyCaptor.firstValue) } + @Test + fun `updating event reminders calls requests with the correct params`() { + val eventId = "event-123" + val updateEventRequest = + UpdateEventRequest( + reminders = Reminders( + useDefault = false, + overrides = listOf( + ReminderOverride( + reminderMinutes = 15, + reminderMethod = ReminderMethod.EMAIL, + ), + ReminderOverride( + reminderMinutes = 30, + reminderMethod = ReminderMethod.POPUP, + ), + ), + ), + ) + val updateEventQueryParams = + UpdateEventQueryParams( + calendarId = "calendar-id", + notifyParticipants = true, + ) + + events.update(grantId, eventId, updateEventRequest, updateEventQueryParams) + val pathCaptor = argumentCaptor() + val typeCaptor = argumentCaptor() + val requestBodyCaptor = argumentCaptor() + val queryParamCaptor = argumentCaptor() + val overrideParamCaptor = argumentCaptor() + verify(mockNylasClient).executePut>( + pathCaptor.capture(), + typeCaptor.capture(), + requestBodyCaptor.capture(), + queryParamCaptor.capture(), + overrideParamCaptor.capture(), + ) + + assertEquals("v3/grants/$grantId/events/$eventId", pathCaptor.firstValue) + assertEquals(Types.newParameterizedType(Response::class.java, Event::class.java), typeCaptor.firstValue) + + // Parse both expected and actual JSON into Maps to compare structure while preserving field names + val jsonAdapter = JsonHelper.moshi().adapter(Map::class.java) + val actualJson = jsonAdapter.fromJson(requestBodyCaptor.firstValue)!! + + val expectedJson = mapOf( + "reminders" to mapOf( + "use_default" to false, + "overrides" to listOf( + mapOf( + "reminder_minutes" to 15.0, + "reminder_method" to "email", + ), + mapOf( + "reminder_minutes" to 30.0, + "reminder_method" to "popup", + ), + ), + ), + ) + + assertEquals(expectedJson, actualJson) + + // Also verify that the request can be correctly deserialized + val adapter = JsonHelper.moshi().adapter(UpdateEventRequest::class.java) + val actualRequest = adapter.fromJson(requestBodyCaptor.firstValue) + assertEquals(updateEventRequest, actualRequest) + } + @Test fun `destroying a event calls requests with the correct params`() { val eventId = "event-123"