Skip to content

Commit

Permalink
Fix calendar availability failing when round_robin is nil (#375)
Browse files Browse the repository at this point in the history
This PR address the issue where, if round_robin is left as nil, it always yields an error. This is because the Nylas Docs were out of date for the availability endpoint. round_robin is optional, and when omitted, returns collective availability. However, sending null is not valid despite what it says in the documentation. Now, we omit the value from the json payload if the value is nil.
  • Loading branch information
mrashed-dev authored Jul 26, 2022
1 parent 03356df commit ce61604
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 26 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

### Unreleased
* Add missing hosted authentication parameters
* Fix calendar availability failing when `round_robin` is `nil`

### 5.11.0 / 2022-07-08
* Add support for event reminders
* Add `metadata` field to `JobStatus`
Expand Down
50 changes: 28 additions & 22 deletions lib/nylas/calendar_collection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,21 @@ def availability(duration_minutes:,
validate_calendars_or_emails(calendars, emails)
validate_open_hours(emails, free_busy, open_hours) unless open_hours.empty?

execute_availability("/calendars/availability",
duration_minutes: duration_minutes,
interval_minutes: interval_minutes,
start_time: start_time,
end_time: end_time,
emails: emails,
buffer: buffer,
round_robin: round_robin,
event_collection_id: event_collection_id,
free_busy: free_busy.map(&:to_h),
open_hours: open_hours.map(&:to_h),
calendars: calendars)
payload = {
duration_minutes: duration_minutes,
interval_minutes: interval_minutes,
start_time: start_time,
end_time: end_time,
emails: emails,
free_busy: free_busy.map(&:to_h),
open_hours: open_hours.map(&:to_h),
calendars: calendars
}
payload[:buffer] = buffer if buffer
payload[:round_robin] = round_robin if round_robin
payload[:event_collection_id] = event_collection_id if event_collection_id

execute_availability("/calendars/availability", **payload)
end

# Check multiple calendars to find availability for multiple meetings with several participants
Expand All @@ -68,16 +71,19 @@ def consecutive_availability(duration_minutes:,
validate_calendars_or_emails(emails, calendars)
validate_open_hours(emails, free_busy, open_hours) unless open_hours.empty?

execute_availability("/calendars/availability/consecutive",
duration_minutes: duration_minutes,
interval_minutes: interval_minutes,
start_time: start_time,
end_time: end_time,
emails: emails,
buffer: buffer,
free_busy: free_busy.map(&:to_h),
open_hours: open_hours.map(&:to_h),
calendars: calendars)
payload = {
duration_minutes: duration_minutes,
interval_minutes: interval_minutes,
start_time: start_time,
end_time: end_time,
emails: emails,
free_busy: free_busy.map(&:to_h),
open_hours: open_hours.map(&:to_h),
calendars: calendars
}
payload[:buffer] = buffer if buffer

execute_availability("/calendars/availability/consecutive", **payload)
end

private
Expand Down
64 changes: 60 additions & 4 deletions spec/nylas/calendar_collection_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,6 @@
start_time: 1590454800,
end_time: 1590780800,
emails: ["[email protected]"],
buffer: 5,
round_robin: "max-fairness",
event_collection_id: "abc-123",
free_busy: [
{
email: "[email protected]",
Expand All @@ -74,6 +71,37 @@
days: [0]
}
],
calendars: [],
buffer: 5,
round_robin: "max-fairness",
event_collection_id: "abc-123"
)
)
end

it "optional params are omitted when getting single availability" do
api = instance_double(Nylas::API, execute: JSON.parse("{}"))
calendar_collection = described_class.new(model: Nylas::Calendar, api: api)

calendar_collection.availability(
duration_minutes: 30,
interval_minutes: 5,
start_time: 1590454800,
end_time: 1590780800,
emails: ["[email protected]"]
)

expect(api).to have_received(:execute).with(
method: :post,
path: "/calendars/availability",
payload: JSON.dump(
duration_minutes: 30,
interval_minutes: 5,
start_time: 1590454800,
end_time: 1590780800,
emails: ["[email protected]"],
free_busy: [],
open_hours: [],
calendars: []
)
)
Expand Down Expand Up @@ -122,7 +150,6 @@
start_time: 1590454800,
end_time: 1590780800,
emails: [["[email protected]"], %w[[email protected] [email protected]]],
buffer: 5,
free_busy: [
{
email: "[email protected]",
Expand All @@ -145,6 +172,35 @@
days: [0]
}
],
calendars: [],
buffer: 5
)
)
end

it "optional params are omitted when getting multiple availability" do
api = instance_double(Nylas::API, execute: JSON.parse("{}"))
calendar_collection = described_class.new(model: Nylas::Calendar, api: api)

calendar_collection.consecutive_availability(
duration_minutes: 30,
interval_minutes: 5,
start_time: 1590454800,
end_time: 1590780800,
emails: [["[email protected]"]]
)

expect(api).to have_received(:execute).with(
method: :post,
path: "/calendars/availability/consecutive",
payload: JSON.dump(
duration_minutes: 30,
interval_minutes: 5,
start_time: 1590454800,
end_time: 1590780800,
emails: [["[email protected]"]],
free_busy: [],
open_hours: [],
calendars: []
)
)
Expand Down

0 comments on commit ce61604

Please sign in to comment.