bookingsync-api 0.1.12 → 0.1.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +3 -1
- data/CHANGELOG.md +3 -0
- data/lib/bookingsync/api/client.rb +10 -0
- data/lib/bookingsync/api/client/applications.rb +43 -0
- data/lib/bookingsync/api/client/applications_periods_rentals.rb +49 -0
- data/lib/bookingsync/api/client/booking_comments.rb +1 -1
- data/lib/bookingsync/api/client/contacts.rb +63 -0
- data/lib/bookingsync/api/client/rentals.rb +3 -2
- data/lib/bookingsync/api/version.rb +1 -1
- data/spec/bookingsync/api/client/applications_periods_rentals_spec.rb +70 -0
- data/spec/bookingsync/api/client/applications_spec.rb +44 -0
- data/spec/bookingsync/api/client/contacts_spec.rb +116 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Applications/_application/returns_a_single_application.yml +84 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Applications/_applications/returns_applications.yml +85 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Applications/_edit_application/returns_updated_application.yml +73 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Applications/_edit_application/updates_given_application_by_ID.yml +73 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_ApplicationsPeriodsRentals/_applications_periods_rental/returns_applications_periods_rental.yml +80 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_ApplicationsPeriodsRentals/_applications_periods_rentals/returns_applications_periods_rentals.yml +80 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_ApplicationsPeriodsRentals/_create_applications_periods_rental/creates_a_applications_periods_rental.yml +71 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_ApplicationsPeriodsRentals/_edit_applications_periods_rental/returns_updated_applications_periods_rental.yml +69 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_ApplicationsPeriodsRentals/_edit_applications_periods_rental/updates_given_applications_periods_rental_by_ID.yml +69 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Bookings/_create_applications_periods_rental/creates_an_applications_periods_rental.yml +71 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_contact/returns_a_single_contact.yml +99 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_contact/returns_contact.yml +99 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_contacts/returns_contacts.yml +99 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_contacts/returns_contacts_by_ids.yml +99 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_create_contact/creates_a_new_contact.yml +74 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_delete_contact/deletes_given_contact.yml +63 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_edit_contact/updates_given_contact_by_ID.yml +71 -0
- metadata +46 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5a09e07498321ef580ddd8236abc2981e51f1292ffe3816fd888247a4ce01d34
|
4
|
+
data.tar.gz: 8d5794b071cdb51115431a1598e5635ce8cde59fb11abe7ac564cf1f08700951
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42b832673aea07e5cf57c2a50ec5982f4f0972e05a8f2c7f5eeedba239eeb5e840ae2672b13bdbbd6528ab582a5b733e626b349c54f550c4fc98443aa50fefa3
|
7
|
+
data.tar.gz: 293aba124873f3f84bb6417ef9dc271e0efc1e2d64bbbf3e9865ed6101901432ad1bfd2a02df76d12153ef3ba17fead418d479bf40077d6f67514fc33c19558e
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -2,8 +2,10 @@ language: ruby
|
|
2
2
|
rvm:
|
3
3
|
- "2.1"
|
4
4
|
- "2.2"
|
5
|
+
- "2.4.4"
|
6
|
+
- "2.5.1"
|
5
7
|
before_install:
|
6
8
|
- gem install bundler -v 1.12.5
|
7
9
|
script:
|
8
|
-
- bundle exec rake style:rubocop:without_auto_correct
|
10
|
+
- bundle exec rake style:rubocop:without_auto_correct
|
9
11
|
- bundle exec rake spec
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require "bookingsync/api/middleware/logger"
|
2
2
|
require "bookingsync/api/client/accounts"
|
3
3
|
require "bookingsync/api/client/amenities"
|
4
|
+
require "bookingsync/api/client/applications"
|
5
|
+
require "bookingsync/api/client/applications_periods_rentals"
|
4
6
|
require "bookingsync/api/client/attachments"
|
5
7
|
require "bookingsync/api/client/availabilities"
|
6
8
|
require "bookingsync/api/client/bathrooms"
|
@@ -13,6 +15,7 @@ require "bookingsync/api/client/bookings_tags"
|
|
13
15
|
require "bookingsync/api/client/bookings_taxes"
|
14
16
|
require "bookingsync/api/client/change_overs"
|
15
17
|
require "bookingsync/api/client/clients"
|
18
|
+
require "bookingsync/api/client/contacts"
|
16
19
|
require "bookingsync/api/client/destinations"
|
17
20
|
require "bookingsync/api/client/fees"
|
18
21
|
require "bookingsync/api/client/hosts"
|
@@ -56,6 +59,8 @@ module BookingSync::API
|
|
56
59
|
extend Forwardable
|
57
60
|
include BookingSync::API::Client::Accounts
|
58
61
|
include BookingSync::API::Client::Amenities
|
62
|
+
include BookingSync::API::Client::Applications
|
63
|
+
include BookingSync::API::Client::ApplicationsPeriodsRentals
|
59
64
|
include BookingSync::API::Client::Attachments
|
60
65
|
include BookingSync::API::Client::Availabilities
|
61
66
|
include BookingSync::API::Client::Bathrooms
|
@@ -69,6 +74,7 @@ module BookingSync::API
|
|
69
74
|
include BookingSync::API::Client::ChangeOvers
|
70
75
|
include BookingSync::API::Client::Conversations
|
71
76
|
include BookingSync::API::Client::Clients
|
77
|
+
include BookingSync::API::Client::Contacts
|
72
78
|
include BookingSync::API::Client::Destinations
|
73
79
|
include BookingSync::API::Client::Fees
|
74
80
|
include BookingSync::API::Client::Hosts
|
@@ -415,5 +421,9 @@ module BookingSync::API
|
|
415
421
|
def next_page(response, request_settings)
|
416
422
|
response.relations[:next].call({}, { method: request_settings[:request_method] })
|
417
423
|
end
|
424
|
+
|
425
|
+
def reject_blank_values(array)
|
426
|
+
array.reject { |value| value.nil? || value == "" }
|
427
|
+
end
|
418
428
|
end
|
419
429
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module BookingSync::API
|
2
|
+
class Client
|
3
|
+
module Applications
|
4
|
+
# List applications
|
5
|
+
#
|
6
|
+
# Returns all applications 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 applications.
|
10
|
+
#
|
11
|
+
# @example Get the list of applications for the current account
|
12
|
+
# applications = @api.applications
|
13
|
+
# applications.first.title # => "Internet"
|
14
|
+
# @see http://developers.bookingsync.com/reference/endpoints/applications/#list-applications
|
15
|
+
def applications(options = {}, &block)
|
16
|
+
paginate :applications, options, &block
|
17
|
+
end
|
18
|
+
|
19
|
+
# Get a single application
|
20
|
+
#
|
21
|
+
# @param application [BookingSync::API::Resource|Integer] application or ID
|
22
|
+
# of the application.
|
23
|
+
# @return [BookingSync::API::Resource]
|
24
|
+
# @see http://developers.bookingsync.com/reference/endpoints/applications/#get-a-single-application
|
25
|
+
def application(application)
|
26
|
+
get("applications/#{application}").pop
|
27
|
+
end
|
28
|
+
|
29
|
+
# Edit an application
|
30
|
+
#
|
31
|
+
# @param application [BookingSync::API::Resource|Integer] application or ID of the application
|
32
|
+
# to be updated
|
33
|
+
# @param options [Hash] application attributes to be updated
|
34
|
+
# @return [BookingSync::API::Resource] Updated application on success, exception is raised otherwise
|
35
|
+
# @example
|
36
|
+
# application = @api.applications.first
|
37
|
+
# @api.edit_application(application, { default_price_increase: 3 })
|
38
|
+
def edit_application(application, options = {})
|
39
|
+
put("applications/#{application}", applications: [options]).pop
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module BookingSync::API
|
2
|
+
class Client
|
3
|
+
module ApplicationsPeriodsRentals
|
4
|
+
# List applications_periods_rentals
|
5
|
+
#
|
6
|
+
# Returns all applications_periods_rentals 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 applications_periods_rentals.
|
10
|
+
#
|
11
|
+
# @example Get the list of applications_periods_rentals for the current account
|
12
|
+
# applications_periods_rentals = @api.applications_periods_rentals
|
13
|
+
# applications_periods_rentals.first.title # => "Internet"
|
14
|
+
def applications_periods_rentals(options = {}, &block)
|
15
|
+
paginate :applications_periods_rentals, options, &block
|
16
|
+
end
|
17
|
+
|
18
|
+
# Create a applications_periods_rental
|
19
|
+
#
|
20
|
+
# @param options [Hash] applications_periods_rental attributes.
|
21
|
+
# @return [BookingSync::API::Resource] Newly created applications_periods_rental.
|
22
|
+
def create_applications_periods_rental(options = {})
|
23
|
+
post("applications_periods_rentals", applications_periods_rental: options).pop
|
24
|
+
end
|
25
|
+
|
26
|
+
# Get a single applications_periods_rental
|
27
|
+
#
|
28
|
+
# @param applications_periods_rental [BookingSync::API::Resource|Integer] applications_periods_rental or ID
|
29
|
+
# of the applications_periods_rental.
|
30
|
+
# @return [BookingSync::API::Resource]
|
31
|
+
def applications_periods_rental(applications_periods_rental)
|
32
|
+
get("applications_periods_rentals/#{applications_periods_rental}").pop
|
33
|
+
end
|
34
|
+
|
35
|
+
# Edit an applications_periods_rental
|
36
|
+
#
|
37
|
+
# @param applications_periods_rental [BookingSync::API::Resource|Integer] applications_periods_rental or ID of the applications_periods_rental
|
38
|
+
# to be updated
|
39
|
+
# @param options [Hash] applications_periods_rental attributes to be updated
|
40
|
+
# @return [BookingSync::API::Resource] Updated applications_periods_rental on success, exception is raised otherwise
|
41
|
+
# @example
|
42
|
+
# applications_periods_rental = @api.applications_periods_rentals.first
|
43
|
+
# @api.edit_application(applications_periods_rental, { default_price_increase: 3 })
|
44
|
+
def edit_applications_periods_rental(applications_periods_rental, options = {})
|
45
|
+
put("applications_periods_rentals/#{applications_periods_rental}", applications_periods_rental: options).pop
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -53,7 +53,7 @@ module BookingSync::API
|
|
53
53
|
# exception is raised otherwise.
|
54
54
|
# @example
|
55
55
|
# booking_comment = @api.booking_comments.first
|
56
|
-
# @api.edit_booking_comment(8, {
|
56
|
+
# @api.edit_booking_comment(8, {content: "New content"})
|
57
57
|
# => {:links=>{:booking=>1}, :id=>8, :content=>"New content", :editable=>true, :created_at=>2016-04-18 13:31:40 UTC, :updated_at=>2016-04-18 13:46:06 UTC}
|
58
58
|
def edit_booking_comment(booking_comment, options = {})
|
59
59
|
put("booking_comments/#{booking_comment}", booking_comments: [options]).pop
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module BookingSync::API
|
2
|
+
class Client
|
3
|
+
module Contacts
|
4
|
+
# List contacts
|
5
|
+
#
|
6
|
+
# Returns contacts for the account user is authenticated with.
|
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 contacts.
|
10
|
+
#
|
11
|
+
# @example Get the list of contacts for the current account
|
12
|
+
# contacts = @api.contacts
|
13
|
+
# contacts.first.fullname # => "John Smith"
|
14
|
+
# @example Get the list of contacts only with fullname and phone for smaller response
|
15
|
+
# @api.contacts(fields: [:fullname, :phone])
|
16
|
+
# @see http://developers.bookingsync.com/reference/endpoints/contacts/#list-contacts
|
17
|
+
def contacts(options = {}, &block)
|
18
|
+
paginate :contacts, options, &block
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get a single contact
|
22
|
+
#
|
23
|
+
# @param contact [BookingSync::API::Resource|Integer] Contact or ID
|
24
|
+
# of the contact.
|
25
|
+
# @param options [Hash] A customizable set of query options.
|
26
|
+
# @option options [Array] fields: List of fields to be fetched.
|
27
|
+
# @return [BookingSync::API::Resource]
|
28
|
+
def contact(contact, options = {})
|
29
|
+
get("contacts/#{contact}", options).pop
|
30
|
+
end
|
31
|
+
|
32
|
+
# Create a new contact
|
33
|
+
#
|
34
|
+
# @param options [Hash] Contact attributes
|
35
|
+
# @return [BookingSync::API::Resource] Newly created contact
|
36
|
+
def create_contact(options = {})
|
37
|
+
post(:contacts, contacts: [options]).pop
|
38
|
+
end
|
39
|
+
|
40
|
+
# Edit a contact
|
41
|
+
#
|
42
|
+
# @param contact [BookingSync::API::Resource|Integer] Contact or ID of the contact
|
43
|
+
# to be updated
|
44
|
+
# @param options [Hash] Contact attributes to be updated
|
45
|
+
# @return [BookingSync::API::Resource] Updated contact on success, exception is raised otherwise
|
46
|
+
# @example
|
47
|
+
# contact = @api.contacts.first
|
48
|
+
# @api.edit_contact(contact, { fullname: "Gary Smith" })
|
49
|
+
def edit_contact(contact, options = {})
|
50
|
+
put("contacts/#{contact}", contacts: [options]).pop
|
51
|
+
end
|
52
|
+
|
53
|
+
# Delete a contact
|
54
|
+
#
|
55
|
+
# @param contact [BookingSync::API::Resource|Integer] Contact or ID
|
56
|
+
# of the contact to be deleted.
|
57
|
+
# @return [NilClass] Returns nil on success.
|
58
|
+
def delete_contact(contact)
|
59
|
+
delete "contacts/#{contact}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -30,7 +30,7 @@ module BookingSync::API
|
|
30
30
|
# villas = @api.rentals_search(rental_type: "villa")
|
31
31
|
def rentals_search(options = {}, &block)
|
32
32
|
ids = Array(options.delete(:ids))
|
33
|
-
path = ["rentals", ids.join(","), "search"].
|
33
|
+
path = reject_blank_values(["rentals", ids.join(","), "search"]).join("/")
|
34
34
|
defaults = { request_method: :post }
|
35
35
|
paginate path, defaults.merge(options), &block
|
36
36
|
end
|
@@ -79,7 +79,8 @@ module BookingSync::API
|
|
79
79
|
# @param rentals [Array] IDs of Rentals, leave empty for all account's rentals
|
80
80
|
# @return [BookingSync::API::Resource]
|
81
81
|
def rentals_meta(rentals = nil)
|
82
|
-
|
82
|
+
path = reject_blank_values(["rentals", Array(rentals).join(","), "meta"]).join("/")
|
83
|
+
get(path).pop
|
83
84
|
end
|
84
85
|
end
|
85
86
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe BookingSync::API::Client::ApplicationsPeriodsRentals 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 ".applications_periods_rentals", :vcr do
|
9
|
+
it "returns applications_periods_rentals" do
|
10
|
+
expect(client.applications_periods_rentals).not_to be_empty
|
11
|
+
assert_requested :get, bs_url("applications_periods_rentals")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe ".applications_periods_rental", :vcr do
|
16
|
+
let(:prefetched_applications_periods_rental) {
|
17
|
+
find_resource("#{@casette_base_path}_applications_periods_rentals/returns_applications_periods_rentals.yml", "applications_periods_rentals")
|
18
|
+
}
|
19
|
+
|
20
|
+
it "returns applications_periods_rental" do
|
21
|
+
applications_periods_rental = client.applications_periods_rental(prefetched_applications_periods_rental[:id])
|
22
|
+
expect(applications_periods_rental.price_increase).to eq(prefetched_applications_periods_rental[:price_increase])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe ".create_applications_periods_rental", :vcr do
|
27
|
+
let(:attributes) {
|
28
|
+
{
|
29
|
+
rental_id: 1,
|
30
|
+
application_id: 9,
|
31
|
+
start_date: "2017-01-03",
|
32
|
+
end_date: "2017-01-04",
|
33
|
+
price_increase: 15.0
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
it "creates a applications_periods_rental" do
|
38
|
+
client.create_applications_periods_rental(attributes)
|
39
|
+
assert_requested :post, bs_url("applications_periods_rentals"),
|
40
|
+
body: { applications_periods_rental: attributes }.to_json
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns newly created applications_periods_rental" do
|
44
|
+
VCR.use_cassette("BookingSync_API_Client_Bookings/_create_applications_periods_rental/creates_an_applications_periods_rental") do
|
45
|
+
applications_periods_rental = client.create_applications_periods_rental(attributes)
|
46
|
+
expect(applications_periods_rental).to be_kind_of(BookingSync::API::Resource)
|
47
|
+
expect(applications_periods_rental.price_increase).to eq(attributes[:price_increase].to_s)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe ".edit_applications_periods_rental", :vcr do
|
53
|
+
let(:prefetched_edit_applications_periods_rental) {
|
54
|
+
find_resource("#{@casette_base_path}_applications_periods_rentals/returns_applications_periods_rentals.yml", "applications_periods_rentals")
|
55
|
+
}
|
56
|
+
let(:price_increase) { 3.1 }
|
57
|
+
|
58
|
+
it "updates given applications_periods_rental by ID" do
|
59
|
+
client.edit_applications_periods_rental(prefetched_edit_applications_periods_rental, price_increase: price_increase)
|
60
|
+
assert_requested :put, bs_url("applications_periods_rentals/#{prefetched_edit_applications_periods_rental}"),
|
61
|
+
body: { applications_periods_rental: { price_increase: price_increase } }.to_json
|
62
|
+
end
|
63
|
+
|
64
|
+
it "returns updated applications_periods_rental" do
|
65
|
+
applications_periods_rental = client.edit_applications_periods_rental(prefetched_edit_applications_periods_rental, price_increase: price_increase)
|
66
|
+
expect(applications_periods_rental).to be_kind_of(BookingSync::API::Resource)
|
67
|
+
expect(applications_periods_rental.price_increase).to eq(price_increase.to_s)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe BookingSync::API::Client::Applications 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 ".applications", :vcr do
|
9
|
+
it "returns applications" do
|
10
|
+
expect(client.applications).not_to be_empty
|
11
|
+
assert_requested :get, bs_url("applications")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe ".application", :vcr do
|
16
|
+
let(:prefetched_application_id) {
|
17
|
+
find_resource("#{@casette_base_path}_applications/returns_applications.yml", "applications")[:id]
|
18
|
+
}
|
19
|
+
|
20
|
+
it "returns a single application" do
|
21
|
+
application = client.application(prefetched_application_id)
|
22
|
+
expect(application.id).to eq prefetched_application_id
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe ".edit_application", :vcr do
|
27
|
+
let(:prefetched_application_id) {
|
28
|
+
find_resource("#{@casette_base_path}_applications/returns_applications.yml", "applications")[:id]
|
29
|
+
}
|
30
|
+
let(:default_price_increase) { 1.1 }
|
31
|
+
|
32
|
+
it "updates given application by ID" do
|
33
|
+
client.edit_application(prefetched_application_id, default_price_increase: default_price_increase)
|
34
|
+
assert_requested :put, bs_url("applications/#{prefetched_application_id}"),
|
35
|
+
body: { applications: [{ default_price_increase: default_price_increase }] }.to_json
|
36
|
+
end
|
37
|
+
|
38
|
+
it "returns updated application" do
|
39
|
+
application = client.edit_application(prefetched_application_id, default_price_increase: default_price_increase)
|
40
|
+
expect(application).to be_kind_of(BookingSync::API::Resource)
|
41
|
+
expect(application.default_price_increase).to eq(default_price_increase.to_s)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe BookingSync::API::Client::Contacts do
|
4
|
+
let(:api) { BookingSync::API::Client.new(test_access_token) }
|
5
|
+
|
6
|
+
before { |ex| @casette_base_path = casette_path(casette_dir, ex.metadata) }
|
7
|
+
|
8
|
+
describe ".contacts", :vcr do
|
9
|
+
subject(:contacts) { api.contacts }
|
10
|
+
subject(:contacts_by_ids) { api.contacts(ids: contact_ids) }
|
11
|
+
let(:contact_ids) do
|
12
|
+
find_resources("#{@casette_base_path}_contacts/returns_contacts.yml", "contacts").map { |r| r["id"] }[0..1]
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns contacts" do
|
16
|
+
expect(contacts).not_to be_empty
|
17
|
+
assert_requested :get, bs_url("contacts")
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns contacts by ids" do
|
21
|
+
expect(contacts_by_ids.size).to eq(1)
|
22
|
+
assert_requested :get, bs_url("contacts/#{contact_ids.join(',')}")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe ".contact", :vcr do
|
27
|
+
subject(:contact) { api.contact(1) }
|
28
|
+
|
29
|
+
it "returns contact" do
|
30
|
+
expect(contact).not_to be_empty
|
31
|
+
assert_requested :get, bs_url("contacts/1")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe ".contact", :vcr do
|
36
|
+
subject(:contact) { api.contact(prefetched_contact_id) }
|
37
|
+
|
38
|
+
let(:prefetched_contact_id) {
|
39
|
+
find_resource("#{@casette_base_path}_contacts/returns_contacts.yml", "contacts")[:id]
|
40
|
+
}
|
41
|
+
|
42
|
+
it "returns a single contact" do
|
43
|
+
expect(contact.id).to eq prefetched_contact_id
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe ".create_contact", :vcr do
|
48
|
+
subject(:create_contact) { api.create_contact(attributes) }
|
49
|
+
|
50
|
+
let(:attributes) do
|
51
|
+
{
|
52
|
+
firstname: "John",
|
53
|
+
lastname: "Doe",
|
54
|
+
email: "halldor@example.com",
|
55
|
+
website: "http://www.demo.com",
|
56
|
+
address1: "Demo address",
|
57
|
+
gender: "male",
|
58
|
+
phones: [{ label: "default", number: "123456789" }],
|
59
|
+
country_code: "IS",
|
60
|
+
city: "Reykjavik",
|
61
|
+
zip: "33209",
|
62
|
+
state: "Demo",
|
63
|
+
spoken_languages: [:en]
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
it "creates a new contact" do
|
68
|
+
create_contact
|
69
|
+
assert_requested :post, bs_url("contacts"),
|
70
|
+
body: { contacts: [attributes] }.to_json
|
71
|
+
end
|
72
|
+
|
73
|
+
it "returns newly created contact" do
|
74
|
+
VCR.use_cassette("BookingSync_API_Client_Contacts/_create_contact/creates_a_new_contact") do
|
75
|
+
contact = create_contact
|
76
|
+
expect(contact.email).to eq "halldor@example.com"
|
77
|
+
expect(contact.fullname).to eq ("John Doe")
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe ".edit_contact", :vcr do
|
83
|
+
subject(:edit_contact) { api.edit_contact(created_contact_id, firstname: "Knut", lastname: "Eljassen") }
|
84
|
+
|
85
|
+
let(:created_contact_id) {
|
86
|
+
find_resource("#{@casette_base_path}_create_contact/creates_a_new_contact.yml", "contacts")[:id]
|
87
|
+
}
|
88
|
+
|
89
|
+
it "updates given contact by ID" do
|
90
|
+
edit_contact
|
91
|
+
assert_requested :put, bs_url("contacts/#{created_contact_id}"),
|
92
|
+
body: { contacts: [{ firstname: "Knut", lastname: "Eljassen" }] }.to_json
|
93
|
+
end
|
94
|
+
|
95
|
+
it "returns updated contact" do
|
96
|
+
VCR.use_cassette("BookingSync_API_Client_Contacts/_edit_contact/updates_given_contact_by_ID") do
|
97
|
+
contact = edit_contact
|
98
|
+
expect(contact).to be_kind_of(BookingSync::API::Resource)
|
99
|
+
expect(contact.fullname).to eq("Knut Eljassen")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe ".delete_contact", :vcr do
|
105
|
+
subject(:delete_contact) { api.delete_contact(created_contact_id) }
|
106
|
+
|
107
|
+
let(:created_contact_id) {
|
108
|
+
find_resource("#{casette_dir}/BookingSync_API_Client_Contacts/_create_contact/creates_a_new_contact.yml", "contacts")[:id]
|
109
|
+
}
|
110
|
+
|
111
|
+
it "deletes given contact" do
|
112
|
+
delete_contact
|
113
|
+
assert_requested :delete, bs_url("contacts/#{created_contact_id}")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|