zumata_v3 0.0.1

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.
@@ -0,0 +1,228 @@
1
+ require 'json'
2
+ require 'spec_helper'
3
+ require './lib/zumata_v3'
4
+
5
+ describe "ZumataV3::HotelClient configuration" do
6
+
7
+ it 'will raise an error if api & url are not provided' do
8
+
9
+ expect{
10
+ ZumataV3.configure do |config|
11
+ config.api_url = nil
12
+ config.api_key = nil
13
+ end
14
+ ZumataV3::HotelClient.new
15
+ }.to raise_error(ZumataV3::ClientConfigError)
16
+
17
+ expect{
18
+ ZumataV3.configure do |config|
19
+ config.api_url = ENV["ZUMATA_API_URL"]
20
+ config.api_key = nil
21
+ end
22
+ ZumataV3::HotelClient.new
23
+ }.to raise_error(ZumataV3::ClientConfigError)
24
+
25
+ expect{
26
+ ZumataV3.configure do |config|
27
+ config.api_url = nil
28
+ config.api_key = ENV["ZUMATA_API_KEY"]
29
+ end
30
+ ZumataV3::HotelClient.new
31
+ }.to raise_error(ZumataV3::ClientConfigError)
32
+
33
+ end
34
+
35
+ end
36
+
37
+ describe "ZumataV3::HotelClient endpoints" do
38
+
39
+ $vcr_recorded_check_in_date = "2015-07-24"
40
+ $vcr_recorded_check_out_date = "2015-07-25"
41
+
42
+ before(:each) do
43
+
44
+ raise "Tests require environment variable 'ZUMATA_API_KEY' to be configured" unless ENV["ZUMATA_API_KEY"]
45
+
46
+ ZumataV3.configure do |config|
47
+ config.api_url = ENV["ZUMATA_API_URL"]
48
+ config.api_key = ENV["ZUMATA_API_KEY"]
49
+ end
50
+
51
+ @client = ZumataV3::HotelClient.new
52
+ end
53
+
54
+ describe "search_by_destination_id" do
55
+
56
+ it 'returns a successful response if the query is valid', :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/search_by_destination_id_done", :record => :new_episodes } do
57
+ # note - when recording the cassette this requires a cached search w/ results to exist
58
+ destination_id = "f75a8cff-c26e-4603-7b45-1b0f8a5aa100" # Singapore
59
+ results = @client.search_by_destination_id destination_id, {check_in_date: $vcr_recorded_check_in_date, check_out_date: $vcr_recorded_check_out_date}
60
+ data = JSON.parse(results.body)
61
+ expect(data).to_not be(nil)
62
+ expect(data["search"]).to_not be(nil)
63
+ expect(data["results"]).to_not be(nil)
64
+ end
65
+
66
+ it 'raises an error if invalid inputs are provided', :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/search_by_destination_id_fail", :record => :new_episodes } do
67
+ destination_id = "invalid"
68
+ expect{
69
+ @client.search_by_destination_id destination_id, {check_in_date: $vcr_recorded_check_in_date, check_out_date: $vcr_recorded_check_out_date}
70
+ }.to raise_error(ZumataV3::BadRequestError)
71
+ end
72
+
73
+ end
74
+
75
+ describe "pre_book" do
76
+
77
+ def sample_search destination_id="f75a8cff-c26e-4603-7b45-1b0f8a5aa100"
78
+ return {
79
+ :destination_id => destination_id,
80
+ :check_in_date => $vcr_recorded_check_in_date,
81
+ :check_out_date => $vcr_recorded_check_out_date,
82
+ :room_count => 1,
83
+ :adult_count => 2
84
+ }
85
+ end
86
+
87
+ def sample_package
88
+ return {
89
+ :hotel_id => "00d7ed72-2325-4225-5e95-02d340e48fe5",
90
+ :room_details => {
91
+ :description => "Superior",
92
+ :food => 0,
93
+ :room_type => "Superior",
94
+ :room_view => "",
95
+ :beds => {
96
+ :single => 2
97
+ }
98
+ },
99
+ :booking_key => "39c90b48",
100
+ :room_rate => 144.92,
101
+ :room_rate_currency => "USD",
102
+ :chargeable_rate => 15,
103
+ :chargeable_rate_currency => "USD"
104
+ }
105
+ end
106
+
107
+ def sample_config
108
+ return {
109
+ :pricing => {
110
+ :fixed_tolerance => 1
111
+ },
112
+ :matching => {
113
+ :flexible_room_view => true,
114
+ :flexible_beds => true
115
+ }
116
+ }
117
+ end
118
+
119
+ it 'pre-books a package returned from the search request and return booking information' , :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/prebook_done", :record => :new_episodes } do
120
+ results = @client.pre_book sample_search, sample_package, sample_config
121
+ data = JSON.parse(results.body)
122
+ expect(data).to_not be(nil)
123
+ expect(data["pre_book_id"]).to_not be(nil)
124
+ expect(data["cancellation_policy"]["remarks"]).to_not be(nil)
125
+ expect(data["cancellation_policy"]["cancellation_policies"]).to_not be(nil)
126
+ end
127
+
128
+ it 'raises an error if invalid inputs are provided', :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/prebook_fail", :record => :new_episodes } do
129
+ expect{
130
+ @client.pre_book sample_search("invalid_destination_id"), sample_package, sample_config
131
+ }.to raise_error(ZumataV3::BadRequestError)
132
+ end
133
+
134
+ end
135
+
136
+ describe "pre_book_details" do
137
+
138
+ it 'returns a successful response if the query is valid', :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/get_prebook_done", :record => :new_episodes } do
139
+ pre_book_id = "2b076a9d-9051-4ab5-57f7-59aaf9d8ce2d"
140
+ results = @client.pre_book_details pre_book_id
141
+ data = JSON.parse(results.body)
142
+ expect(data).to_not be(nil)
143
+ expect(data["pre_book_id"]).to_not be(nil)
144
+ end
145
+
146
+ it 'raises an error if pre-book id provided is invalid', :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/get_prebook_fail", :record => :new_episodes } do
147
+ pre_book_id = "invalid"
148
+ expect{
149
+ results = @client.pre_book_details pre_book_id
150
+ }.to raise_error(ZumataV3::NotFoundError)
151
+ end
152
+
153
+ end
154
+
155
+ describe "book_by_credit" do
156
+
157
+ def sample_guest
158
+ return {
159
+ :salutation => "Mr.",
160
+ :first_name => "Charlie",
161
+ :last_name => "Smith",
162
+ :email => "charlie.smith@zumata.com",
163
+ :city => "Montreal",
164
+ :state => "Quebec",
165
+ :street => "123 Outtamy way",
166
+ :postal_code => "H3H0H0",
167
+ :country => "Canada",
168
+ :room_remarks => "3 carpets please",
169
+ :nationality => "Canadian",
170
+ :contact_no => "+1 514 555-1234",
171
+ }
172
+ end
173
+
174
+ it 'books a package after a pre-booking request has been made (by credit) and return client reference', :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/book_done", :record => :new_episodes } do
175
+ pre_book_id = "2b076a9d-9051-4ab5-57f7-59aaf9d8ce2d"
176
+ results = @client.book_by_credit sample_guest, pre_book_id, {affiliate_key: ""}
177
+ data = JSON.parse(results.body)
178
+ expect(data).to_not be(nil)
179
+ expect(data["reference"]).not_to eq(nil)
180
+ end
181
+
182
+ end
183
+
184
+ describe "booking_status" do
185
+
186
+ it 'returns a successful response if the reference id is valid', :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/get_book_done", :record => :new_episodes } do
187
+ reference = "cc7aa5e9-4cf4-436d-619d-29b7fd992c27"
188
+ results = @client.booking_status reference
189
+ data = JSON.parse(results.body)
190
+ expect(data).to_not be(nil)
191
+ expect(data["client_reference"]).not_to eq(nil)
192
+ end
193
+
194
+ it 'raises an error if reference id provided is invalid', :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/get_book_fail", :record => :new_episodes } do
195
+ reference = "invalid"
196
+ expect{
197
+ results = @client.booking_status reference
198
+ }.to raise_error(ZumataV3::NotFoundError)
199
+ end
200
+
201
+ end
202
+
203
+ describe "cancel" do
204
+
205
+ it "returns a successful response if the reference id is valid", :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/cancel_done", :record => :new_episodes } do
206
+ reference = "cc7aa5e9-4cf4-436d-619d-29b7fd992c27"
207
+ results = @client.cancel reference
208
+ data = JSON.parse(results.body)
209
+ expect(data).to_not be(nil)
210
+ end
211
+
212
+ it "raise an error if reference id provided is already cancelled", :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/cancel_cancelled", :record => :new_episodes } do
213
+ reference = "cc7aa5e9-4cf4-436d-619d-29b7fd992c27"
214
+ expect{
215
+ results = @client.cancel reference
216
+ }.to raise_error(ZumataV3::UnprocessableEntityError)
217
+ end
218
+
219
+ it "raise an error if reference id provided is invalid", :vcr => { :cassette_name => "#{$vcr_recorded_check_in_date}/cancel_fail", :record => :new_episodes } do
220
+ reference = "invalid"
221
+ expect{
222
+ results = @client.cancel reference
223
+ }.to raise_error(ZumataV3::NotFoundError)
224
+ end
225
+
226
+ end
227
+
228
+ end
data/zumata_v3.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'zumata_v3/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "zumata_v3"
8
+ spec.version = ZumataV3::VERSION
9
+ spec.authors = ["Jonathan Gomez", "Martin Koh"]
10
+ spec.email = ["enquiry@zumata.com"]
11
+ spec.summary = %q{Client for the Zumata API 3.0}
12
+ spec.description = %q{Power a hotel website - search hotels, create and manage bookings.}
13
+ spec.homepage = "https://github.com/Zumata/v3-ruby-client"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "rspec", "3.1.0"
24
+ spec.add_development_dependency "awesome_print", "1.2.0"
25
+ spec.add_development_dependency "vcr", "2.9.3"
26
+ spec.add_development_dependency "webmock", "1.18.0"
27
+
28
+ spec.add_runtime_dependency 'httparty', '~> 0.13', '>= 0.13.1'
29
+
30
+ end
metadata ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zumata_v3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jonathan Gomez
8
+ - Martin Koh
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-07-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '1.6'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '1.6'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: '10.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '='
47
+ - !ruby/object:Gem::Version
48
+ version: 3.1.0
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '='
54
+ - !ruby/object:Gem::Version
55
+ version: 3.1.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: awesome_print
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '='
61
+ - !ruby/object:Gem::Version
62
+ version: 1.2.0
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '='
68
+ - !ruby/object:Gem::Version
69
+ version: 1.2.0
70
+ - !ruby/object:Gem::Dependency
71
+ name: vcr
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '='
75
+ - !ruby/object:Gem::Version
76
+ version: 2.9.3
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '='
82
+ - !ruby/object:Gem::Version
83
+ version: 2.9.3
84
+ - !ruby/object:Gem::Dependency
85
+ name: webmock
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '='
89
+ - !ruby/object:Gem::Version
90
+ version: 1.18.0
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '='
96
+ - !ruby/object:Gem::Version
97
+ version: 1.18.0
98
+ - !ruby/object:Gem::Dependency
99
+ name: httparty
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: '0.13'
105
+ - - '>='
106
+ - !ruby/object:Gem::Version
107
+ version: 0.13.1
108
+ type: :runtime
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ~>
113
+ - !ruby/object:Gem::Version
114
+ version: '0.13'
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: 0.13.1
118
+ description: Power a hotel website - search hotels, create and manage bookings.
119
+ email:
120
+ - enquiry@zumata.com
121
+ executables: []
122
+ extensions: []
123
+ extra_rdoc_files: []
124
+ files:
125
+ - .gitignore
126
+ - Gemfile
127
+ - LICENSE.txt
128
+ - README.md
129
+ - Rakefile
130
+ - examples/example.rb
131
+ - lib/zumata_v3.rb
132
+ - lib/zumata_v3/client.rb
133
+ - lib/zumata_v3/config.rb
134
+ - lib/zumata_v3/errors.rb
135
+ - lib/zumata_v3/responses.rb
136
+ - lib/zumata_v3/version.rb
137
+ - spec/cassettes/2015-07-24/book_done.yml
138
+ - spec/cassettes/2015-07-24/cancel_cancelled.yml
139
+ - spec/cassettes/2015-07-24/cancel_done.yml
140
+ - spec/cassettes/2015-07-24/cancel_fail.yml
141
+ - spec/cassettes/2015-07-24/get_book_done.yml
142
+ - spec/cassettes/2015-07-24/get_book_fail.yml
143
+ - spec/cassettes/2015-07-24/get_prebook_done.yml
144
+ - spec/cassettes/2015-07-24/get_prebook_fail.yml
145
+ - spec/cassettes/2015-07-24/prebook_done.yml
146
+ - spec/cassettes/2015-07-24/prebook_fail.yml
147
+ - spec/cassettes/2015-07-24/search_by_destination_id_done.yml
148
+ - spec/cassettes/2015-07-24/search_by_destination_id_fail.yml
149
+ - spec/spec_helper.rb
150
+ - spec/zumata_spec.rb
151
+ - zumata_v3.gemspec
152
+ homepage: https://github.com/Zumata/v3-ruby-client
153
+ licenses:
154
+ - MIT
155
+ metadata: {}
156
+ post_install_message:
157
+ rdoc_options: []
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 2.0.14
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: Client for the Zumata API 3.0
176
+ test_files:
177
+ - spec/cassettes/2015-07-24/book_done.yml
178
+ - spec/cassettes/2015-07-24/cancel_cancelled.yml
179
+ - spec/cassettes/2015-07-24/cancel_done.yml
180
+ - spec/cassettes/2015-07-24/cancel_fail.yml
181
+ - spec/cassettes/2015-07-24/get_book_done.yml
182
+ - spec/cassettes/2015-07-24/get_book_fail.yml
183
+ - spec/cassettes/2015-07-24/get_prebook_done.yml
184
+ - spec/cassettes/2015-07-24/get_prebook_fail.yml
185
+ - spec/cassettes/2015-07-24/prebook_done.yml
186
+ - spec/cassettes/2015-07-24/prebook_fail.yml
187
+ - spec/cassettes/2015-07-24/search_by_destination_id_done.yml
188
+ - spec/cassettes/2015-07-24/search_by_destination_id_fail.yml
189
+ - spec/spec_helper.rb
190
+ - spec/zumata_spec.rb