bookingsync-api 0.1.11 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.travis.yml +3 -1
  4. data/CHANGELOG.md +12 -0
  5. data/bookingsync-api.gemspec +3 -3
  6. data/lib/bookingsync/api/client/applications.rb +43 -0
  7. data/lib/bookingsync/api/client/applications_periods_rentals.rb +49 -0
  8. data/lib/bookingsync/api/client/booking_comments.rb +1 -1
  9. data/lib/bookingsync/api/client/contacts.rb +63 -0
  10. data/lib/bookingsync/api/client/rental_urls.rb +72 -0
  11. data/lib/bookingsync/api/client/rentals.rb +3 -2
  12. data/lib/bookingsync/api/client.rb +12 -2
  13. data/lib/bookingsync/api/version.rb +1 -1
  14. data/spec/bookingsync/api/client/applications_periods_rentals_spec.rb +70 -0
  15. data/spec/bookingsync/api/client/applications_spec.rb +44 -0
  16. data/spec/bookingsync/api/client/contacts_spec.rb +116 -0
  17. data/spec/bookingsync/api/client/rental_urls_spec.rb +83 -0
  18. data/spec/fixtures/cassettes/BookingSync_API_Client_Applications/_application/returns_a_single_application.yml +84 -0
  19. data/spec/fixtures/cassettes/BookingSync_API_Client_Applications/_applications/returns_applications.yml +85 -0
  20. data/spec/fixtures/cassettes/BookingSync_API_Client_Applications/_edit_application/returns_updated_application.yml +73 -0
  21. data/spec/fixtures/cassettes/BookingSync_API_Client_Applications/_edit_application/updates_given_application_by_ID.yml +73 -0
  22. data/spec/fixtures/cassettes/BookingSync_API_Client_ApplicationsPeriodsRentals/_applications_periods_rental/returns_applications_periods_rental.yml +80 -0
  23. data/spec/fixtures/cassettes/BookingSync_API_Client_ApplicationsPeriodsRentals/_applications_periods_rentals/returns_applications_periods_rentals.yml +80 -0
  24. data/spec/fixtures/cassettes/BookingSync_API_Client_ApplicationsPeriodsRentals/_create_applications_periods_rental/creates_a_applications_periods_rental.yml +71 -0
  25. data/spec/fixtures/cassettes/BookingSync_API_Client_ApplicationsPeriodsRentals/_edit_applications_periods_rental/returns_updated_applications_periods_rental.yml +69 -0
  26. data/spec/fixtures/cassettes/BookingSync_API_Client_ApplicationsPeriodsRentals/_edit_applications_periods_rental/updates_given_applications_periods_rental_by_ID.yml +69 -0
  27. data/spec/fixtures/cassettes/BookingSync_API_Client_Bookings/_create_applications_periods_rental/creates_an_applications_periods_rental.yml +71 -0
  28. data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_contact/returns_a_single_contact.yml +99 -0
  29. data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_contact/returns_contact.yml +99 -0
  30. data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_contacts/returns_contacts.yml +99 -0
  31. data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_contacts/returns_contacts_by_ids.yml +99 -0
  32. data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_create_contact/creates_a_new_contact.yml +74 -0
  33. data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_delete_contact/deletes_given_contact.yml +63 -0
  34. data/spec/fixtures/cassettes/BookingSync_API_Client_Contacts/_edit_contact/updates_given_contact_by_ID.yml +71 -0
  35. data/spec/fixtures/cassettes/BookingSync_API_Client_RentalUrls/_cancel_rental_url/cancels_given_rental_url.yml +63 -0
  36. data/spec/fixtures/cassettes/BookingSync_API_Client_RentalUrls/_create_rental_url/creates_a_new_rental_url.yml +71 -0
  37. data/spec/fixtures/cassettes/BookingSync_API_Client_RentalUrls/_edit_rental_url/updates_given_rental_url_by_ID.yml +69 -0
  38. data/spec/fixtures/cassettes/BookingSync_API_Client_RentalUrls/_rental_url/returns_rental_url.yml +81 -0
  39. data/spec/fixtures/cassettes/BookingSync_API_Client_RentalUrls/_rental_urls/links/returns_associated_rental.yml +166 -0
  40. data/spec/fixtures/cassettes/BookingSync_API_Client_RentalUrls/_rental_urls/returns_rental_urls.yml +80 -0
  41. data/spec/fixtures/cassettes/BookingSync_API_Client_RentalsAmenities/_create_rental_url/creates_a_new_rental_url.yml +71 -0
  42. data/spec/fixtures/cassettes/BookingSync_API_Client_RentalsAmenities/_edit_rental_url/updates_given_rentals_url.yml +69 -0
  43. data/spec/fixtures/cassettes/BookingSync_API_Client_RentalsAmenities/_edit_rental_url/updates_given_rentals_url_by_ID.yml +69 -0
  44. metadata +88 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8191b75789179d2fad537f87145aec7c0e22c527
4
- data.tar.gz: 1490a2be5684c26737664421e696bf462874d056
2
+ SHA256:
3
+ metadata.gz: 97439dc793ee31707c3bf1e4f99eff2af5cb365ad02e68db12d313c98c9272da
4
+ data.tar.gz: c1119cf2b6665d5ba31b44ae2285d2d71303df40d0659f8eab3877fd07df6bcf
5
5
  SHA512:
6
- metadata.gz: fa35e5d6a50650d73f1506b4c75d3a715f986b47dcdb0798920e65296892dc9a8adc0f4c44ef4d67274bd8c36b934a5667e5ae6b46af66b381f3577c656666b7
7
- data.tar.gz: c20346d438250511b7ca6a2e374bb4b35017e42e5fcf54752c0b9c6ebdc0dc7aafe46a9e1e477c21d244ea01341de2a2053298b613fed370a134bf53ad4e9feb
6
+ metadata.gz: 48d1876b9c1f5fadf469415015f4cd869c727a0ffade3901d4aa3fcf858aafefa0173c62dee4e3ef72fa3db33fb092d180f3192e1442958d6142c0e84e48e3e4
7
+ data.tar.gz: 72d793dc6bf7b4bd85ca5b773a9e03025f020cbc1cc23c694fbb5cb7a788df1dd7f09e5b51d6ac59b5231d58026e72ebfb14e52b3cb390c9ebdd05a191a5d5ed
data/.gitignore CHANGED
@@ -1,6 +1,7 @@
1
1
  *.gem
2
2
  *.rbc
3
3
  .bundle
4
+ .byebug_history
4
5
  .config
5
6
  .yardoc
6
7
  Gemfile.lock
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
@@ -2,6 +2,18 @@
2
2
 
3
3
  # master
4
4
 
5
+ ## 0.2.0 - 2022-01-10
6
+ - upgrade net-http-persistent to be ruby 3 ready
7
+
8
+ ## 0.1.14 - 2019-10-15
9
+ - Add supports for `rental_urls` endpoint.
10
+
11
+ ## 0.1.13 - 2019-10-08
12
+ - Add supports for `contacts` endpoint.
13
+
14
+ ## 0.1.12 - 2018-05-25
15
+ - updated Faraday and Net HTTP Persistent gem to remove workaround
16
+
5
17
  ## 0.1.11 - 2018-05-18
6
18
  - Added `add_attachment_to_message`.
7
19
 
@@ -18,11 +18,11 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "faraday", "~> 0.9"
22
- spec.add_dependency "net-http-persistent", "~> 2"
21
+ spec.add_dependency "faraday", ">= 0.15.2"
22
+ spec.add_dependency "net-http-persistent", [">= 4.0.1", "< 5.0"]
23
23
  spec.add_dependency "hashie"
24
24
  spec.add_dependency "addressable"
25
- spec.add_development_dependency "bundler", "~> 1.5"
25
+ spec.add_development_dependency "bundler"
26
26
  spec.add_development_dependency "rake"
27
27
  spec.add_development_dependency "bookingsync-stylecheck"
28
28
  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, {conent: "New conent"})
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
@@ -0,0 +1,72 @@
1
+ module BookingSync::API
2
+ class Client
3
+ module RentalUrls
4
+ # List rental_urls
5
+ #
6
+ # Returns rental_urls 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 rental_urls.
10
+ #
11
+ # @example Get the list of rental_urls for the current account
12
+ # rental_urls = @api.rental_urls
13
+ # rental_urls.first.label # => "HomeAway"
14
+ # @see http://developers.bookingsync.com/reference/endpoints/rental_urls/#list-rental_urls
15
+ def rental_urls(options = {}, &block)
16
+ paginate :rental_urls, options, &block
17
+ end
18
+
19
+ # Get a single rental_url
20
+ #
21
+ # @param rental_url [BookingSync::API::Resource|Integer] RentalUrl or ID
22
+ # of the rental_url.
23
+ # @return [BookingSync::API::Resource]
24
+ def rental_url(rental_url)
25
+ get("rental_urls/#{rental_url}").pop
26
+ end
27
+
28
+ # Create a new rental_url
29
+ #
30
+ # @param options [Hash] RentalUrl's attributes.
31
+ # @return [BookingSync::API::Resource] Newly created rental_url.
32
+ def create_rental_url(rental, options = {})
33
+ if file_path = options.delete(:file_path)
34
+ options[:file] ||= base_64_encode(file_path)
35
+ end
36
+ post("rentals/#{rental}/rental_urls", rental_urls: options).pop
37
+ end
38
+
39
+ # Edit a rental_url
40
+ #
41
+ # @param rental_url [BookingSync::API::Resource|Integer] RentalUrl or ID of
42
+ # the rental_url to be updated.
43
+ # @param options [Hash] RentalUrl attributes to be updated.
44
+ # @return [BookingSync::API::Resource] Updated rental_url on success,
45
+ # exception is raised otherwise.
46
+ # @example
47
+ # rental_url = @api.rental_urls.first
48
+ # @api.edit_rental_url(rental_url, { label: "Airbnb" })
49
+ def edit_rental_url(rental_url, options = {})
50
+ if file_path = options.delete(:file_path)
51
+ options[:file] ||= base_64_encode(file_path)
52
+ end
53
+ put("rental_urls/#{rental_url}", rental_urls: options).pop
54
+ end
55
+
56
+ # Cancel a RentalUrl
57
+ #
58
+ # @param rental_url [BookingSync::API::Resource|Integer] RentalUrl or ID
59
+ # of the rental_url to be canceled.
60
+ # @return [NilClass] Returns nil on success.
61
+ def cancel_rental_url(rental_url)
62
+ delete "rental_urls/#{rental_url}"
63
+ end
64
+
65
+ private
66
+
67
+ def base_64_encode(file_path)
68
+ Base64.encode64(File.read(file_path))
69
+ end
70
+ end
71
+ end
72
+ 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"].compact.join("/")
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
- get(["rentals", Array(rentals).join(","), "meta"].compact.join("/")).pop
82
+ path = reject_blank_values(["rentals", Array(rentals).join(","), "meta"]).join("/")
83
+ get(path).pop
83
84
  end
84
85
  end
85
86
  end
@@ -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"
@@ -35,6 +38,7 @@ require "bookingsync/api/client/rental_agreements"
35
38
  require "bookingsync/api/client/rental_cancelation_policies"
36
39
  require "bookingsync/api/client/rental_cancelation_policy_items"
37
40
  require "bookingsync/api/client/rentals_contents_overrides"
41
+ require "bookingsync/api/client/rental_urls"
38
42
  require "bookingsync/api/client/reviews"
39
43
  require "bookingsync/api/client/seasons"
40
44
  require "bookingsync/api/client/special_offers"
@@ -50,13 +54,14 @@ require "bookingsync/api/resource"
50
54
  require "bookingsync/api/serializer"
51
55
  require "logger"
52
56
  require "addressable/template"
53
- require "net/http/persistent"
54
57
 
55
58
  module BookingSync::API
56
59
  class Client
57
60
  extend Forwardable
58
61
  include BookingSync::API::Client::Accounts
59
62
  include BookingSync::API::Client::Amenities
63
+ include BookingSync::API::Client::Applications
64
+ include BookingSync::API::Client::ApplicationsPeriodsRentals
60
65
  include BookingSync::API::Client::Attachments
61
66
  include BookingSync::API::Client::Availabilities
62
67
  include BookingSync::API::Client::Bathrooms
@@ -70,6 +75,7 @@ module BookingSync::API
70
75
  include BookingSync::API::Client::ChangeOvers
71
76
  include BookingSync::API::Client::Conversations
72
77
  include BookingSync::API::Client::Clients
78
+ include BookingSync::API::Client::Contacts
73
79
  include BookingSync::API::Client::Destinations
74
80
  include BookingSync::API::Client::Fees
75
81
  include BookingSync::API::Client::Hosts
@@ -94,6 +100,7 @@ module BookingSync::API
94
100
  include BookingSync::API::Client::RentalCancelationPolicies
95
101
  include BookingSync::API::Client::RentalCancelationPolicyItems
96
102
  include BookingSync::API::Client::RentalsContentsOverrides
103
+ include BookingSync::API::Client::RentalUrls
97
104
  include BookingSync::API::Client::Reviews
98
105
  include BookingSync::API::Client::Seasons
99
106
  include BookingSync::API::Client::SpecialOffers
@@ -301,7 +308,6 @@ module BookingSync::API
301
308
 
302
309
  def middleware
303
310
  Faraday::RackBuilder.new do |builder|
304
- builder.use ::Faraday::Request::Retry, max: 1, exceptions: [::Net::HTTP::Persistent::Error]
305
311
  builder.use :logger, logger
306
312
  builder.adapter :net_http_persistent
307
313
  end
@@ -417,5 +423,9 @@ module BookingSync::API
417
423
  def next_page(response, request_settings)
418
424
  response.relations[:next].call({}, { method: request_settings[:request_method] })
419
425
  end
426
+
427
+ def reject_blank_values(array)
428
+ array.reject { |value| value.nil? || value == "" }
429
+ end
420
430
  end
421
431
  end
@@ -1,5 +1,5 @@
1
1
  module BookingSync
2
2
  module API
3
- VERSION = "0.1.11"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  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