quicktravel_client 1.0.2

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.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +25 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +13 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +18 -0
  7. data/Gemfile +5 -0
  8. data/LICENSE +22 -0
  9. data/README.md +17 -0
  10. data/Rakefile +18 -0
  11. data/bootstrap/boot.rb +4 -0
  12. data/examples/example_config.rb +4 -0
  13. data/examples/login_example.rb +25 -0
  14. data/lib/extensions.rb +12 -0
  15. data/lib/quick_travel/accommodation.rb +72 -0
  16. data/lib/quick_travel/adapter.rb +283 -0
  17. data/lib/quick_travel/adapter_exception.rb +20 -0
  18. data/lib/quick_travel/address.rb +27 -0
  19. data/lib/quick_travel/adjustment.rb +8 -0
  20. data/lib/quick_travel/background_check.rb +9 -0
  21. data/lib/quick_travel/bed_configuration.rb +7 -0
  22. data/lib/quick_travel/bed_requirement.rb +7 -0
  23. data/lib/quick_travel/booking.rb +370 -0
  24. data/lib/quick_travel/cache.rb +38 -0
  25. data/lib/quick_travel/client.rb +8 -0
  26. data/lib/quick_travel/client_type.rb +6 -0
  27. data/lib/quick_travel/config.rb +26 -0
  28. data/lib/quick_travel/connection_error.rb +9 -0
  29. data/lib/quick_travel/constants.rb +16 -0
  30. data/lib/quick_travel/contact.rb +5 -0
  31. data/lib/quick_travel/country.rb +11 -0
  32. data/lib/quick_travel/credit_card.rb +12 -0
  33. data/lib/quick_travel/discounts/booking_discount.rb +18 -0
  34. data/lib/quick_travel/discounts/discount.rb +21 -0
  35. data/lib/quick_travel/discounts/discount_tree.rb +35 -0
  36. data/lib/quick_travel/discounts.rb +3 -0
  37. data/lib/quick_travel/document.rb +20 -0
  38. data/lib/quick_travel/document_group.rb +14 -0
  39. data/lib/quick_travel/encrypt.rb +13 -0
  40. data/lib/quick_travel/graphic.rb +18 -0
  41. data/lib/quick_travel/init_from_hash.rb +16 -0
  42. data/lib/quick_travel/location.rb +14 -0
  43. data/lib/quick_travel/mock.rb +41 -0
  44. data/lib/quick_travel/party.rb +49 -0
  45. data/lib/quick_travel/passenger.rb +7 -0
  46. data/lib/quick_travel/passenger_price_break.rb +8 -0
  47. data/lib/quick_travel/passenger_type.rb +21 -0
  48. data/lib/quick_travel/payment.rb +41 -0
  49. data/lib/quick_travel/payment_type.rb +37 -0
  50. data/lib/quick_travel/price.rb +14 -0
  51. data/lib/quick_travel/product.rb +165 -0
  52. data/lib/quick_travel/product_configuration.rb +134 -0
  53. data/lib/quick_travel/product_passenger_search_criteria.rb +28 -0
  54. data/lib/quick_travel/product_type.rb +28 -0
  55. data/lib/quick_travel/property.rb +99 -0
  56. data/lib/quick_travel/property_facility.rb +7 -0
  57. data/lib/quick_travel/property_type.rb +20 -0
  58. data/lib/quick_travel/region.rb +21 -0
  59. data/lib/quick_travel/reservation.rb +110 -0
  60. data/lib/quick_travel/resource.rb +50 -0
  61. data/lib/quick_travel/room_facility.rb +7 -0
  62. data/lib/quick_travel/route.rb +81 -0
  63. data/lib/quick_travel/route_stop.rb +7 -0
  64. data/lib/quick_travel/search.rb +14 -0
  65. data/lib/quick_travel/service.rb +5 -0
  66. data/lib/quick_travel/trip.rb +8 -0
  67. data/lib/quick_travel/vehicle.rb +17 -0
  68. data/lib/quick_travel/vehicle_type.rb +11 -0
  69. data/lib/quick_travel/version.rb +3 -0
  70. data/lib/quick_travel.rb +59 -0
  71. data/lib/quicktravel_client.rb +1 -0
  72. data/quicktravel_client.gemspec +37 -0
  73. data/spec/booking_spec.rb +107 -0
  74. data/spec/country_spec.rb +18 -0
  75. data/spec/credit_card_spec.rb +11 -0
  76. data/spec/discounts_spec.rb +121 -0
  77. data/spec/passenger_type_spec.rb +32 -0
  78. data/spec/payment_type_spec.rb +18 -0
  79. data/spec/product_spec.rb +82 -0
  80. data/spec/region_spec.rb +29 -0
  81. data/spec/reservation_spec.rb +50 -0
  82. data/spec/resource_spec.rb +22 -0
  83. data/spec/spec_helper.rb +77 -0
  84. data/spec/support/cassettes/booking_create.yml +50 -0
  85. data/spec/support/cassettes/booking_create_legacy.yml +50 -0
  86. data/spec/support/cassettes/booking_discounts.yml +53 -0
  87. data/spec/support/cassettes/booking_documents.yml +48 -0
  88. data/spec/support/cassettes/booking_show.yml +49 -0
  89. data/spec/support/cassettes/booking_update.yml +94 -0
  90. data/spec/support/cassettes/booking_with_discounts.yml +72 -0
  91. data/spec/support/cassettes/booking_with_documents.yml +117 -0
  92. data/spec/support/cassettes/booking_with_nested_attributes.yml +187 -0
  93. data/spec/support/cassettes/country_all.yml +127 -0
  94. data/spec/support/cassettes/create_reservation_fail.yml +47 -0
  95. data/spec/support/cassettes/create_reservation_with_booking.yml +53 -0
  96. data/spec/support/cassettes/passenger_all.yml +48 -0
  97. data/spec/support/cassettes/product_date_range_bookability.yml +118 -0
  98. data/spec/support/cassettes/product_show.yml +52 -0
  99. data/spec/support/cassettes/region_index.yml +48 -0
  100. data/spec/support/cassettes/region_show.yml +48 -0
  101. data/spec/support/cassettes/reservation_with_extra_picks.yml +165 -0
  102. data/spec/support/cassettes/resource_fare_bases.yml +97 -0
  103. data/spec/support/cassettes/resource_show.yml +50 -0
  104. metadata +421 -0
@@ -0,0 +1,121 @@
1
+ require 'spec_helper'
2
+ require 'quick_travel/reservation'
3
+ require 'quick_travel/booking'
4
+
5
+ describe 'Booking discounts' do
6
+ let(:booking) do
7
+ VCR.use_cassette('booking_with_discounts') do
8
+ QuickTravel::Booking.find_by_reference('222223')
9
+ end
10
+ end
11
+
12
+ before :each do
13
+ QuickTravel.config.version = 4
14
+ end
15
+
16
+ context 'when the booking has a discount' do
17
+ let(:reservation) { booking.reservations.first }
18
+ let(:extra_pick_without_discount) { reservation.sub_reservations.first }
19
+ let(:extra_pick_with_discount) { reservation.sub_reservations.second }
20
+
21
+ let(:discount) do
22
+ VCR.use_cassette('booking_discounts') do
23
+ booking.discount
24
+ end
25
+ end
26
+
27
+ specify { expect(discount.target.type).to eq 'Booking' }
28
+ specify { expect(discount.target.id).to eq booking.id }
29
+ specify { expect(discount.original_price).to eq 640.00 }
30
+ specify { expect(discount.discounted_price).to eq 380.00 }
31
+ specify { expect(discount.discount).to eq(-260.00) }
32
+ specify do
33
+ expect(discount.reservation_discounts.count).to(
34
+ eq booking.reservations.count)
35
+ end
36
+
37
+ context 'the discount applied on the top level reservation' do
38
+ let(:discount) do
39
+ VCR.use_cassette('booking_discounts') do
40
+ booking.discount_on(reservation)
41
+ end
42
+ end
43
+
44
+ specify { expect(discount.target.type).to eq 'Reservation' }
45
+ specify { expect(discount.target.id).to eq reservation.id }
46
+ specify { expect(discount.original_price).to eq 400.00 }
47
+ specify { expect(discount.discounted_price).to eq 200.00 }
48
+ specify { expect(discount.discount).to eq(-200) }
49
+ end
50
+
51
+ context 'the total discount applied on the top level reservation' do
52
+ subject(:discount) do
53
+ VCR.use_cassette('booking_discounts') do
54
+ booking.total_discount_on(reservation)
55
+ end
56
+ end
57
+
58
+ specify { expect(discount.target.type).to eq 'Reservation' }
59
+ specify { expect(discount.target.id).to eq reservation.id }
60
+ specify { expect(discount.original_price).to eq 640.00 }
61
+ specify { expect(discount.discounted_price).to eq 380.00 }
62
+ specify { expect(discount.discount).to eq(-260.00) }
63
+ end
64
+
65
+ context 'the discount applied on the first extra pick' do
66
+ let(:discount) do
67
+ VCR.use_cassette('booking_discounts') do
68
+ booking.discount_on(extra_pick_without_discount)
69
+ end
70
+ end
71
+
72
+ specify { expect(discount.target.type).to eq 'Reservation' }
73
+ specify { expect(discount.target.id).to eq extra_pick_without_discount.id }
74
+ specify { expect(discount.original_price).to eq 120 }
75
+ specify { expect(discount.discounted_price).to eq 120 }
76
+ specify { expect(discount.discount).to eq 0 }
77
+ end
78
+
79
+ context 'the total discount applied on the first extra pick' do
80
+ let(:discount) do
81
+ VCR.use_cassette('booking_discounts') do
82
+ booking.total_discount_on(extra_pick_without_discount)
83
+ end
84
+ end
85
+
86
+ specify { expect(discount.target.type).to eq 'Reservation' }
87
+ specify { expect(discount.target.id).to eq extra_pick_without_discount.id }
88
+ specify { expect(discount.original_price).to eq 120 }
89
+ specify { expect(discount.discounted_price).to eq 120 }
90
+ specify { expect(discount.discount).to eq 0 }
91
+ end
92
+
93
+ context 'the discount applied on second extra pick' do
94
+ let(:discount) do
95
+ VCR.use_cassette('booking_discounts') do
96
+ booking.discount_on(extra_pick_with_discount)
97
+ end
98
+ end
99
+
100
+ specify { expect(discount.target.type).to eq 'Reservation' }
101
+ specify { expect(discount.target.id).to eq extra_pick_with_discount.id }
102
+ specify { expect(discount.original_price).to eq 120.00 }
103
+ specify { expect(discount.discounted_price).to eq 60.00 }
104
+ specify { expect(discount.discount).to eq(-60.00) }
105
+ end
106
+
107
+ context 'the total discount applied on second extra pick' do
108
+ let(:discount) do
109
+ VCR.use_cassette('booking_discounts') do
110
+ booking.total_discount_on(extra_pick_with_discount)
111
+ end
112
+ end
113
+
114
+ specify { expect(discount.target.type).to eq 'Reservation' }
115
+ specify { expect(discount.target.id).to eq extra_pick_with_discount.id }
116
+ specify { expect(discount.original_price).to eq 120.00 }
117
+ specify { expect(discount.discounted_price).to eq 60.00 }
118
+ specify { expect(discount.discount).to eq(-60.00) }
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+ require 'quick_travel/passenger_type'
3
+
4
+ describe QuickTravel::PassengerType do
5
+ context '#all' do
6
+ subject(:all) do
7
+ VCR.use_cassette('passenger_all') { QuickTravel::PassengerType.all }
8
+ end
9
+
10
+ its(:class) { should == Array }
11
+ its(:length) { should == 3 }
12
+
13
+ context 'first element' do
14
+ subject { all.first }
15
+ its(:class) { should == QuickTravel::PassengerType }
16
+ its(:name) { should == 'Adult' }
17
+ end
18
+ end
19
+
20
+ context '#passenger_count_to_s' do
21
+ subject(:count) { QuickTravel::PassengerType.passenger_counts(hash) }
22
+ context 'when passengers types have zero counts' do
23
+ let(:hash) { { 1 => 2, 2 => 1, 3 => 0 } }
24
+ it { should eq ['2 Adults', '1 Child'] }
25
+ end
26
+
27
+ context 'when passenger types are not specified' do
28
+ let(:hash) { { 1 => 2 } }
29
+ it { should eq ['2 Adults'] }
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,18 @@
1
+ require 'quick_travel/payment_type'
2
+ require 'rspec/its'
3
+
4
+ describe QuickTravel::PaymentType do
5
+ subject(:payment_type) {
6
+ QuickTravel::PaymentType.new(payment_method: 'credit_card',
7
+ credit_card_brand: brand) }
8
+
9
+ context 'MasterCard' do
10
+ let(:brand) { 'MasterCard' }
11
+ its(:code) { should eq 'master_card' }
12
+ end
13
+
14
+ context 'American Express' do
15
+ let(:brand) { 'American Express' }
16
+ its(:code) { should eq 'american_express' }
17
+ end
18
+ end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+ require 'quick_travel/product'
3
+
4
+ describe QuickTravel::Product do
5
+ before do
6
+ VCR.use_cassette('product_show') do
7
+ today = '2016-03-01'.to_date
8
+ @product = QuickTravel::Product.find(6, # Executive Room
9
+ first_travel_date: today,
10
+ passenger_type_numbers: { '1' => 1 },
11
+ date_range: { start_date: today, end_date: today + 1 }
12
+ )
13
+ end
14
+ end
15
+
16
+ it 'should create a useful product object' do
17
+ expect(@product.pricing_details.minimum_price).to eq 400.to_money
18
+ # @product.pricing_details_for_rack_rate.should_not be_present # TODO: Record new VCRs with new QT code
19
+ end
20
+
21
+ # TODO: Record new VCRs with new QT code
22
+ # it 'should return a rack minimum price when requested due to agent being logged in' do
23
+ # VCR.use_cassette('product_show_as_agent') do
24
+ # today = '2013-02-14'.to_date
25
+ # @product = QuickTravel::Product.find(195,
26
+ # first_travel_date: today,
27
+ # passenger_type_numbers: {'1' => 1},
28
+ # rack_price_requested: true,
29
+ # date_range: {start_date: today, end_date: today + 1}
30
+ # )
31
+ # end
32
+ #
33
+ # @product.pricing_details_for_rack_rate.should be_present
34
+ # end
35
+ end
36
+
37
+ describe QuickTravel::Product do
38
+ before do
39
+ VCR.use_cassette('product_date_range_bookability') do
40
+ @today = '2016-03-01'.to_date
41
+ @products = QuickTravel::Product.fetch_and_arrange_by_resource_id_and_date(
42
+ [3, 4, 6],
43
+ travel_date: @today,
44
+ duration: 7,
45
+ default_pax_type_numbers: { '1' => 1 },
46
+ passenger_type_numbers: { '1' => 2, '2' => 1 }
47
+ )
48
+ end
49
+ end
50
+
51
+ context 'accommodation product today' do
52
+ subject(:product) { @products[6][@today.to_s] }
53
+ it { should be_an_instance_of QuickTravel::Product }
54
+
55
+ context 'pricing details' do
56
+ subject(:pricing_details) { product.pricing_details }
57
+ it { should be_an_instance_of QuickTravel::PricingDetails }
58
+
59
+ context 'price per pax type' do
60
+ let(:price_if_no_breakdown) { pricing_details.price_per_pax_type[0] }
61
+ it 'should breakdown prices even if just a total' do
62
+ expect(price_if_no_breakdown).to eq 300.to_money
63
+ end
64
+ end
65
+
66
+ context 'minimum price' do
67
+ subject(:minimum_price) { pricing_details.minimum_price }
68
+ it { should eq 300.to_money } # $200 for 2 pax, $100 for extra passenger
69
+ end
70
+
71
+ context 'adjustments' do
72
+ subject(:adjustments) { pricing_details.adjustments_to_apply }
73
+ it { should be_an_instance_of Array }
74
+
75
+ context 'first adjustment' do
76
+ subject(:adjustment) { adjustments.first }
77
+ it { should be_an_instance_of Hash }
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'quick_travel/region'
3
+
4
+ describe QuickTravel::Region do
5
+ describe '#first' do
6
+ subject { QuickTravel::Region.first }
7
+
8
+ it 'should find a first instance of region from QuickTravel' do
9
+ VCR.use_cassette('region_show') do
10
+ expect(subject).to be_an_instance_of QuickTravel::Region
11
+ expect(subject.id).to be_an_instance_of Fixnum
12
+ expect(subject.name).to be_an_instance_of String
13
+ expect(subject.location_ids).to be_an_instance_of Array
14
+ expect(subject.location_ids[0]).to be_an_instance_of Fixnum
15
+ end
16
+ end
17
+ end
18
+
19
+ describe '#all' do
20
+ subject { QuickTravel::Region.all }
21
+
22
+ it 'Region.all method should return Array of Regions' do
23
+ VCR.use_cassette('region_index') do
24
+ expect(subject).to be_an_instance_of Array
25
+ expect(subject[0]).to be_an_instance_of QuickTravel::Region
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+ require 'quick_travel/reservation'
3
+ require 'quick_travel/booking'
4
+
5
+ describe QuickTravel::Reservation do
6
+ it 'should create a reservation with a booking' do
7
+ VCR.use_cassette('create_reservation_with_booking') do
8
+ reservation = QuickTravel::Reservation.create(
9
+ resource_id: '4',
10
+ first_travel_date: '2016-03-01',
11
+ passenger_types_numbers: { '1' => '2', '2' => '1' }
12
+ )
13
+ expect(reservation.booking_id).to eq 9
14
+ end
15
+ end
16
+
17
+ it 'should fail to create when no availability' do
18
+ VCR.use_cassette 'create_reservation_fail' do
19
+ begin
20
+ QuickTravel::Reservation.create(
21
+ resource_id: '4',
22
+ first_travel_date: '2099-09-10'
23
+ )
24
+ rescue QuickTravel::AdapterException => e
25
+ expect(e.message).to match(/^No services selected for/)
26
+ end
27
+ end
28
+ end
29
+
30
+ it 'should fetch the sub reservations' do
31
+ resource_names = nil
32
+ VCR.use_cassette('reservation_with_extra_picks') do
33
+ @booking = QuickTravel::Booking.find(1)
34
+ @reservation = @booking.reservations.first
35
+ sub_reservations = @reservation.sub_reservations
36
+ resource_names = sub_reservations.map(&:resource).map(&:name)
37
+ end
38
+ expect(resource_names).to eq ['Travel Insurance - Declined', 'QBE Travel Insurance - Policy E']
39
+ end
40
+ end
41
+
42
+ describe QuickTravel::Reservation do
43
+ before(:each) do
44
+ @reservation = QuickTravel::Reservation.new(gross_including_packaged_item_in_cents: 265)
45
+ end
46
+
47
+ it 'should show me the money' do
48
+ expect(@reservation.gross_including_packaged_item).to be_an_instance_of Money
49
+ end
50
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ require 'quick_travel/resource'
3
+
4
+ describe QuickTravel::Resource do
5
+ before do
6
+ VCR.use_cassette('resource_show') do
7
+ @resource = QuickTravel::Resource.find(6)
8
+ end
9
+ end
10
+
11
+ it 'should fetch a resource' do
12
+ expect(@resource.name).to eq 'Executive Room'
13
+ end
14
+
15
+ it 'should find fare bases of a resource' do
16
+ VCR.use_cassette('resource_fare_bases') do
17
+ picks = @resource.sub_resources
18
+ expect(picks.size).to eq 2
19
+ expect(picks.map(&:name)).to eq ['QBE Travel Insurance - Policy E', 'Travel Insurance - Declined']
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,77 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper.rb"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+
8
+ require 'rubygems'
9
+ require 'bundler/setup'
10
+
11
+ require 'rspec/its'
12
+ require 'date' # Needed for stamp
13
+ require 'stamp' # Some reasons stamp doesn't load automatically?
14
+ require 'vcr'
15
+
16
+ qt_key = ENV['QT_KEY'] || 'test_key'
17
+ VCR.configure do |c|
18
+ c.cassette_library_dir = 'spec/support/cassettes'
19
+ c.default_cassette_options = { match_requests_on: [:method, :uri, :body] }
20
+ c.filter_sensitive_data('<QT_KEY>') { qt_key }
21
+ c.hook_into :fakeweb
22
+ end
23
+
24
+ MINIMUM_COVERAGE = 74
25
+
26
+ if ENV['COVERAGE']
27
+ require 'simplecov'
28
+ require 'simplecov-rcov'
29
+ SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
30
+ SimpleCov.start do
31
+ add_filter '/vendor/'
32
+ add_filter '/spec/'
33
+ add_group 'lib', 'lib'
34
+ end
35
+ SimpleCov.at_exit do
36
+ SimpleCov.result.format!
37
+ percent = SimpleCov.result.covered_percent
38
+ unless percent >= MINIMUM_COVERAGE
39
+ puts "Coverage must be above #{MINIMUM_COVERAGE}%. It is #{'%.2f' % percent}%"
40
+ Kernel.exit(1)
41
+ end
42
+ end
43
+ end
44
+
45
+ require 'quick_travel/config'
46
+ QuickTravel.configure do |c|
47
+ c.url = 'http://0.0.0.0:8080'
48
+ c.access_key = qt_key
49
+ end
50
+
51
+ require 'quick_travel/connection_error'
52
+ require 'quick_travel/constants'
53
+ require 'quick_travel/cache'
54
+
55
+ class HashCache
56
+ def initialize
57
+ @cache = {}
58
+ end
59
+
60
+ def read(name)
61
+ @cache[name]
62
+ end
63
+
64
+ def write(name, value)
65
+ @cache[name] = value
66
+ end
67
+ end
68
+
69
+ QuickTravel::Cache.cache_store = HashCache.new
70
+
71
+ RSpec.configure do |config|
72
+ config.run_all_when_everything_filtered = true
73
+ config.filter_run :focus
74
+ config.before :each do
75
+ allow(QuickTravel::Adapter).to receive(:cache) { ActiveSupport::Cache::MemoryStore.new }
76
+ end
77
+ end
@@ -0,0 +1,50 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://0.0.0.0:8080/front_office/bookings.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: booking[referral_code_id]=33&access_key=<QT_KEY>
9
+ headers:
10
+ content-length:
11
+ - '0'
12
+ response:
13
+ status:
14
+ code: 200
15
+ message: ! 'OK '
16
+ headers:
17
+ p3p:
18
+ - CP="IDC DSP CAO COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
19
+ content-type:
20
+ - application/json; charset=utf-8
21
+ x-ua-compatible:
22
+ - IE=Edge,chrome=1
23
+ etag:
24
+ - ! '"f4a3881c4477a858ad2157aad8887436"'
25
+ cache-control:
26
+ - max-age=0, private, must-revalidate
27
+ x-request-id:
28
+ - bf709d73f2c947811bf2ec1153e361ac
29
+ x-runtime:
30
+ - '0.410944'
31
+ date:
32
+ - Thu, 28 Feb 2013 14:16:26 GMT
33
+ x-rack-cache:
34
+ - invalidate, pass
35
+ server:
36
+ - WEBrick/1.3.1 (Ruby/2.1.5/2014-11-13)
37
+ content-length:
38
+ - '1996'
39
+ connection:
40
+ - close
41
+ set-cookie:
42
+ - _session_id=c3f5b616d7b0a15b8634d496713152b2; path=/; HttpOnly
43
+ body:
44
+ encoding: US-ASCII
45
+ string: ! '{"id":3,"state":"new","reference":"222226","public_comments":null,"internal_comments":null,"customer_contact_name":null,"customer_contact_phone":null,"customer_contact_mobile":null,"customer_contact_email":null,"currency_iso_code":"AUD","country_id":14,"post_code":null,"referral_code_id":1,"total_adjustments_in_cents":0,"pre_adjusted_gross_in_cents":0,"nett_in_cents":0,"gross_in_cents":0,"commission_in_cents":0,"balance_in_cents":0,"paid_in_cents":0,"surcharge_in_cents":0,"deposit_in_cents":0,"web_site_name":"SeaLink","promo_code":null,"insurance_offered":false,"deposit_due_on":null,"balance_due_on":null,"first_travel_date":{"_type":"Date","_value":"2013-03-01"},"last_travel_date":null,"complete":true,"reason_not_complete":null,"discardable_in":60,"inactivatable_in":10,"notices":{"currency":["Currency
46
+ has changed to currency AUD. Please set currency as appropriate."]},"deposit_relevant":false,"passenger_ids":[],"vehicle_ids":[],"reservation_ids":[],"adjustment_ids":[],"todo_items":[],"confirmation_requests":[],"passengers_attributes":[],"vehicles_attributes":[],"reservations_attributes":[],"adjustments_attributes":[],"payments_attributes":[],"payment_types_attributes":[{"id":5,"name":"master","description":"master","payment_method":"credit_card","credit_card_brand":"MasterCard","transaction_fee":"0.0","active":true,"position":2,"surchargeable":false,"for_frequent_traveller_redemption":false,"comment_required":false,"external":true},{"id":4,"name":"visa","description":"visa","payment_method":"credit_card","credit_card_brand":"Visa","transaction_fee":"0.0","active":true,"position":3,"surchargeable":false,"for_frequent_traveller_redemption":false,"comment_required":false,"external":true},{"id":7,"name":"PayPal","description":"Payments
47
+ made via PayPal account","payment_method":"paypal","credit_card_brand":null,"transaction_fee":"0.0","active":true,"position":6,"surchargeable":false,"for_frequent_traveller_redemption":false,"comment_required":false,"external":true}]}'
48
+ http_version: '1.1'
49
+ recorded_at: Thu, 18 Dec 2014 07:33:16 GMT
50
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,50 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://0.0.0.0:8080/front_office/bookings.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: booking[referral_code_id]=33&access_key=<QT_KEY>
9
+ headers:
10
+ content-length:
11
+ - '0'
12
+ response:
13
+ status:
14
+ code: 200
15
+ message: ! 'OK '
16
+ headers:
17
+ p3p:
18
+ - CP="IDC DSP CAO COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
19
+ content-type:
20
+ - application/json; charset=utf-8
21
+ x-ua-compatible:
22
+ - IE=Edge,chrome=1
23
+ etag:
24
+ - ! '"e1689d2a9cb6912f09c474b86aea54e1"'
25
+ cache-control:
26
+ - max-age=0, private, must-revalidate
27
+ x-request-id:
28
+ - 720751484abc6fe362e1e0cbba2de330
29
+ x-runtime:
30
+ - '0.400131'
31
+ date:
32
+ - Thu, 28 Feb 2013 14:16:27 GMT
33
+ x-rack-cache:
34
+ - invalidate, pass
35
+ server:
36
+ - WEBrick/1.3.1 (Ruby/2.1.5/2014-11-13)
37
+ content-length:
38
+ - '1996'
39
+ connection:
40
+ - close
41
+ set-cookie:
42
+ - _session_id=ae50d83b4e93bef8543f3f64075f38c7; path=/; HttpOnly
43
+ body:
44
+ encoding: US-ASCII
45
+ string: ! '{"id":4,"state":"new","reference":"222227","public_comments":null,"internal_comments":null,"customer_contact_name":null,"customer_contact_phone":null,"customer_contact_mobile":null,"customer_contact_email":null,"currency_iso_code":"AUD","country_id":14,"post_code":null,"referral_code_id":1,"total_adjustments_in_cents":0,"pre_adjusted_gross_in_cents":0,"nett_in_cents":0,"gross_in_cents":0,"commission_in_cents":0,"balance_in_cents":0,"paid_in_cents":0,"surcharge_in_cents":0,"deposit_in_cents":0,"web_site_name":"SeaLink","promo_code":null,"insurance_offered":false,"deposit_due_on":null,"balance_due_on":null,"first_travel_date":{"_type":"Date","_value":"2013-03-01"},"last_travel_date":null,"complete":true,"reason_not_complete":null,"discardable_in":60,"inactivatable_in":10,"notices":{"currency":["Currency
46
+ has changed to currency AUD. Please set currency as appropriate."]},"deposit_relevant":false,"passenger_ids":[],"vehicle_ids":[],"reservation_ids":[],"adjustment_ids":[],"todo_items":[],"confirmation_requests":[],"passengers_attributes":[],"vehicles_attributes":[],"reservations_attributes":[],"adjustments_attributes":[],"payments_attributes":[],"payment_types_attributes":[{"id":5,"name":"master","description":"master","payment_method":"credit_card","credit_card_brand":"MasterCard","transaction_fee":"0.0","active":true,"position":2,"surchargeable":false,"for_frequent_traveller_redemption":false,"comment_required":false,"external":true},{"id":4,"name":"visa","description":"visa","payment_method":"credit_card","credit_card_brand":"Visa","transaction_fee":"0.0","active":true,"position":3,"surchargeable":false,"for_frequent_traveller_redemption":false,"comment_required":false,"external":true},{"id":7,"name":"PayPal","description":"Payments
47
+ made via PayPal account","payment_method":"paypal","credit_card_brand":null,"transaction_fee":"0.0","active":true,"position":6,"surchargeable":false,"for_frequent_traveller_redemption":false,"comment_required":false,"external":true}]}'
48
+ http_version: '1.1'
49
+ recorded_at: Thu, 18 Dec 2014 07:33:17 GMT
50
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,53 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://0.0.0.0:8080/api/bookings/1/discount.json?
6
+ body:
7
+ encoding: US-ASCII
8
+ string: access_key=<QT_KEY>
9
+ headers:
10
+ content-length:
11
+ - '0'
12
+ response:
13
+ status:
14
+ code: 200
15
+ message: ! 'OK '
16
+ headers:
17
+ p3p:
18
+ - CP="IDC DSP CAO COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
19
+ content-type:
20
+ - application/json; charset=utf-8
21
+ x-ua-compatible:
22
+ - IE=Edge,chrome=1
23
+ etag:
24
+ - ! '"2a403d410606562f02412577ffa6eb55"'
25
+ cache-control:
26
+ - max-age=0, private, must-revalidate
27
+ x-request-id:
28
+ - 7df9edb80489b280e505428e9f9c0903
29
+ x-runtime:
30
+ - '0.032943'
31
+ date:
32
+ - Thu, 28 Feb 2013 14:10:21 GMT
33
+ x-rack-cache:
34
+ - miss
35
+ server:
36
+ - WEBrick/1.3.1 (Ruby/2.1.5/2014-11-13)
37
+ content-length:
38
+ - '1201'
39
+ connection:
40
+ - close
41
+ set-cookie:
42
+ - _session_id=5d633d455a32553f1ff76d29f7616e48; path=/; HttpOnly
43
+ body:
44
+ encoding: US-ASCII
45
+ string: ! '{"target":{"type":"Booking","id":1},"original_price_in_cents":64000,"discounted_price_in_cents":38000,"discount_in_cents":-26000,"reason":"Test
46
+ Discount Hilton and QBE Get Me","reservation_discounts":[{"target":{"type":"Reservation","id":1},"original_price_in_cents":64000,"discounted_price_in_cents":38000,"discount_in_cents":-26000,"reason":"Test
47
+ Discount Hilton and QBE Get Me","root":{"target":{"type":"Reservation","id":1},"original_price_in_cents":40000,"discounted_price_in_cents":20000,"discount_in_cents":-20000,"reason":"Test
48
+ Discount Hilton"},"children":[{"target":{"type":"Reservation","id":3},"original_price_in_cents":12000,"discounted_price_in_cents":12000,"discount_in_cents":0,"reason":"","root":{"target":{"type":"Reservation","id":3},"original_price_in_cents":12000,"discounted_price_in_cents":12000,"discount_in_cents":0,"reason":""},"children":[]},{"target":{"type":"Reservation","id":2},"original_price_in_cents":12000,"discounted_price_in_cents":6000,"discount_in_cents":-6000,"reason":"QBE
49
+ Get Me","root":{"target":{"type":"Reservation","id":2},"original_price_in_cents":12000,"discounted_price_in_cents":6000,"discount_in_cents":-6000,"reason":"QBE
50
+ Get Me"},"children":[]}]}]}'
51
+ http_version: '1.1'
52
+ recorded_at: Thu, 18 Dec 2014 07:27:10 GMT
53
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,48 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://0.0.0.0:8080/api/bookings/3/documents.json?last_group=true&regenerate=false
6
+ body:
7
+ encoding: US-ASCII
8
+ string: access_key=<QT_KEY>
9
+ headers:
10
+ content-length:
11
+ - '0'
12
+ response:
13
+ status:
14
+ code: 200
15
+ message: ! 'OK '
16
+ headers:
17
+ p3p:
18
+ - CP="IDC DSP CAO COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
19
+ content-type:
20
+ - application/json; charset=utf-8
21
+ x-ua-compatible:
22
+ - IE=Edge,chrome=1
23
+ etag:
24
+ - ! '"d751713988987e9331980363e24189ce"'
25
+ cache-control:
26
+ - max-age=0, private, must-revalidate
27
+ x-request-id:
28
+ - dda534836aa87de16e4676661b86732d
29
+ x-runtime:
30
+ - '0.025246'
31
+ date:
32
+ - Thu, 28 Feb 2013 14:16:27 GMT
33
+ x-rack-cache:
34
+ - miss
35
+ server:
36
+ - WEBrick/1.3.1 (Ruby/2.1.5/2014-11-13)
37
+ content-length:
38
+ - '2'
39
+ connection:
40
+ - close
41
+ set-cookie:
42
+ - _session_id=b6531aad203363dea39988a351a9b961; path=/; HttpOnly
43
+ body:
44
+ encoding: US-ASCII
45
+ string: ! '[]'
46
+ http_version: '1.1'
47
+ recorded_at: Thu, 18 Dec 2014 07:33:16 GMT
48
+ recorded_with: VCR 2.9.3