diff --git a/lib/cronofy/client.rb b/lib/cronofy/client.rb index a2d023c..a3c9ef3 100644 --- a/lib/cronofy/client.rb +++ b/lib/cronofy/client.rb @@ -863,6 +863,10 @@ def availability(options = {}) translate_available_periods(options[:query_periods] || options[:available_periods]) + if query_slots = options[:query_slots] + translate_query_slots(options:[:query_slots]) + end + response = availability_post("/v1/availability", options) parse_collections( @@ -1717,6 +1721,14 @@ def translate_available_periods(periods) end end + def translate_query_slots(query_slots) + periods.each do |params| + QUERY_SLOTS_TIME_PARAMS.select { |tp| params.key?(tp) }.each do |tp| + params[tp] = to_iso8601(params[tp]) + end + end + end + def map_availability_participants(participants) case participants when Hash @@ -1847,6 +1859,10 @@ def map_availability_sequence(sequence) end }.freeze + QUERY_SLOTS_TIME_PARAMS = %i{ + start + }.freeze + FREE_BUSY_DEFAULT_PARAMS = { tzid: "Etc/UTC" }.freeze FREE_BUSY_TIME_PARAMS = %i{ from diff --git a/spec/lib/cronofy/client_spec.rb b/spec/lib/cronofy/client_spec.rb index f0836a9..6213377 100644 --- a/spec/lib/cronofy/client_spec.rb +++ b/spec/lib/cronofy/client_spec.rb @@ -1783,6 +1783,51 @@ it_behaves_like 'a Cronofy request with mapped return value' end + context 'when given query_slots instead of available_periods with start interval' do + let(:participants) do + { members: %w{acc_567236000909002 acc_678347111010113} } + end + + let(:required_duration) { 60 } + + let(:query_slots) do + [ + { start: Time.parse("2017-01-03T09:00:00Z")}, + { start: Time.parse("2017-01-04T09:00:00Z") }, + ] + end + + let(:request_body) do + { + "participants" => [ + { + "members" => [ + { "sub" => "acc_567236000909002" }, + { "sub" => "acc_678347111010113" } + ], + "required" => "all" + } + ], + "query_slots" => [ + { "start" => "2017-01-03T09:00:00Z" }, + { "start" => "2017-01-04T09:00:00Z" } + ], + "required_duration" => { "minutes" => 60 }, + } + end + + subject do + client.availability( + participants: participants, + required_duration: required_duration, + query_slots: query_slots + ) + end + + it_behaves_like 'a Cronofy request' + it_behaves_like 'a Cronofy request with mapped return value' + end + context "when trying to auth with only an access_token, as originally implemented" do let(:access_token) { "access_token_123"} let(:client) { Cronofy::Client.new(access_token: access_token) } @@ -2363,6 +2408,56 @@ mapped_availability[:query_periods] = mapped_availability.delete(:available_periods) end end + + context 'when passing query slots' do + let(:availability) do + { + participants: [ + { + members: [{ + sub: "acc_567236000909002", + calendar_ids: ["cal_n23kjnwrw2_jsdfjksn234"] + }], + required: 'all' + } + ], + required_duration: { minutes: 60 }, + query_slots: [ + { start: Time.utc(2017, 1, 1, 9, 00) }, + { start: Time.utc(2017, 1, 1, 17, 00) } + ], + buffer: { + before: { minutes: 30 }, + after: { minutes: 45 }, + } + } + end + + let(:mapped_availability) do + { + participants: [ + { + members: [{ + sub: "acc_567236000909002", + calendar_ids: ["cal_n23kjnwrw2_jsdfjksn234"] + }], + required: 'all' + } + ], + required_duration: { minutes: 60 }, + buffer: { + before: { minutes: 30 }, + after: { minutes: 45 }, + }, + query_slots: [ + { start: Time.utc(2017, 1, 1, 9, 00) }, + { start: Time.utc(2017, 1, 1, 17, 00) } + ], + } + it_behaves_like 'a Cronofy request' + it_behaves_like 'a Cronofy request with mapped return value' + end + end end describe "#get_real_time_scheduling_status" do