@@ -105,14 +105,15 @@ class CalendarsTest {
105105 @Nested
106106 inner class SpecificTimeAvailabilityTests {
107107 @Test
108- fun `SpecificTimeAvailability serializes properly` () {
108+ fun `SpecificTimeAvailability deserializes properly` () {
109109 val adapter = JsonHelper .moshi().adapter(SpecificTimeAvailability ::class .java)
110110 val jsonBuffer = Buffer ().writeUtf8(
111111 """
112112 {
113113 "date": "2026-03-18",
114114 "start": "09:00",
115- "end": "17:00"
115+ "end": "17:00",
116+ "timezone": "America/Toronto"
116117 }
117118 """ .trimIndent(),
118119 )
@@ -122,6 +123,7 @@ class CalendarsTest {
122123 assertEquals(" 2026-03-18" , specificTimeAvailability.date)
123124 assertEquals(" 09:00" , specificTimeAvailability.start)
124125 assertEquals(" 17:00" , specificTimeAvailability.end)
126+ assertEquals(" America/Toronto" , specificTimeAvailability.timezone)
125127 }
126128
127129 @Test
@@ -131,10 +133,11 @@ class CalendarsTest {
131133 date = " 2026-03-18" ,
132134 start = " 09:00" ,
133135 end = " 17:00" ,
136+ timezone = " America/Toronto" ,
134137 )
135138
136139 val json = adapter.toJson(specificTimeAvailability)
137- assertEquals(""" {"date":"2026-03-18","start":"09:00","end":"17:00"}""" , json)
140+ assertEquals(""" {"date":"2026-03-18","start":"09:00","end":"17:00","timezone":"America/Toronto" }""" , json)
138141 }
139142
140143 @Test
@@ -144,13 +147,15 @@ class CalendarsTest {
144147 date = " 2026-03-18" ,
145148 start = " 09:00" ,
146149 end = " 17:00" ,
150+ timezone = " America/Toronto" ,
147151 )
148152
149153 val json = adapter.toJson(original)
150154 val deserialized = adapter.fromJson(json)!!
151155 assertEquals(original.date, deserialized.date)
152156 assertEquals(original.start, deserialized.start)
153157 assertEquals(original.end, deserialized.end)
158+ assertEquals(original.timezone, deserialized.timezone)
154159 }
155160
156161 @Test
@@ -159,15 +164,17 @@ class CalendarsTest {
159164 date = " 2026-03-18" ,
160165 start = " 09:00" ,
161166 end = " 17:00" ,
167+ timezone = " America/Toronto" ,
162168 ).build()
163169
164170 assertEquals(" 2026-03-18" , specificTimeAvailability.date)
165171 assertEquals(" 09:00" , specificTimeAvailability.start)
166172 assertEquals(" 17:00" , specificTimeAvailability.end)
173+ assertEquals(" America/Toronto" , specificTimeAvailability.timezone)
167174 }
168175
169176 @Test
170- fun `AvailabilityParticipant serializes with specificTimeAvailability` () {
177+ fun `AvailabilityParticipant serializes with specificTimeAvailability and onlySpecificTimeAvailability ` () {
171178 val adapter = JsonHelper .moshi().adapter(AvailabilityParticipant ::class .java)
172179 val participant = AvailabilityParticipant (
173180 email = " test@nylas.com" ,
@@ -177,8 +184,10 @@ class CalendarsTest {
177184 date = " 2026-03-18" ,
178185 start = " 09:00" ,
179186 end = " 17:00" ,
187+ timezone = " America/Toronto" ,
180188 ),
181189 ),
190+ onlySpecificTimeAvailability = true ,
182191 )
183192
184193 val json = adapter.toJson(participant)
@@ -188,10 +197,12 @@ class CalendarsTest {
188197 assertEquals(" 2026-03-18" , deserialized.specificTimeAvailability?.get(0 )?.date)
189198 assertEquals(" 09:00" , deserialized.specificTimeAvailability?.get(0 )?.start)
190199 assertEquals(" 17:00" , deserialized.specificTimeAvailability?.get(0 )?.end)
200+ assertEquals(" America/Toronto" , deserialized.specificTimeAvailability?.get(0 )?.timezone)
201+ assertEquals(true , deserialized.onlySpecificTimeAvailability)
191202 }
192203
193204 @Test
194- fun `AvailabilityParticipant serializes without specificTimeAvailability for backward compatibility` () {
205+ fun `AvailabilityParticipant serializes without new fields for backward compatibility` () {
195206 val adapter = JsonHelper .moshi().adapter(AvailabilityParticipant ::class .java)
196207 val participant = AvailabilityParticipant (
197208 email = " test@nylas.com" ,
@@ -202,11 +213,12 @@ class CalendarsTest {
202213 val deserialized = adapter.fromJson(json)!!
203214 assertEquals(" test@nylas.com" , deserialized.email)
204215 assertEquals(null , deserialized.specificTimeAvailability)
216+ assertEquals(null , deserialized.onlySpecificTimeAvailability)
205217 assertEquals(null , deserialized.openHours)
206218 }
207219
208220 @Test
209- fun `AvailabilityParticipant deserializes JSON with specific_time_availability ` () {
221+ fun `AvailabilityParticipant deserializes JSON with all new fields ` () {
210222 val adapter = JsonHelper .moshi().adapter(AvailabilityParticipant ::class .java)
211223 val jsonBuffer = Buffer ().writeUtf8(
212224 """
@@ -217,9 +229,11 @@ class CalendarsTest {
217229 {
218230 "date": "2026-03-18",
219231 "start": "09:00",
220- "end": "17:00"
232+ "end": "17:00",
233+ "timezone": "America/Toronto"
221234 }
222- ]
235+ ],
236+ "only_specific_time_availability": true
223237 }
224238 """ .trimIndent(),
225239 )
@@ -231,10 +245,12 @@ class CalendarsTest {
231245 assertEquals(" 2026-03-18" , participant.specificTimeAvailability?.get(0 )?.date)
232246 assertEquals(" 09:00" , participant.specificTimeAvailability?.get(0 )?.start)
233247 assertEquals(" 17:00" , participant.specificTimeAvailability?.get(0 )?.end)
248+ assertEquals(" America/Toronto" , participant.specificTimeAvailability?.get(0 )?.timezone)
249+ assertEquals(true , participant.onlySpecificTimeAvailability)
234250 }
235251
236252 @Test
237- fun `AvailabilityParticipant deserializes JSON without specific_time_availability for backward compatibility` () {
253+ fun `AvailabilityParticipant deserializes JSON without new fields for backward compatibility` () {
238254 val adapter = JsonHelper .moshi().adapter(AvailabilityParticipant ::class .java)
239255 val jsonBuffer = Buffer ().writeUtf8(
240256 """
@@ -248,10 +264,11 @@ class CalendarsTest {
248264 val participant = adapter.fromJson(jsonBuffer)!!
249265 assertEquals(" test@nylas.com" , participant.email)
250266 assertEquals(null , participant.specificTimeAvailability)
267+ assertEquals(null , participant.onlySpecificTimeAvailability)
251268 }
252269
253270 @Test
254- fun `AvailabilityParticipant Builder works with specificTimeAvailability ` () {
271+ fun `AvailabilityParticipant Builder works with all new fields ` () {
255272 val participant = AvailabilityParticipant .Builder (" test@nylas.com" )
256273 .calendarIds(listOf (" primary" ))
257274 .specificTimeAvailability(
@@ -260,9 +277,11 @@ class CalendarsTest {
260277 date = " 2026-03-18" ,
261278 start = " 09:00" ,
262279 end = " 17:00" ,
280+ timezone = " America/Toronto" ,
263281 ),
264282 ),
265283 )
284+ .onlySpecificTimeAvailability(true )
266285 .build()
267286
268287 assertEquals(" test@nylas.com" , participant.email)
@@ -271,16 +290,19 @@ class CalendarsTest {
271290 assertEquals(" 2026-03-18" , participant.specificTimeAvailability?.get(0 )?.date)
272291 assertEquals(" 09:00" , participant.specificTimeAvailability?.get(0 )?.start)
273292 assertEquals(" 17:00" , participant.specificTimeAvailability?.get(0 )?.end)
293+ assertEquals(" America/Toronto" , participant.specificTimeAvailability?.get(0 )?.timezone)
294+ assertEquals(true , participant.onlySpecificTimeAvailability)
274295 }
275296
276297 @Test
277- fun `AvailabilityParticipant Builder works without specificTimeAvailability for backward compatibility` () {
298+ fun `AvailabilityParticipant Builder works without new fields for backward compatibility` () {
278299 val participant = AvailabilityParticipant .Builder (" test@nylas.com" )
279300 .calendarIds(listOf (" calendar-123" ))
280301 .build()
281302
282303 assertEquals(" test@nylas.com" , participant.email)
283304 assertEquals(null , participant.specificTimeAvailability)
305+ assertEquals(null , participant.onlySpecificTimeAvailability)
284306 }
285307 }
286308
@@ -527,19 +549,21 @@ class CalendarsTest {
527549 fun `getting availability with specificTimeAvailability calls requests with the correct params` () {
528550 val adapter = JsonHelper .moshi().adapter(GetAvailabilityRequest ::class .java)
529551 val getAvailabilityRequest = GetAvailabilityRequest (
530- startTime = 1737540000 ,
531- endTime = 1737712800 ,
552+ startTime = 1773248400 ,
553+ endTime = 1774458000 ,
532554 participants = listOf (
533555 AvailabilityParticipant (
534- email = " nylastest8 @gmail.com" ,
556+ email = " teotoplak95 @gmail.com" ,
535557 calendarIds = listOf (" primary" ),
536558 specificTimeAvailability = listOf (
537559 SpecificTimeAvailability (
538560 date = " 2026-03-18" ,
539561 start = " 09:00" ,
540562 end = " 17:00" ,
563+ timezone = " America/Toronto" ,
541564 ),
542565 ),
566+ onlySpecificTimeAvailability = true ,
543567 ),
544568 ),
545569 durationMinutes = 30 ,
0 commit comments