bookingsync-api 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +13 -0
- data/lib/bookingsync/api/client.rb +21 -0
- data/lib/bookingsync/api/client/conversations.rb +75 -0
- data/lib/bookingsync/api/client/hosts.rb +51 -0
- data/lib/bookingsync/api/client/messages.rb +51 -0
- data/lib/bookingsync/api/client/participants.rb +51 -0
- data/lib/bookingsync/api/version.rb +1 -1
- data/spec/bookingsync/api/client/conversations_spec.rb +124 -0
- data/spec/bookingsync/api/client/hosts_spec.rb +79 -0
- data/spec/bookingsync/api/client/messages_spec.rb +77 -0
- data/spec/bookingsync/api/client/participants_spec.rb +77 -0
- data/spec/bookingsync/api/client_spec.rb +42 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Conversations/_connect_booking_to_conversation/connects_given_conversation_with_booking.yml +154 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Conversations/_conversation/returns_a_single_conversation.yml +82 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Conversations/_conversations/returns_conversations.yml +83 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Conversations/_create_conversation/creates_a_new_conversation.yml +81 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Conversations/_disconnect_booking_from_conversation/disconnects_given_conversation_from_booking.yml +154 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Conversations/_edit_conversation/updates_given_conversation_by_ID.yml +74 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Hosts/_create_host/creates_a_new_host.yml +80 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Hosts/_edit_host/updates_given_host_by_ID.yml +73 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Hosts/_host/returns_a_single_host.yml +82 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Hosts/_hosts/returns_hosts.yml +82 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Messages/_create_message/creates_a_new_message.yml +81 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Messages/_edit_message/updates_given_message_by_ID.yml +74 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Messages/_message/returns_a_single_message.yml +82 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Messages/_messages/returns_messages.yml +82 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Participants/_create_participant/creates_a_new_participant.yml +80 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Participants/_edit_participant/updates_given_participant_by_ID.yml +73 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Participants/_participant/returns_a_single_participant.yml +82 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Participants/_participants/returns_participants.yml +82 -0
- metadata +50 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07875aceb5be5188713572808a3279c3ef1850ee
|
4
|
+
data.tar.gz: 9a346db370e70f7ad358e416a4ad28de91912dc8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42a65dfbf9e155c9589377219aaf54d163f0e39fa96ad5ddd5a2295e60450dbfbdcc43d226e3b3e4204addb30bb0fd659d6e7f4aafb28a67052c4f5e2ec10dc5
|
7
|
+
data.tar.gz: ec176fddc4a0c67f9787e9eef645e5dbc065914ec1e2b31c811edb424131aa009f5221dd0a3e614313f53d40910c0517e3d3c8fef594a7782ae6a3ef555fb082
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -70,6 +70,19 @@ api.last_response.meta # => {"deleted_ids" => [1, 3, 4]}
|
|
70
70
|
api.pagination_first_response.meta # => {"deleted_ids" => [1, 3, 4]}
|
71
71
|
```
|
72
72
|
|
73
|
+
### Adjust headers dynamically
|
74
|
+
|
75
|
+
If you need to add custom headers you can use `#with_headers` method. It accepts hash of headers
|
76
|
+
that should be added to next request and yields client. It resets headers to default ones at the end
|
77
|
+
and returns result of last operation specified inside block.
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
api.with_headers("x-awesome-header" => "you-bet-i-am") do |adjusted_api_client|
|
81
|
+
adjusted_api_client.rentals
|
82
|
+
end
|
83
|
+
=> [BookingSync::API::Resource, BookingSync::API::Resource]
|
84
|
+
```
|
85
|
+
|
73
86
|
### Logging
|
74
87
|
|
75
88
|
Sometimes it's useful to see what data bookingsync-api gem sends and what it
|
@@ -14,6 +14,7 @@ require "bookingsync/api/client/change_overs"
|
|
14
14
|
require "bookingsync/api/client/clients"
|
15
15
|
require "bookingsync/api/client/destinations"
|
16
16
|
require "bookingsync/api/client/fees"
|
17
|
+
require "bookingsync/api/client/hosts"
|
17
18
|
require "bookingsync/api/client/inquiries"
|
18
19
|
require "bookingsync/api/client/living_rooms"
|
19
20
|
require "bookingsync/api/client/nightly_rate_maps"
|
@@ -38,6 +39,9 @@ require "bookingsync/api/client/seasons"
|
|
38
39
|
require "bookingsync/api/client/special_offers"
|
39
40
|
require "bookingsync/api/client/sources"
|
40
41
|
require "bookingsync/api/client/taxes"
|
42
|
+
require "bookingsync/api/client/conversations"
|
43
|
+
require "bookingsync/api/client/messages"
|
44
|
+
require "bookingsync/api/client/participants"
|
41
45
|
require "bookingsync/api/error"
|
42
46
|
require "bookingsync/api/relation"
|
43
47
|
require "bookingsync/api/response"
|
@@ -62,13 +66,17 @@ module BookingSync::API
|
|
62
66
|
include BookingSync::API::Client::BookingsTags
|
63
67
|
include BookingSync::API::Client::BookingsTaxes
|
64
68
|
include BookingSync::API::Client::ChangeOvers
|
69
|
+
include BookingSync::API::Client::Conversations
|
65
70
|
include BookingSync::API::Client::Clients
|
66
71
|
include BookingSync::API::Client::Destinations
|
67
72
|
include BookingSync::API::Client::Fees
|
73
|
+
include BookingSync::API::Client::Hosts
|
68
74
|
include BookingSync::API::Client::Inquiries
|
69
75
|
include BookingSync::API::Client::LivingRooms
|
76
|
+
include BookingSync::API::Client::Messages
|
70
77
|
include BookingSync::API::Client::NightlyRateMaps
|
71
78
|
include BookingSync::API::Client::StrictBookings
|
79
|
+
include BookingSync::API::Client::Participants
|
72
80
|
include BookingSync::API::Client::Periods
|
73
81
|
include BookingSync::API::Client::Payments
|
74
82
|
include BookingSync::API::Client::PaymentGateways
|
@@ -274,6 +282,19 @@ module BookingSync::API
|
|
274
282
|
end
|
275
283
|
end
|
276
284
|
|
285
|
+
# Yields client with temporarily modified headers.
|
286
|
+
#
|
287
|
+
# @param extra_headers [Hash] Additional headers added to next request.
|
288
|
+
# @yieldreturn [BookingSync::API::Client] Client with modified default headers.
|
289
|
+
# @return [Array<BookingSync::API::Resource>|BookingSync::API::Resource|String|Object] Client response
|
290
|
+
def with_headers(extra_headers = {}, &block)
|
291
|
+
original_headers = @conn.headers.dup
|
292
|
+
@conn.headers.merge!(extra_headers)
|
293
|
+
result = yield self
|
294
|
+
@conn.headers = original_headers
|
295
|
+
result
|
296
|
+
end
|
297
|
+
|
277
298
|
private
|
278
299
|
|
279
300
|
def middleware
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module BookingSync::API
|
2
|
+
class Client
|
3
|
+
module Conversations
|
4
|
+
# List conversations
|
5
|
+
#
|
6
|
+
# Returns all conversations supported in BookingSync.
|
7
|
+
# @param options [Hash] A customizable set of options.
|
8
|
+
# @option options [Array] fields: List of fields to be fetched.
|
9
|
+
# @return [Array<BookingSync::API::Resource>] Array of conversations.
|
10
|
+
#
|
11
|
+
# @example Get the list of conversations for the current account
|
12
|
+
# conversations = @api.conversations
|
13
|
+
# conversations.first.subject # => "Question"
|
14
|
+
# @see http://developers.bookingsync.com/reference/endpoints/conversations/#list-conversations
|
15
|
+
def conversations(options = {}, &block)
|
16
|
+
paginate "inbox/conversations", options, &block
|
17
|
+
end
|
18
|
+
|
19
|
+
# Get a single conversation
|
20
|
+
#
|
21
|
+
# @param conversation [BookingSync::API::Resource|Integer] Conversation or ID
|
22
|
+
# of the conversation.
|
23
|
+
# @return [BookingSync::API::Resource]
|
24
|
+
def conversation(conversation)
|
25
|
+
get("inbox/conversations/#{conversation}").pop
|
26
|
+
end
|
27
|
+
|
28
|
+
# Create a new conversation
|
29
|
+
#
|
30
|
+
# @param options [Hash] Conversation's attributes.
|
31
|
+
# @return [BookingSync::API::Resource] Newly created conversation.
|
32
|
+
def create_conversation(options = {})
|
33
|
+
post("inbox/conversations", conversations: [options]).pop
|
34
|
+
end
|
35
|
+
|
36
|
+
# Edit a conversation
|
37
|
+
#
|
38
|
+
# @param conversation [BookingSync::API::Resource|Integer] Conversation or ID of
|
39
|
+
# the conversation to be updated.
|
40
|
+
# @param options [Hash] Conversation attributes to be updated.
|
41
|
+
# @return [BookingSync::API::Resource] Updated conversation on success,
|
42
|
+
# exception is raised otherwise.
|
43
|
+
# @example
|
44
|
+
# conversation = @api.conversations.first
|
45
|
+
# @api.edit_conversation(conversation, { closed: true })
|
46
|
+
def edit_conversation(conversation, options = {})
|
47
|
+
put("inbox/conversations/#{conversation}", conversations: [options]).pop
|
48
|
+
end
|
49
|
+
|
50
|
+
# Connect conversation with booking
|
51
|
+
# @param conversation [BookingSync::API::Resource|Integer] Conversation or ID of
|
52
|
+
# the conversation to be connected to booking
|
53
|
+
# @param options [Hash] Id of booking to be connected to conversation.
|
54
|
+
# @return [BookingSync::API::Resource] Conversation with updated links on success,
|
55
|
+
# exception is raised otherwise.
|
56
|
+
# @example
|
57
|
+
# @api.connect_booking_to_conversation(conversation, { id: 5 })
|
58
|
+
def connect_booking_to_conversation(conversation, options)
|
59
|
+
put("inbox/conversations/#{conversation}/connect_booking", bookings: [options]).pop
|
60
|
+
end
|
61
|
+
|
62
|
+
# Disconnect conversation from booking
|
63
|
+
# @param conversation [BookingSync::API::Resource|Integer] Conversation or ID of
|
64
|
+
# the conversation connected to booking
|
65
|
+
# @param options [Hash] Id of booking to be disconnected from conversation.
|
66
|
+
# @return [BookingSync::API::Resource] Conversation with updated links on success,
|
67
|
+
# exception is raised otherwise.
|
68
|
+
# @example
|
69
|
+
# @api.disconnect_booking_from_conversation(conversation, { id: 5 })
|
70
|
+
def disconnect_booking_from_conversation(conversation, options)
|
71
|
+
put("inbox/conversations/#{conversation}/disconnect_booking", bookings: [options]).pop
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module BookingSync::API
|
2
|
+
class Client
|
3
|
+
module Hosts
|
4
|
+
# List hosts
|
5
|
+
#
|
6
|
+
# Returns all hosts supported in BookingSync.
|
7
|
+
# @param options [Hash] A customizable set of options.
|
8
|
+
# @option options [Array] fields: List of fields to be fetched.
|
9
|
+
# @return [Array<BookingSync::API::Resource>] Array of hosts.
|
10
|
+
#
|
11
|
+
# @example Get the list of hosts for the current account
|
12
|
+
# hosts = @api.hosts
|
13
|
+
# hosts.first.email # => "host_email@example.com"
|
14
|
+
# @see http://developers.bookingsync.com/reference/endpoints/hosts/#list-hosts
|
15
|
+
def hosts(options = {}, &block)
|
16
|
+
paginate :hosts, options, &block
|
17
|
+
end
|
18
|
+
|
19
|
+
# Get a single host
|
20
|
+
#
|
21
|
+
# @param host [BookingSync::API::Resource|Integer] Host or ID
|
22
|
+
# of the host.
|
23
|
+
# @return [BookingSync::API::Resource]
|
24
|
+
def host(host)
|
25
|
+
get("hosts/#{host}").pop
|
26
|
+
end
|
27
|
+
|
28
|
+
# Create a new host
|
29
|
+
#
|
30
|
+
# @param options [Hash] Host's attributes.
|
31
|
+
# @return [BookingSync::API::Resource] Newly created host.
|
32
|
+
def create_host(options = {})
|
33
|
+
post(:hosts, hosts: [options]).pop
|
34
|
+
end
|
35
|
+
|
36
|
+
# Edit a host
|
37
|
+
#
|
38
|
+
# @param host [BookingSync::API::Resource|Integer] Host or ID of
|
39
|
+
# the host to be updated.
|
40
|
+
# @param options [Hash] Host attributes to be updated.
|
41
|
+
# @return [BookingSync::API::Resource] Updated host on success,
|
42
|
+
# exception is raised otherwise.
|
43
|
+
# @example
|
44
|
+
# host = @api.hosts.first
|
45
|
+
# @api.edit_host(host, { firstname: "Johnny" })
|
46
|
+
def edit_host(host, options = {})
|
47
|
+
put("hosts/#{host}", hosts: [options]).pop
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module BookingSync::API
|
2
|
+
class Client
|
3
|
+
module Messages
|
4
|
+
# List messages
|
5
|
+
#
|
6
|
+
# Returns all messages supported in BookingSync.
|
7
|
+
# @param options [Hash] A customizable set of options.
|
8
|
+
# @option options [Array] fields: List of fields to be fetched.
|
9
|
+
# @return [Array<BookingSync::API::Resource>] Array of messages.
|
10
|
+
#
|
11
|
+
# @example Get the list of messages for the current account
|
12
|
+
# messages = @api.messages
|
13
|
+
# messages.first.content # => "Message content"
|
14
|
+
# @see http://developers.bookingsync.com/reference/endpoints/messages/#list-messages
|
15
|
+
def messages(options = {}, &block)
|
16
|
+
paginate "inbox/messages", options, &block
|
17
|
+
end
|
18
|
+
|
19
|
+
# Get a single message
|
20
|
+
#
|
21
|
+
# @param message [BookingSync::API::Resource|Integer] Message or ID
|
22
|
+
# of the message.
|
23
|
+
# @return [BookingSync::API::Resource]
|
24
|
+
def message(message)
|
25
|
+
get("inbox/messages/#{message}").pop
|
26
|
+
end
|
27
|
+
|
28
|
+
# Create a new message
|
29
|
+
#
|
30
|
+
# @param options [Hash] Message's attributes.
|
31
|
+
# @return [BookingSync::API::Resource] Newly created message.
|
32
|
+
def create_message(options = {})
|
33
|
+
post("inbox/messages", messages: [options]).pop
|
34
|
+
end
|
35
|
+
|
36
|
+
# Edit a message
|
37
|
+
#
|
38
|
+
# @param message [BookingSync::API::Resource|Integer] Message or ID of
|
39
|
+
# the message to be updated.
|
40
|
+
# @param options [Hash] Message attributes to be updated.
|
41
|
+
# @return [BookingSync::API::Resource] Updated message on success,
|
42
|
+
# exception is raised otherwise.
|
43
|
+
# @example
|
44
|
+
# message = @api.messages.first
|
45
|
+
# @api.edit_message(message, { content: "Updated message content" })
|
46
|
+
def edit_message(message, options = {})
|
47
|
+
put("inbox/messages/#{message}", messages: [options]).pop
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module BookingSync::API
|
2
|
+
class Client
|
3
|
+
module Participants
|
4
|
+
# List participants
|
5
|
+
#
|
6
|
+
# Returns all participants supported in BookingSync.
|
7
|
+
# @param options [Hash] A customizable set of options.
|
8
|
+
# @option options [Array] fields: List of fields to be fetched.
|
9
|
+
# @return [Array<BookingSync::API::Resource>] Array of participants.
|
10
|
+
#
|
11
|
+
# @example Get the list of participants for the current account
|
12
|
+
# participants = @api.participants
|
13
|
+
# participants.first.read_at # => "Fri, 02 Mar 2018 17:06:41 UTC +00:00"
|
14
|
+
# @see http://developers.bookingsync.com/reference/endpoints/participants/#list-participants
|
15
|
+
def participants(options = {}, &block)
|
16
|
+
paginate "inbox/participants", options, &block
|
17
|
+
end
|
18
|
+
|
19
|
+
# Get a single participant
|
20
|
+
#
|
21
|
+
# @param participant [BookingSync::API::Resource|Integer] Participant or ID
|
22
|
+
# of the participant.
|
23
|
+
# @return [BookingSync::API::Resource]
|
24
|
+
def participant(participant)
|
25
|
+
get("inbox/participants/#{participant}").pop
|
26
|
+
end
|
27
|
+
|
28
|
+
# Create a new participant
|
29
|
+
#
|
30
|
+
# @param options [Hash] Participant's attributes.
|
31
|
+
# @return [BookingSync::API::Resource] Newly created participant.
|
32
|
+
def create_participant(options)
|
33
|
+
post("inbox/participants", participants: [options]).pop
|
34
|
+
end
|
35
|
+
|
36
|
+
# Edit a participant
|
37
|
+
#
|
38
|
+
# @param participant [BookingSync::API::Resource|Integer] Participant or ID of
|
39
|
+
# the participant to be updated.
|
40
|
+
# @param options [Hash] Participant attributes to be updated.
|
41
|
+
# @return [BookingSync::API::Resource] Updated participant on success,
|
42
|
+
# exception is raised otherwise.
|
43
|
+
# @example
|
44
|
+
# participant = @api.participants.first
|
45
|
+
# @api.edit_participant(participant, { read: true })
|
46
|
+
def edit_participant(participant, options = {})
|
47
|
+
put("inbox/participants/#{participant}", participants: [options]).pop
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe BookingSync::API::Client::Conversations do
|
4
|
+
let(:client) { BookingSync::API::Client.new(test_access_token) }
|
5
|
+
|
6
|
+
before { |ex| @casette_base_path = casette_path(casette_dir, ex.metadata) }
|
7
|
+
|
8
|
+
describe ".conversations", :vcr do
|
9
|
+
it "returns conversations" do
|
10
|
+
expect(client.conversations).not_to be_empty
|
11
|
+
assert_requested :get, bs_url("inbox/conversations")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe ".conversation", :vcr do
|
16
|
+
let(:prefetched_conversation_id) {
|
17
|
+
find_resource("#{@casette_base_path}_conversations/returns_conversations.yml", "conversations")[:id]
|
18
|
+
}
|
19
|
+
|
20
|
+
it "returns a single conversation" do
|
21
|
+
conversation = client.conversation(prefetched_conversation_id)
|
22
|
+
expect(conversation.id).to eq prefetched_conversation_id
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe ".create_conversation", :vcr do
|
27
|
+
let(:assignee) { BookingSync::API::Resource.new(client, id: 1) }
|
28
|
+
let(:source) { BookingSync::API::Resource.new(client, id: 1) }
|
29
|
+
let(:attributes) do
|
30
|
+
{ subject: "New Question", assignee_id: assignee.id, source_id: source.id }
|
31
|
+
end
|
32
|
+
|
33
|
+
it "creates a new conversation" do
|
34
|
+
client.create_conversation(attributes)
|
35
|
+
assert_requested :post, bs_url("inbox/conversations"),
|
36
|
+
body: { conversations: [attributes] }.to_json
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns newly created conversation" do
|
40
|
+
VCR.use_cassette("BookingSync_API_Client_Conversations/_create_conversation/creates_a_new_conversation") do
|
41
|
+
conversation = client.create_conversation(attributes)
|
42
|
+
expect(conversation.subject).to eq("New Question")
|
43
|
+
expect(conversation[:links][:assignee]).to eq(assignee.id)
|
44
|
+
expect(conversation[:links][:source]).to eq(source.id)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe ".edit_conversation", :vcr do
|
50
|
+
let(:new_conversation_assignee) { BookingSync::API::Resource.new(client, id: 2) }
|
51
|
+
let(:created_conversation_id) {
|
52
|
+
find_resource("#{@casette_base_path}_create_conversation/creates_a_new_conversation.yml", "conversations")[:id]
|
53
|
+
}
|
54
|
+
let(:attributes) {
|
55
|
+
{ closed: true, assignee_id: new_conversation_assignee.id }
|
56
|
+
}
|
57
|
+
|
58
|
+
it "updates given conversation by ID" do
|
59
|
+
client.edit_conversation(created_conversation_id, attributes)
|
60
|
+
assert_requested :put, bs_url("inbox/conversations/#{created_conversation_id}"),
|
61
|
+
body: { conversations: [attributes] }.to_json
|
62
|
+
end
|
63
|
+
|
64
|
+
it "returns updated conversation" do
|
65
|
+
VCR.use_cassette("BookingSync_API_Client_Conversations/_edit_conversation/updates_given_conversation_by_ID") do
|
66
|
+
conversation = client.edit_conversation(created_conversation_id, attributes)
|
67
|
+
expect(conversation).to be_kind_of(BookingSync::API::Resource)
|
68
|
+
expect(conversation[:links][:assignee]).to eq(new_conversation_assignee.id)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe ".connect_booking_to_conversation", :vcr do
|
74
|
+
let(:booking_to_be_connected) { BookingSync::API::Resource.new(client, id: 40) }
|
75
|
+
let(:prefetched_conversation_id) {
|
76
|
+
find_resource("#{@casette_base_path}_conversations/returns_conversations.yml", "conversations")[:id]
|
77
|
+
}
|
78
|
+
let(:attributes) { { id: booking_to_be_connected.id } }
|
79
|
+
|
80
|
+
it "connects given conversation with booking" do
|
81
|
+
client.connect_booking_to_conversation(prefetched_conversation_id, attributes)
|
82
|
+
assert_requested :put, bs_url("inbox/conversations/#{prefetched_conversation_id}/connect_booking"),
|
83
|
+
body: { bookings: [attributes] }.to_json
|
84
|
+
end
|
85
|
+
|
86
|
+
it "returns conversation with updated links" do
|
87
|
+
casette_path = "BookingSync_API_Client_Conversations/_connect_booking_to_conversation" \
|
88
|
+
"/connects_given_conversation_with_booking"
|
89
|
+
VCR.use_cassette(casette_path) do
|
90
|
+
initial_conversation = client.conversation(prefetched_conversation_id)
|
91
|
+
expect(initial_conversation[:links][:bookings]).to match_array []
|
92
|
+
conversation = client.connect_booking_to_conversation(prefetched_conversation_id, attributes)
|
93
|
+
expect(conversation).to be_kind_of(BookingSync::API::Resource)
|
94
|
+
expect(conversation[:links][:bookings]).to match_array [booking_to_be_connected.id]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe ".disconnect_booking_from_conversation", :vcr do
|
100
|
+
let(:booking_to_be_disconnected) { BookingSync::API::Resource.new(client, id: 40) }
|
101
|
+
let(:prefetched_conversation_id) {
|
102
|
+
find_resource("#{@casette_base_path}_conversations/returns_conversations.yml", "conversations")[:id]
|
103
|
+
}
|
104
|
+
let(:attributes) { { id: booking_to_be_disconnected.id } }
|
105
|
+
|
106
|
+
it "disconnects given conversation from booking" do
|
107
|
+
client.disconnect_booking_from_conversation(prefetched_conversation_id, attributes)
|
108
|
+
assert_requested :put, bs_url("inbox/conversations/#{prefetched_conversation_id}/disconnect_booking"),
|
109
|
+
body: { bookings: [attributes] }.to_json
|
110
|
+
end
|
111
|
+
|
112
|
+
it "returns conversation with updated links" do
|
113
|
+
casette_path = "BookingSync_API_Client_Conversations/_disconnect_booking_from_conversation" \
|
114
|
+
"/disconnects_given_conversation_from_booking"
|
115
|
+
VCR.use_cassette(casette_path) do
|
116
|
+
initial_conversation = client.conversation(prefetched_conversation_id)
|
117
|
+
expect(initial_conversation[:links][:bookings]).to match_array [booking_to_be_disconnected.id]
|
118
|
+
conversation = client.disconnect_booking_from_conversation(prefetched_conversation_id, attributes)
|
119
|
+
expect(conversation).to be_kind_of(BookingSync::API::Resource)
|
120
|
+
expect(conversation[:links][:bookings]).to match_array []
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|