Skip to content
Merged
Show file tree
Hide file tree
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
2 changes: 1 addition & 1 deletion src/main/kotlin/com/nylas/models/Event.kt
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ data class Event(
@Json(name = "reminders")
val reminders: Reminders? = null,
/**
* Status of the event.
* Status of the event. Possible values: "confirmed", "tentative", "cancelled", "maybe".
*/
@Json(name = "status")
val status: EventStatus? = null,
Expand Down
7 changes: 7 additions & 0 deletions src/main/kotlin/com/nylas/models/EventStatus.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ enum class EventStatus {
@Json(name = "confirmed")
CONFIRMED,

@Json(name = "maybe")
MAYBE,

@Deprecated(
message = "Use MAYBE instead. TENTATIVE is a legacy alias and will be removed in a future release.",
replaceWith = ReplaceWith("MAYBE"),
)
@Json(name = "tentative")
TENTATIVE,

Expand Down
37 changes: 37 additions & 0 deletions src/main/kotlin/com/nylas/util/EventStatusJsonAdapter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.nylas.util

import com.nylas.models.EventStatus
import com.squareup.moshi.FromJson
import com.squareup.moshi.JsonReader
import com.squareup.moshi.JsonWriter
import com.squareup.moshi.ToJson

/**
* Normalizes legacy event status values and avoids failing deserialization on new values.
*/
class EventStatusJsonAdapter {
@FromJson
fun fromJson(reader: JsonReader): EventStatus? {
if (reader.peek() == JsonReader.Token.NULL) {
return reader.nextNull()
}

return when (reader.nextString()) {
"confirmed" -> EventStatus.CONFIRMED
"maybe", "tentative" -> EventStatus.MAYBE
"cancelled" -> EventStatus.CANCELLED
else -> null
}
}

@ToJson
@Suppress("DEPRECATION")
fun toJson(writer: JsonWriter, value: EventStatus?) {
when (value) {
null -> writer.nullValue()
EventStatus.CONFIRMED -> writer.value("confirmed")
EventStatus.MAYBE, EventStatus.TENTATIVE -> writer.value("maybe")
EventStatus.CANCELLED -> writer.value("cancelled")
}
}
}
1 change: 1 addition & 0 deletions src/main/kotlin/com/nylas/util/JsonHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class JsonHelper {
.add(IMessageAdapter())
.add(UpdateConnectorAdapter())
.add(CredentialDataAdapter())
.add(EventStatusJsonAdapter())
.add(CreateAttachmentRequestAdapter())
.add(MicrosoftAdminConsentCredentialDataAdapter())
.add(GoogleServiceAccountCredentialDataAdapter())
Expand Down
84 changes: 84 additions & 0 deletions src/test/kotlin/com/nylas/resources/EventsTests.kt
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,90 @@ class EventsTests {
assertEquals("2024-06-18", whenDate.date)
}

@Test
fun `Event deserializes maybe status properly`() {
val adapter = JsonHelper.moshi().adapter(Event::class.java)
val jsonBuffer =
Buffer().writeUtf8(
"""
{
"id": "5d3qmne77v32r8l4phyuksl2x",
"grant_id": "41009df5-bf11-4c97-aa18-b285b5f2e386",
"calendar_id": "7d93zl2palhxqdy6e5qinsakt",
"object": "event",
"status": "maybe",
"when": {
"date": "2024-06-18",
"object": "date"
}
}
""".trimIndent(),
)

val event = adapter.fromJson(jsonBuffer)!!

assertEquals(EventStatus.MAYBE, event.status)
}

@Test
fun `Event deserializes tentative status as maybe`() {
val adapter = JsonHelper.moshi().adapter(Event::class.java)
val jsonBuffer =
Buffer().writeUtf8(
"""
{
"id": "5d3qmne77v32r8l4phyuksl2x",
"grant_id": "41009df5-bf11-4c97-aa18-b285b5f2e386",
"calendar_id": "7d93zl2palhxqdy6e5qinsakt",
"object": "event",
"status": "tentative",
"when": {
"date": "2024-06-18",
"object": "date"
}
}
""".trimIndent(),
)

val event = adapter.fromJson(jsonBuffer)!!

assertEquals(EventStatus.MAYBE, event.status)
}

@Test
fun `Event deserializes unknown status as null`() {
val adapter = JsonHelper.moshi().adapter(Event::class.java)
val jsonBuffer =
Buffer().writeUtf8(
"""
{
"id": "5d3qmne77v32r8l4phyuksl2x",
"grant_id": "41009df5-bf11-4c97-aa18-b285b5f2e386",
"calendar_id": "7d93zl2palhxqdy6e5qinsakt",
"object": "event",
"status": "unexpected_status",
"when": {
"date": "2024-06-18",
"object": "date"
}
}
""".trimIndent(),
)

val event = adapter.fromJson(jsonBuffer)!!

assertEquals(null, event.status)
}

@Suppress("DEPRECATION")
@Test
fun `Event status serializes tentative as maybe`() {
val adapter = JsonHelper.moshi().adapter(EventStatus::class.java)

assertEquals("\"maybe\"", adapter.toJson(EventStatus.MAYBE))
assertEquals("\"maybe\"", adapter.toJson(EventStatus.TENTATIVE))
}

@Test
fun `CreateEventAutoConferencingProvider serializes properly`() {
val adapter = JsonHelper.moshi().adapter(CreateEventAutoConferencingProvider::class.java)
Expand Down
Loading