@@ -182,6 +182,54 @@ class ConfigurationsTest {
182182 assertEquals(" Test" , config.participants.first().name)
183183 assertEquals(" " , config.participants.first().timezone)
184184 }
185+
186+ @Test
187+ fun `EmailTemplate with new fields serializes properly` () {
188+ val adapter = JsonHelper .moshi().adapter(EmailTemplate ::class .java)
189+ val jsonBuffer = Buffer ().writeUtf8(
190+ """
191+ {
192+ "booking_confirmed": {
193+ "title": "Custom Booking Title",
194+ "body": "Thank you for booking with us!"
195+ },
196+ "logo": "https://example.com/logo.png",
197+ "show_nylas_branding": false
198+ }
199+ """ .trimIndent(),
200+ )
201+
202+ val emailTemplate = adapter.fromJson(jsonBuffer)!!
203+ assertIs<EmailTemplate >(emailTemplate)
204+ assertEquals(" https://example.com/logo.png" , emailTemplate.logo)
205+ assertEquals(false , emailTemplate.showNylasBranding)
206+ assertEquals(" Custom Booking Title" , emailTemplate.bookingConfirmed?.title)
207+ assertEquals(" Thank you for booking with us!" , emailTemplate.bookingConfirmed?.body)
208+
209+ // Test serialization back to JSON
210+ val serializedJson = adapter.toJson(emailTemplate)
211+ assert (serializedJson.contains(" \" logo\" :\" https://example.com/logo.png\" " ))
212+ assert (serializedJson.contains(" \" show_nylas_branding\" :false" ))
213+ }
214+
215+ @Test
216+ fun `EmailTemplate Builder works correctly` () {
217+ val bookingConfirmed = BookingConfirmedTemplate (
218+ title = " Custom Title" ,
219+ body = " Custom Body" ,
220+ )
221+
222+ val emailTemplate = EmailTemplate .Builder ()
223+ .bookingConfirmed(bookingConfirmed)
224+ .logo(" https://company.com/logo.svg" )
225+ .showNylasBranding(true )
226+ .build()
227+
228+ assertEquals(" https://company.com/logo.svg" , emailTemplate.logo)
229+ assertEquals(true , emailTemplate.showNylasBranding)
230+ assertEquals(" Custom Title" , emailTemplate.bookingConfirmed?.title)
231+ assertEquals(" Custom Body" , emailTemplate.bookingConfirmed?.body)
232+ }
185233 }
186234
187235 @Nested
@@ -402,5 +450,85 @@ class ConfigurationsTest {
402450 assertEquals(" v3/grants/$grantId /scheduling/configurations/$configId " , pathCaptor.firstValue)
403451 assertEquals(DeleteResponse ::class .java, typeCaptor.firstValue)
404452 }
453+
454+ @Test
455+ fun `creating a configuration with custom email template calls requests with the correct params` () {
456+ val adapter = JsonHelper .moshi().adapter(CreateConfigurationRequest ::class .java)
457+ val participantCalendarIds = ArrayList <String >()
458+ participantCalendarIds.add(" primary" )
459+
460+ val configurationAvailabilityParticipant = ConfigurationAvailabilityParticipant .Builder ().calendarIds(participantCalendarIds).build()
461+
462+ val configurationBookingParticipant = ConfigurationBookingParticipant .Builder ().calendarId(" primary" ).build()
463+
464+ val configurationParticipant
= ConfigurationParticipant .
Builder (
" [email protected] " )
465+ .availability(configurationAvailabilityParticipant)
466+ .booking(configurationBookingParticipant)
467+ .name(" Test Participant" )
468+ .isOrganizer(true )
469+ .build()
470+
471+ val configurationAvailability = ConfigurationAvailability .Builder ().intervalMinutes(30 ).build()
472+
473+ val configurationEventBooking = ConfigurationEventBooking .Builder ().title(" Test Event Booking" ).build()
474+
475+ // Create EmailTemplate with new logo and showNylasBranding fields
476+ val emailTemplate = EmailTemplate .Builder ()
477+ .logo(" https://company.com/custom-logo.png" )
478+ .showNylasBranding(false )
479+ .bookingConfirmed(
480+ BookingConfirmedTemplate (
481+ title = " Your Meeting is Confirmed" ,
482+ body = " Thank you for booking! We look forward to meeting with you." ,
483+ ),
484+ )
485+ .build()
486+
487+ // Create scheduler settings with the email template
488+ val schedulerSettings = ConfigurationSchedulerSettings .Builder ()
489+ .emailTemplate(emailTemplate)
490+ .availableDaysInFuture(14 )
491+ .minBookingNotice(120 )
492+ .build()
493+
494+ val participants = ArrayList <ConfigurationParticipant >()
495+ participants.add(configurationParticipant)
496+
497+ val createConfigurationRequest = CreateConfigurationRequest .Builder (
498+ participants,
499+ configurationAvailability,
500+ configurationEventBooking,
501+ )
502+ .name(" Configuration with Custom Email Template" )
503+ .scheduler(schedulerSettings)
504+ .build()
505+
506+ configurations.create(grantId, createConfigurationRequest)
507+
508+ val pathCaptor = argumentCaptor<String >()
509+ val typeCaptor = argumentCaptor<Type >()
510+ val requestBodyCaptor = argumentCaptor<String >()
511+ val queryParamCaptor = argumentCaptor<ListConfigurationsQueryParams >()
512+ val overrideParamCaptor = argumentCaptor<RequestOverrides >()
513+ verify(mockNylasClient).executePost<Response <Configuration >>(
514+ pathCaptor.capture(),
515+ typeCaptor.capture(),
516+ requestBodyCaptor.capture(),
517+ queryParamCaptor.capture(),
518+ overrideParamCaptor.capture(),
519+ )
520+
521+ assertEquals(" v3/grants/$grantId /scheduling/configurations" , pathCaptor.firstValue)
522+ assertEquals(Types .newParameterizedType(Response ::class .java, Configuration ::class .java), typeCaptor.firstValue)
523+
524+ val serializedRequest = adapter.toJson(createConfigurationRequest)
525+ assertEquals(serializedRequest, requestBodyCaptor.firstValue)
526+
527+ // Verify that the JSON contains the new EmailTemplate fields
528+ assert (serializedRequest.contains(" \" logo\" :\" https://company.com/custom-logo.png\" " ))
529+ assert (serializedRequest.contains(" \" show_nylas_branding\" :false" ))
530+ assert (serializedRequest.contains(" \" booking_confirmed\" " ))
531+ assert (serializedRequest.contains(" Your Meeting is Confirmed" ))
532+ }
405533 }
406534}
0 commit comments