bookingsync-api 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +11 -11
- data/Guardfile +1 -1
- data/README.md +1 -0
- data/Rakefile +13 -3
- data/bookingsync-api.gemspec +3 -3
- data/lib/bookingsync-api.rb +1 -1
- data/lib/bookingsync/api/client.rb +7 -4
- data/lib/bookingsync/api/client/booking_comments.rb +1 -1
- data/lib/bookingsync/api/client/living_rooms.rb +65 -0
- data/lib/bookingsync/api/error.rb +1 -1
- data/lib/bookingsync/api/middleware/logger.rb +6 -6
- data/lib/bookingsync/api/resource.rb +1 -1
- data/lib/bookingsync/api/response.rb +2 -2
- data/lib/bookingsync/api/serializer.rb +5 -5
- data/lib/bookingsync/api/version.rb +1 -1
- data/spec/bookingsync/api/client/bathrooms_spec.rb +10 -9
- data/spec/bookingsync/api/client/bedrooms_spec.rb +10 -9
- data/spec/bookingsync/api/client/bookings_spec.rb +13 -13
- data/spec/bookingsync/api/client/clients_spec.rb +13 -11
- data/spec/bookingsync/api/client/fees_spec.rb +2 -2
- data/spec/bookingsync/api/client/inquiries_spec.rb +12 -10
- data/spec/bookingsync/api/client/living_rooms_spec.rb +62 -0
- data/spec/bookingsync/api/client/nightly_rate_maps_spec.rb +1 -1
- data/spec/bookingsync/api/client/payments_spec.rb +8 -11
- data/spec/bookingsync/api/client/periods_spec.rb +5 -5
- data/spec/bookingsync/api/client/photos_spec.rb +6 -6
- data/spec/bookingsync/api/client/preferences_general_settings_spec.rb +1 -1
- data/spec/bookingsync/api/client/preferences_payments_spec.rb +0 -1
- data/spec/bookingsync/api/client/rates_rules_spec.rb +3 -4
- data/spec/bookingsync/api/client/rates_tables_spec.rb +4 -5
- data/spec/bookingsync/api/client/rental_agreements_spec.rb +5 -5
- data/spec/bookingsync/api/client/rentals_amenities_spec.rb +4 -4
- data/spec/bookingsync/api/client/rentals_fees_spec.rb +1 -1
- data/spec/bookingsync/api/client/rentals_spec.rb +7 -10
- data/spec/bookingsync/api/client/reviews_spec.rb +3 -6
- data/spec/bookingsync/api/client/seasons_spec.rb +4 -9
- data/spec/bookingsync/api/client/sources_spec.rb +4 -5
- data/spec/bookingsync/api/client/special_offers_spec.rb +6 -6
- data/spec/bookingsync/api/client/strict_bookings_spec.rb +8 -8
- data/spec/bookingsync/api/client_spec.rb +29 -15
- data/spec/bookingsync/api/error_spec.rb +3 -3
- data/spec/bookingsync/api/relation_spec.rb +8 -6
- data/spec/bookingsync/api/resource_spec.rb +29 -26
- data/spec/bookingsync/api/response_spec.rb +16 -15
- data/spec/fixtures/cassettes/BookingSync_API_Client_LivingRooms/_cancel_living_room/cancels_given_living_room.yml +69 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_LivingRooms/_create_living_room/creates_a_new_living_room.yml +82 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_LivingRooms/_edit_living_room/updates_given_living_room_by_ID.yml +75 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_LivingRooms/_living_room/returns_a_single_living_room.yml +84 -0
- data/spec/fixtures/cassettes/BookingSync_API_Client_LivingRooms/_living_rooms/returns_living_rooms.yml +84 -0
- data/spec/spec_helper.rb +12 -12
- metadata +29 -3
@@ -34,7 +34,7 @@ describe BookingSync::API::Client::RentalsFees do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
it "returns newly created rentals_fee" do
|
37
|
-
VCR.use_cassette(
|
37
|
+
VCR.use_cassette("BookingSync_API_Client_RentalsFees/_create_rentals_fee/creates_a_new_rentals_fee") do
|
38
38
|
rentals_fee = client.create_rentals_fee(rental, attributes)
|
39
39
|
expect(rentals_fee.links.fee).to eq 659
|
40
40
|
expect(rentals_fee.maximum_bookable).to eq 10
|
@@ -57,10 +57,7 @@ describe BookingSync::API::Client::Rentals do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
describe ".create_rental", :vcr do
|
60
|
-
let(:attributes) { {
|
61
|
-
name: "New rental",
|
62
|
-
sleeps: 2
|
63
|
-
} }
|
60
|
+
let(:attributes) { { name: "New rental", sleeps: 2 } }
|
64
61
|
|
65
62
|
it "creates a new rental" do
|
66
63
|
client.create_rental(attributes)
|
@@ -69,7 +66,7 @@ describe BookingSync::API::Client::Rentals do
|
|
69
66
|
end
|
70
67
|
|
71
68
|
it "returns newly created rental" do
|
72
|
-
VCR.use_cassette(
|
69
|
+
VCR.use_cassette("BookingSync_API_Client_Rentals/_create_rental/creates_a_new_rental") do
|
73
70
|
rental = client.create_rental(attributes)
|
74
71
|
expect(rental.name).to eql("New rental")
|
75
72
|
expect(rental.sleeps).to eql(2)
|
@@ -79,16 +76,16 @@ describe BookingSync::API::Client::Rentals do
|
|
79
76
|
|
80
77
|
describe ".edit_rental", :vcr do
|
81
78
|
it "updates given rental by ID" do
|
82
|
-
client.edit_rental(2, name:
|
79
|
+
client.edit_rental(2, name: "Updated Rental name")
|
83
80
|
assert_requested :put, bs_url("rentals/2"),
|
84
|
-
body: { rentals: [{ name:
|
81
|
+
body: { rentals: [{ name: "Updated Rental name" }] }.to_json
|
85
82
|
end
|
86
83
|
|
87
84
|
it "returns updated rental" do
|
88
|
-
VCR.use_cassette(
|
89
|
-
rental = client.edit_rental(2, name:
|
85
|
+
VCR.use_cassette("BookingSync_API_Client_Rentals/_edit_rental/updates_given_rental_by_ID") do
|
86
|
+
rental = client.edit_rental(2, name: "Updated Rental name")
|
90
87
|
expect(rental).to be_kind_of(BookingSync::API::Resource)
|
91
|
-
expect(rental.name).to eq(
|
88
|
+
expect(rental.name).to eq("Updated Rental name")
|
92
89
|
end
|
93
90
|
end
|
94
91
|
end
|
@@ -18,20 +18,17 @@ describe BookingSync::API::Client::Reviews do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
describe ".create_review", :vcr do
|
21
|
-
let(:attributes) {{
|
22
|
-
comment: "Awesome place",
|
23
|
-
rating: 5
|
24
|
-
}}
|
21
|
+
let(:attributes) { { comment: "Awesome place", rating: 5 } }
|
25
22
|
let(:booking) { BookingSync::API::Resource.new(client, id: 1) }
|
26
23
|
|
27
24
|
it "creates a new review" do
|
28
25
|
client.create_review(booking, attributes)
|
29
26
|
assert_requested :post, bs_url("bookings/1/reviews"),
|
30
|
-
body: {reviews: [attributes]}.to_json
|
27
|
+
body: { reviews: [attributes] }.to_json
|
31
28
|
end
|
32
29
|
|
33
30
|
it "returns newly created review" do
|
34
|
-
VCR.use_cassette(
|
31
|
+
VCR.use_cassette("BookingSync_API_Client_Reviews/_create_review/creates_a_new_review") do
|
35
32
|
review = client.create_review(booking, attributes)
|
36
33
|
expect(review.comment).to eql(attributes[:comment])
|
37
34
|
expect(review.rating).to eql(attributes[:rating])
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe BookingSync::API::Client::Seasons do
|
4
|
-
|
5
4
|
let(:client) { BookingSync::API::Client.new(test_access_token) }
|
6
5
|
|
7
6
|
describe ".seasons", :vcr do
|
@@ -19,21 +18,17 @@ describe BookingSync::API::Client::Seasons do
|
|
19
18
|
end
|
20
19
|
|
21
20
|
describe ".create_season", :vcr do
|
22
|
-
let(:attributes) {{
|
23
|
-
name: "New season",
|
24
|
-
ratio: 0.2,
|
25
|
-
minimum_stay: 4
|
26
|
-
}}
|
21
|
+
let(:attributes) { { name: "New season", ratio: 0.2, minimum_stay: 4 } }
|
27
22
|
let(:rates_table) { BookingSync::API::Resource.new(client, id: 13) }
|
28
23
|
|
29
24
|
it "creates a new season" do
|
30
25
|
client.create_season(rates_table, attributes)
|
31
26
|
assert_requested :post, bs_url("rates_tables/13/seasons"),
|
32
|
-
body: {seasons: [attributes]}.to_json
|
27
|
+
body: { seasons: [attributes] }.to_json
|
33
28
|
end
|
34
29
|
|
35
30
|
it "returns newly created season" do
|
36
|
-
VCR.use_cassette(
|
31
|
+
VCR.use_cassette("BookingSync_API_Client_Seasons/_create_season/creates_a_new_season") do
|
37
32
|
season = client.create_season(rates_table, attributes)
|
38
33
|
expect(season.name).to eql(attributes[:name])
|
39
34
|
expect(season.minimum_stay).to eql(attributes[:minimum_stay])
|
@@ -52,7 +47,7 @@ describe BookingSync::API::Client::Seasons do
|
|
52
47
|
end
|
53
48
|
|
54
49
|
it "returns updated season" do
|
55
|
-
VCR.use_cassette(
|
50
|
+
VCR.use_cassette("BookingSync_API_Client_Seasons/_edit_season/updates_given_season_by_ID") do
|
56
51
|
season = client.edit_season(6, attributes)
|
57
52
|
expect(season).to be_kind_of(BookingSync::API::Resource)
|
58
53
|
expect(season.name).to eq(attributes[:name])
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe BookingSync::API::Client::Sources do
|
4
|
-
|
5
4
|
let(:client) { BookingSync::API::Client.new(test_access_token) }
|
6
5
|
|
7
6
|
describe ".sources", :vcr do
|
@@ -20,7 +19,7 @@ describe BookingSync::API::Client::Sources do
|
|
20
19
|
|
21
20
|
describe ".create_source", :vcr do
|
22
21
|
let(:attributes) {
|
23
|
-
{ name:
|
22
|
+
{ name: "New source" }
|
24
23
|
}
|
25
24
|
|
26
25
|
it "creates a new source" do
|
@@ -30,7 +29,7 @@ describe BookingSync::API::Client::Sources do
|
|
30
29
|
end
|
31
30
|
|
32
31
|
it "returns newly created source" do
|
33
|
-
VCR.use_cassette(
|
32
|
+
VCR.use_cassette("BookingSync_API_Client_Sources/_create_source/creates_a_new_source") do
|
34
33
|
source = client.create_source(attributes)
|
35
34
|
expect(source.name).to eql(attributes[:name])
|
36
35
|
end
|
@@ -39,7 +38,7 @@ describe BookingSync::API::Client::Sources do
|
|
39
38
|
|
40
39
|
describe ".edit_source", :vcr do
|
41
40
|
let(:attributes) {
|
42
|
-
{ name:
|
41
|
+
{ name: "HomeAway.com" }
|
43
42
|
}
|
44
43
|
|
45
44
|
it "updates given source by ID" do
|
@@ -49,7 +48,7 @@ describe BookingSync::API::Client::Sources do
|
|
49
48
|
end
|
50
49
|
|
51
50
|
it "returns updated source" do
|
52
|
-
VCR.use_cassette(
|
51
|
+
VCR.use_cassette("BookingSync_API_Client_Sources/_edit_source/updates_given_source_by_ID") do
|
53
52
|
source = client.edit_source(4, attributes)
|
54
53
|
expect(source).to be_kind_of(BookingSync::API::Resource)
|
55
54
|
expect(source.name).to eql(attributes[:name])
|
@@ -21,8 +21,8 @@ describe BookingSync::API::Client::SpecialOffers do
|
|
21
21
|
let(:attributes) {
|
22
22
|
{
|
23
23
|
name: "New special offer",
|
24
|
-
start_at:
|
25
|
-
end_at:
|
24
|
+
start_at: "2014-04-28",
|
25
|
+
end_at: "2014-05-28",
|
26
26
|
discount: 5
|
27
27
|
}
|
28
28
|
}
|
@@ -31,11 +31,11 @@ describe BookingSync::API::Client::SpecialOffers do
|
|
31
31
|
it "creates a new special_offer" do
|
32
32
|
client.create_special_offer(rental, attributes)
|
33
33
|
assert_requested :post, bs_url("rentals/12/special_offers"),
|
34
|
-
body: {special_offers: [attributes]}.to_json
|
34
|
+
body: { special_offers: [attributes] }.to_json
|
35
35
|
end
|
36
36
|
|
37
37
|
it "returns newly created special_offer" do
|
38
|
-
VCR.use_cassette(
|
38
|
+
VCR.use_cassette("BookingSync_API_Client_SpecialOffers/_create_special_offer/creates_a_new_special_offer") do
|
39
39
|
special_offer = client.create_special_offer(rental, attributes)
|
40
40
|
expect(special_offer.name).to eql(attributes[:name])
|
41
41
|
end
|
@@ -44,7 +44,7 @@ describe BookingSync::API::Client::SpecialOffers do
|
|
44
44
|
|
45
45
|
describe ".edit_special_offer", :vcr do
|
46
46
|
let(:attributes) {
|
47
|
-
{ name:
|
47
|
+
{ name: "Updated special offer" }
|
48
48
|
}
|
49
49
|
|
50
50
|
it "updates given special_offer by ID" do
|
@@ -54,7 +54,7 @@ describe BookingSync::API::Client::SpecialOffers do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it "returns updated special_offer" do
|
57
|
-
VCR.use_cassette(
|
57
|
+
VCR.use_cassette("BookingSync_API_Client_SpecialOffers/_edit_special_offer/updates_given_special_offer_by_ID") do
|
58
58
|
special_offer = client.edit_special_offer(3, attributes)
|
59
59
|
expect(special_offer).to be_kind_of(BookingSync::API::Resource)
|
60
60
|
expect(special_offer.name).to eq(attributes[:name])
|
@@ -35,15 +35,15 @@ describe BookingSync::API::Client::StrictBookings do
|
|
35
35
|
it "creates a booking" do
|
36
36
|
client.create_strict_booking(params)
|
37
37
|
assert_requested :post, bs_url("strict_bookings"),
|
38
|
-
body: {bookings: [params]}.to_json
|
38
|
+
body: { bookings: [params] }.to_json
|
39
39
|
end
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
41
|
+
it "returns newly created booking" do
|
42
|
+
VCR.use_cassette("BookingSync_API_Client_StrictBookings/_create_strict_booking/creates_a_booking") do
|
43
|
+
booking = client.create_strict_booking(params)
|
44
|
+
expect(booking.start_at).to eql(Time.parse("2016-01-15 16:00:00 UTC"))
|
45
|
+
expect(booking.end_at).to eql(Time.parse("2016-01-23 10:00:00 UTC"))
|
46
|
+
end
|
47
|
+
end
|
48
48
|
end
|
49
49
|
end
|
@@ -29,7 +29,7 @@ describe BookingSync::API::Client do
|
|
29
29
|
before { VCR.turn_off! }
|
30
30
|
it "makes a HTTP POST request with body" do
|
31
31
|
stub_post("resource")
|
32
|
-
client.post("resource",
|
32
|
+
client.post("resource", key: :value)
|
33
33
|
assert_requested :post, bs_url("resource"), body: '{"key":"value"}'
|
34
34
|
end
|
35
35
|
|
@@ -38,7 +38,7 @@ describe BookingSync::API::Client do
|
|
38
38
|
stub_post("resource", status: 422, body: { errors: { country_code:
|
39
39
|
["is required"] } }.to_json)
|
40
40
|
expect {
|
41
|
-
client.post("resource",
|
41
|
+
client.post("resource", key: :value)
|
42
42
|
}.to raise_error(BookingSync::API::UnprocessableEntity) { |error|
|
43
43
|
expect(error.message).to include '{"errors":{"country_code":["is required"]}}'
|
44
44
|
}
|
@@ -50,7 +50,7 @@ describe BookingSync::API::Client do
|
|
50
50
|
before { VCR.turn_off! }
|
51
51
|
it "makes a HTTP PUT request with body" do
|
52
52
|
stub_put("resource")
|
53
|
-
client.put("resource",
|
53
|
+
client.put("resource", key: :value)
|
54
54
|
assert_requested :put, bs_url("resource"), body: '{"key":"value"}'
|
55
55
|
end
|
56
56
|
end
|
@@ -67,7 +67,7 @@ describe BookingSync::API::Client do
|
|
67
67
|
describe "#request" do
|
68
68
|
context "on response which responds to :resources" do
|
69
69
|
it "returns an array of resources" do
|
70
|
-
stub_get("resource", body: {resources: [{name: "Megan"}]}.to_json)
|
70
|
+
stub_get("resource", body: { resources: [{ name: "Megan" }] }.to_json)
|
71
71
|
resources = client.request(:get, "resource")
|
72
72
|
expect(resources).to be_kind_of(Array)
|
73
73
|
expect(resources.first.name).to eq("Megan")
|
@@ -92,25 +92,25 @@ describe BookingSync::API::Client do
|
|
92
92
|
stub_get("resource")
|
93
93
|
client.call(:get, "resource")
|
94
94
|
assert_requested :get, bs_url("resource"),
|
95
|
-
headers: {"Authorization" => "Bearer fake-access-token"}
|
95
|
+
headers: { "Authorization" => "Bearer fake-access-token" }
|
96
96
|
end
|
97
97
|
|
98
98
|
it "requests proper accept header for JSON API" do
|
99
99
|
stub_get("resource")
|
100
100
|
client.call(:get, "resource")
|
101
101
|
assert_requested :get, bs_url("resource"),
|
102
|
-
headers: {"Accept" => "application/vnd.api+json"}
|
102
|
+
headers: { "Accept" => "application/vnd.api+json" }
|
103
103
|
end
|
104
104
|
|
105
105
|
it "requests sends data with JSON API content type" do
|
106
106
|
stub_post("resource")
|
107
107
|
client.call(:post, "resource")
|
108
108
|
assert_requested :post, bs_url("resource"),
|
109
|
-
headers: {"Content-Type" => "application/vnd.api+json"}
|
109
|
+
headers: { "Content-Type" => "application/vnd.api+json" }
|
110
110
|
end
|
111
111
|
|
112
112
|
it "returns an Response object of resources" do
|
113
|
-
attributes = {resources: [{name: "Megan"}]}
|
113
|
+
attributes = { resources: [{ name: "Megan" }] }
|
114
114
|
stub_post("resource", body: attributes.to_json)
|
115
115
|
response = client.call(:post, "resource", attributes)
|
116
116
|
expect(response).to be_kind_of(BookingSync::API::Response)
|
@@ -120,8 +120,8 @@ describe BookingSync::API::Client do
|
|
120
120
|
stub_get("resource", body: {}.to_json)
|
121
121
|
response = client.call(:get, "resource")
|
122
122
|
assert_requested :get, bs_url("resource"),
|
123
|
-
headers: {"User-Agent" =>
|
124
|
-
"BookingSync API gem v#{BookingSync::API::VERSION}"}
|
123
|
+
headers: { "User-Agent" =>
|
124
|
+
"BookingSync API gem v#{BookingSync::API::VERSION}" }
|
125
125
|
end
|
126
126
|
|
127
127
|
context "API returns 401" do
|
@@ -168,7 +168,7 @@ describe BookingSync::API::Client do
|
|
168
168
|
client.get("resource")
|
169
169
|
}.to raise_error(BookingSync::API::UnsupportedResponse) { |error|
|
170
170
|
expect(error.status).to eql(405)
|
171
|
-
expect(error.headers).to eq(
|
171
|
+
expect(error.headers).to eq("content-type" => "application/vnd.api+json")
|
172
172
|
expect(error.body).to eq("Whoops!")
|
173
173
|
expect(error.message).to include("Received unsupported response from BookingSync API")
|
174
174
|
}
|
@@ -207,7 +207,7 @@ describe BookingSync::API::Client do
|
|
207
207
|
context "user passes additional query options" do
|
208
208
|
it "constructs url with query options" do
|
209
209
|
stub_get("resource?months=12&status=booked,unavailable")
|
210
|
-
client.get("resource", status: [:booked, :unavailable], months:
|
210
|
+
client.get("resource", status: [:booked, :unavailable], months: "12")
|
211
211
|
assert_requested :get, bs_url("resource?months=12&status=booked,unavailable")
|
212
212
|
end
|
213
213
|
end
|
@@ -241,7 +241,7 @@ describe BookingSync::API::Client do
|
|
241
241
|
|
242
242
|
it "uses logger provided by user" do
|
243
243
|
client = BookingSync::API::Client.new(test_access_token, logger: logger)
|
244
|
-
stub_get("resources", body: {"resources" => [{id: 1}, {id: 2}]}.to_json)
|
244
|
+
stub_get("resources", body: { "resources" => [{ id: 1 }, { id: 2 }] }.to_json)
|
245
245
|
client.get("resources")
|
246
246
|
messages = log.rewind && log.read
|
247
247
|
expect(messages).to include("GET https://www.bookingsync.com/api/v3/resources")
|
@@ -263,7 +263,7 @@ describe BookingSync::API::Client do
|
|
263
263
|
it "logs X-Request-Id from headers" do
|
264
264
|
client = BookingSync::API::Client.new(test_access_token, logger: logger)
|
265
265
|
stub_get("resources", body: {}.to_json,
|
266
|
-
headers: {
|
266
|
+
headers: { "X-Request-Id" => "021bfb82" })
|
267
267
|
client.get("resources")
|
268
268
|
|
269
269
|
messages = log.rewind && log.read
|
@@ -273,9 +273,23 @@ describe BookingSync::API::Client do
|
|
273
273
|
|
274
274
|
describe "#last_response" do
|
275
275
|
it "returns last response" do
|
276
|
-
stub_get("resources", body: {meta: {count: 10}, resources: []}.to_json)
|
276
|
+
stub_get("resources", body: { meta: { count: 10 }, resources: [] }.to_json)
|
277
277
|
client.get("resources")
|
278
278
|
expect(client.last_response.meta).to eql(count: 10)
|
279
279
|
end
|
280
280
|
end
|
281
|
+
|
282
|
+
context "pagination" do
|
283
|
+
before do
|
284
|
+
stub_get("resources", headers: { "Link" => '<resources?page=2>; rel="next"' }, body: { meta: { text: "first request" }, resources: [] }.to_json)
|
285
|
+
stub_get("resources?page=2", body: { meta: { text: "second request" }, resources: [] }.to_json)
|
286
|
+
end
|
287
|
+
|
288
|
+
describe "#pagination_first_response" do
|
289
|
+
it "returns first response of a paginated call" do
|
290
|
+
client.paginate("resources", auto_paginate: true)
|
291
|
+
expect(client.pagination_first_response.meta).to eql(text: "first request")
|
292
|
+
end
|
293
|
+
end
|
294
|
+
end
|
281
295
|
end
|
@@ -27,8 +27,8 @@ describe BookingSync::API::Error do
|
|
27
27
|
describe "#headers" do
|
28
28
|
it "returns response headers" do
|
29
29
|
expect { request }.to raise_error(BookingSync::API::Error) { |exception|
|
30
|
-
expect(exception.headers).to eq(
|
31
|
-
"application/vnd.api+json"
|
30
|
+
expect(exception.headers).to eq("content-type" =>
|
31
|
+
"application/vnd.api+json")
|
32
32
|
}
|
33
33
|
end
|
34
34
|
end
|
@@ -36,7 +36,7 @@ describe BookingSync::API::Error do
|
|
36
36
|
describe "#message" do
|
37
37
|
it "returns standard exception message" do
|
38
38
|
expect { request }.to raise_error(BookingSync::API::Error) { |exception|
|
39
|
-
expect(exception.message).to eq(%
|
39
|
+
expect(exception.message).to eq(%{BookingSync::API::UnprocessableEntity
|
40
40
|
HTTP status code : 422
|
41
41
|
Headers : {"content-type"=>"application/vnd.api+json"}
|
42
42
|
Body : {"errors":{"name":["can't be blank"]}}})
|
@@ -1,12 +1,14 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
describe BookingSync::API::Relation do
|
4
4
|
before { VCR.turn_off! }
|
5
5
|
let(:client) { BookingSync::API::Client.new(test_access_token,
|
6
|
-
base_url: "http://example.com")
|
7
|
-
|
6
|
+
base_url: "http://example.com")
|
7
|
+
}
|
8
|
+
let(:links) { { "foo.photos" => "http://example.com/photos/{foo.photos}" } }
|
8
9
|
let(:relation) { BookingSync::API::Relation.new(client, :"foo.photos",
|
9
|
-
"http://example.com/photos/{foo.photos}")
|
10
|
+
"http://example.com/photos/{foo.photos}")
|
11
|
+
}
|
10
12
|
|
11
13
|
describe ".from_links" do
|
12
14
|
it "returns a hash of relations" do
|
@@ -28,7 +30,7 @@ describe BookingSync::API::Relation do
|
|
28
30
|
describe "#get" do
|
29
31
|
it "makes a HTTP GET request using call on client" do
|
30
32
|
url_template = ::Addressable::Template.new("http://example.com/photos/{foo.photos}")
|
31
|
-
expect(client).to receive(:call).with(:get, url_template, {fields: [:name, :description]}, {})
|
33
|
+
expect(client).to receive(:call).with(:get, url_template, { fields: [:name, :description] }, {})
|
32
34
|
relation.get(fields: [:name, :description])
|
33
35
|
end
|
34
36
|
end
|
@@ -36,7 +38,7 @@ describe BookingSync::API::Relation do
|
|
36
38
|
describe "#post" do
|
37
39
|
it "makes a HTTP POST request using call on client" do
|
38
40
|
url_template = ::Addressable::Template.new("http://example.com/photos/{foo.photos}")
|
39
|
-
expect(client).to receive(:call).with(:post, url_template, {fields: [:name, :description]}, {})
|
41
|
+
expect(client).to receive(:call).with(:post, url_template, { fields: [:name, :description] }, {})
|
40
42
|
relation.post(fields: [:name, :description])
|
41
43
|
end
|
42
44
|
end
|
@@ -1,22 +1,25 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
describe BookingSync::API::Resource do
|
4
|
-
let(:links) { {photos: [9, 10]} }
|
4
|
+
let(:links) { { photos: [9, 10] } }
|
5
5
|
let(:relation) {
|
6
|
-
BookingSync::API::Relation.from_links(client,
|
7
|
-
:"foo.photos" => "http://foo.com/photos/{foo.photos}",
|
8
|
-
:"foo.category" => "http://foo.com/categories/{foo.category}",
|
9
|
-
:"foo.article" => "http://foo.com/articles/{foo.taggable.id}"
|
10
|
-
})
|
6
|
+
BookingSync::API::Relation.from_links(client,
|
7
|
+
:"foo.photos" => "http://foo.com/photos/{foo.photos}", # rubocop:disable Style/HashSyntax
|
8
|
+
:"foo.category" => "http://foo.com/categories/{foo.category}", # rubocop:disable Style/HashSyntax
|
9
|
+
:"foo.article" => "http://foo.com/articles/{foo.taggable.id}") # rubocop:disable Style/HashSyntax
|
11
10
|
}
|
12
11
|
let(:client) { BookingSync::API::Client.new(test_access_token,
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
base_url: "http://foo.com")
|
13
|
+
}
|
14
|
+
let(:data) do
|
15
|
+
{
|
16
|
+
name: "foo",
|
17
|
+
width: 700,
|
18
|
+
links: links,
|
19
|
+
details: { count: 1 },
|
20
|
+
id: 10
|
21
|
+
}
|
22
|
+
end
|
20
23
|
let(:resource) {
|
21
24
|
BookingSync::API::Resource.new(client, data, relation, "foo")
|
22
25
|
}
|
@@ -50,35 +53,35 @@ describe BookingSync::API::Resource do
|
|
50
53
|
context "has_many (ids given as an array)" do
|
51
54
|
it "fetches an association based on links" do
|
52
55
|
stub_request(:get, "http://foo.com/photos/9,10")
|
53
|
-
.to_return(body: {photos: [{file:
|
54
|
-
expect(resource.photos).to eql([{:
|
56
|
+
.to_return(body: { photos: [{ file: "a.jpg" }] }.to_json)
|
57
|
+
expect(resource.photos).to eql([{ file: "a.jpg" }])
|
55
58
|
end
|
56
59
|
end
|
57
60
|
|
58
61
|
context "has_one (id given as a single integer)" do
|
59
|
-
let(:links) { {category: 15} }
|
62
|
+
let(:links) { { category: 15 } }
|
60
63
|
it "fetches an association based on links" do
|
61
64
|
stub_request(:get, "http://foo.com/categories/15")
|
62
|
-
.to_return(body: {categories: [{name: "Secret one"}]}.to_json)
|
63
|
-
expect(resource.category).to eql([{name: "Secret one"}])
|
65
|
+
.to_return(body: { categories: [{ name: "Secret one" }] }.to_json)
|
66
|
+
expect(resource.category).to eql([{ name: "Secret one" }])
|
64
67
|
end
|
65
68
|
end
|
66
69
|
|
67
70
|
context "polymorphic association" do
|
68
71
|
let(:links) do
|
69
|
-
|
72
|
+
{ taggable: { "type" => "Article", "id" => "15" },
|
70
73
|
other_polymorphable: { "type" => "Other", "id" => "15" },
|
71
74
|
category: 15 }
|
72
75
|
end
|
73
76
|
it "fetches association based on links and type" do
|
74
77
|
stub_request(:get, "http://foo.com/articles/15")
|
75
|
-
.to_return(body: {articles: [{name: "Secret one"}]}.to_json)
|
76
|
-
expect(resource.taggable).to eql([{name: "Secret one"}])
|
78
|
+
.to_return(body: { articles: [{ name: "Secret one" }] }.to_json)
|
79
|
+
expect(resource.taggable).to eql([{ name: "Secret one" }])
|
77
80
|
end
|
78
81
|
end
|
79
82
|
|
80
83
|
context "when there are not associated ids" do
|
81
|
-
let(:links) { {photos: []} }
|
84
|
+
let(:links) { { photos: [] } }
|
82
85
|
it "returns an empty array" do
|
83
86
|
expect(resource.photos).to eql([])
|
84
87
|
end
|
@@ -92,12 +95,12 @@ describe BookingSync::API::Resource do
|
|
92
95
|
|
93
96
|
it "passes query option to request" do
|
94
97
|
stub_request(:get, "http://foo.com/photos/9,10?fields=description")
|
95
|
-
.to_return(body: {photos: [{file:
|
98
|
+
.to_return(body: { photos: [{ file: "a.jpg" }] }.to_json)
|
96
99
|
resource.photos(fields: :description)
|
97
100
|
end
|
98
101
|
|
99
102
|
context "when association loaded by eager loading" do
|
100
|
-
let(:data) { {links: links, photos: [{file:
|
103
|
+
let(:data) { { links: links, photos: [{ file: "b.jpg" }] } }
|
101
104
|
|
102
105
|
it "doesn't fetch it again" do
|
103
106
|
resource.photos
|
@@ -105,7 +108,7 @@ describe BookingSync::API::Resource do
|
|
105
108
|
end
|
106
109
|
|
107
110
|
it "returns previously loaded data" do
|
108
|
-
expect(resource.photos).to eq([{file:
|
111
|
+
expect(resource.photos).to eq([{ file: "b.jpg" }])
|
109
112
|
end
|
110
113
|
end
|
111
114
|
end
|