From 5d19183197513e150f6f24a7be182e9c6ddb68d8 Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Mon, 2 Mar 2020 14:33:04 -0800 Subject: [PATCH 01/15] Wave 0 created files. --- lib/hotel_dispatch.rb | 4 ++++ lib/reverstation.rb | 0 lib/room.rb | 0 test/hotel_dispatch_test.rb | 6 ++++++ test/reverstation.rb | 6 ++++++ test/room_test.rb | 6 ++++++ test/test_helper.rb | 1 + 7 files changed, 23 insertions(+) create mode 100644 lib/hotel_dispatch.rb create mode 100644 lib/reverstation.rb create mode 100644 lib/room.rb create mode 100644 test/hotel_dispatch_test.rb create mode 100644 test/reverstation.rb create mode 100644 test/room_test.rb diff --git a/lib/hotel_dispatch.rb b/lib/hotel_dispatch.rb new file mode 100644 index 000000000..1edd5cb57 --- /dev/null +++ b/lib/hotel_dispatch.rb @@ -0,0 +1,4 @@ +require 'date' +require_relative 'reverstation' +require_relative 'room' + diff --git a/lib/reverstation.rb b/lib/reverstation.rb new file mode 100644 index 000000000..e69de29bb diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..e69de29bb diff --git a/test/hotel_dispatch_test.rb b/test/hotel_dispatch_test.rb new file mode 100644 index 000000000..b17a08b57 --- /dev/null +++ b/test/hotel_dispatch_test.rb @@ -0,0 +1,6 @@ +guard :minitest, bundler: false, autorun: true, rubygems: false do + # With Minitest Reporters + watch(%r{^test/(.*)_test\.rb$}) + watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" } + watch(%r{^test/test_helper\.rb$}) { 'test' } +end \ No newline at end of file diff --git a/test/reverstation.rb b/test/reverstation.rb new file mode 100644 index 000000000..b17a08b57 --- /dev/null +++ b/test/reverstation.rb @@ -0,0 +1,6 @@ +guard :minitest, bundler: false, autorun: true, rubygems: false do + # With Minitest Reporters + watch(%r{^test/(.*)_test\.rb$}) + watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" } + watch(%r{^test/test_helper\.rb$}) { 'test' } +end \ No newline at end of file diff --git a/test/room_test.rb b/test/room_test.rb new file mode 100644 index 000000000..b17a08b57 --- /dev/null +++ b/test/room_test.rb @@ -0,0 +1,6 @@ +guard :minitest, bundler: false, autorun: true, rubygems: false do + # With Minitest Reporters + watch(%r{^test/(.*)_test\.rb$}) + watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" } + watch(%r{^test/test_helper\.rb$}) { 'test' } +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index c3a7695cf..b13b1a3d1 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -6,3 +6,4 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # require_relative your lib files here! +# test/test_helper.rb From ddcbeb00f1ccc20f418e6f69a9ef3690d002594b Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Mon, 2 Mar 2020 17:40:07 -0800 Subject: [PATCH 02/15] Wave 1 - hotel has 20 rooms --- lib/hotel_dispatch.rb | 22 +++++++++++++++++++++- lib/reservation.rb | 12 ++++++++++++ lib/reverstation.rb | 0 lib/room.rb | 22 ++++++++++++++++++++++ test/hotel_dispatch_test.rb | 20 ++++++++++++++------ test/reservation_test.rb | 14 ++++++++++++++ test/reverstation.rb | 6 ------ test/room_test.rb | 15 ++++++++++----- test/test_helper.rb | 1 + 9 files changed, 94 insertions(+), 18 deletions(-) create mode 100644 lib/reservation.rb delete mode 100644 lib/reverstation.rb create mode 100644 test/reservation_test.rb delete mode 100644 test/reverstation.rb diff --git a/lib/hotel_dispatch.rb b/lib/hotel_dispatch.rb index 1edd5cb57..3f9a2bf16 100644 --- a/lib/hotel_dispatch.rb +++ b/lib/hotel_dispatch.rb @@ -1,4 +1,24 @@ require 'date' -require_relative 'reverstation' +require_relative 'reservation' require_relative 'room' + + class HotelDispatcher + + def initialize + + end + def make_rooms + #make rooms 1-20 using a loop + + end + def check_room_available?(start_date,end_date) + #will take in a start date and end date + #check all rooms booked dates (if date in array unavilable) + #for each room.all loop + #return aval room or no room aval + end + + + end + diff --git a/lib/reservation.rb b/lib/reservation.rb new file mode 100644 index 000000000..c6136d166 --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,12 @@ +class Reservation + attr_accessor :room_num,:start_date,:end_date + def initialize(room_num,start_date,end_date) + @room_num = room_num + @start_date = start_date + @end_date = end_date + end + def total + # number of nights * $200/night - 1 night + end + +end \ No newline at end of file diff --git a/lib/reverstation.rb b/lib/reverstation.rb deleted file mode 100644 index e69de29bb..000000000 diff --git a/lib/room.rb b/lib/room.rb index e69de29bb..35e5a52ee 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'reservation' + +class Room + attr_accessor :reservations, :room_num + def initialize(room_num) + @room_num = room_num + end + + def add_reservation + Reservation.new(@room_num, start_date, end_date) + end + + def find_all_resevations + reservation_array = Reservation.all + + reservation_array.each do |reservation| + return reservation if reservation.room_num == @room_num + end + end +end diff --git a/test/hotel_dispatch_test.rb b/test/hotel_dispatch_test.rb index b17a08b57..08be128f2 100644 --- a/test/hotel_dispatch_test.rb +++ b/test/hotel_dispatch_test.rb @@ -1,6 +1,14 @@ -guard :minitest, bundler: false, autorun: true, rubygems: false do - # With Minitest Reporters - watch(%r{^test/(.*)_test\.rb$}) - watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" } - watch(%r{^test/test_helper\.rb$}) { 'test' } -end \ No newline at end of file +require 'hotel_dispatch' +require_relative 'test_helper' + +describe 'HotelDispatcher class' do + def build_test_dispatcher + return HotelDispatcher.new + end + describe 'Initializer' do + it 'is an instance of HotelDispatcher' do + dispatcher = build_test_dispatcher + expect(dispatcher).must_be_kind_of HotelDispatcher + end + end +end diff --git a/test/reservation_test.rb b/test/reservation_test.rb new file mode 100644 index 000000000..c1ff64704 --- /dev/null +++ b/test/reservation_test.rb @@ -0,0 +1,14 @@ +require 'room' +require 'date' +require_relative 'test_helper' + +describe 'Reservation class' do + describe 'Initializer' do + it 'is an instance of Reservation' do + start_date = Date.new(2001,2,3) + end_date = Date.new(2001,2,5) + res = Reservation.new(1,start_date,end_date) + expect(res).must_be_kind_of Reservation + end + end +end \ No newline at end of file diff --git a/test/reverstation.rb b/test/reverstation.rb deleted file mode 100644 index b17a08b57..000000000 --- a/test/reverstation.rb +++ /dev/null @@ -1,6 +0,0 @@ -guard :minitest, bundler: false, autorun: true, rubygems: false do - # With Minitest Reporters - watch(%r{^test/(.*)_test\.rb$}) - watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" } - watch(%r{^test/test_helper\.rb$}) { 'test' } -end \ No newline at end of file diff --git a/test/room_test.rb b/test/room_test.rb index b17a08b57..dca68b091 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -1,6 +1,11 @@ -guard :minitest, bundler: false, autorun: true, rubygems: false do - # With Minitest Reporters - watch(%r{^test/(.*)_test\.rb$}) - watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" } - watch(%r{^test/test_helper\.rb$}) { 'test' } +require 'room' +require_relative 'test_helper' + +describe 'Room class' do + describe 'Initializer' do + it 'is an instance of Room' do + test_room = Room.new(1) + expect(test_room).must_be_kind_of Room + end + end end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index b13b1a3d1..ce583ff3d 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -2,6 +2,7 @@ require "minitest" require "minitest/autorun" require "minitest/reporters" +require 'minitest/skip_dsl' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From b0559a178f98f4b3a6aaf688bbedec4b51b0f011 Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Mon, 2 Mar 2020 19:47:15 -0800 Subject: [PATCH 03/15] Wave 1.2 3 minitest in wave 1 --- lib/hotel_dispatch.rb | 24 ----------------- lib/hotel_dispatcher.rb | 27 +++++++++++++++++++ lib/room.rb | 4 ++- ...patch_test.rb => hotel_dispatcher_test.rb} | 10 ++++++- 4 files changed, 39 insertions(+), 26 deletions(-) delete mode 100644 lib/hotel_dispatch.rb create mode 100644 lib/hotel_dispatcher.rb rename test/{hotel_dispatch_test.rb => hotel_dispatcher_test.rb} (54%) diff --git a/lib/hotel_dispatch.rb b/lib/hotel_dispatch.rb deleted file mode 100644 index 3f9a2bf16..000000000 --- a/lib/hotel_dispatch.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'date' -require_relative 'reservation' -require_relative 'room' - - - class HotelDispatcher - - def initialize - - end - def make_rooms - #make rooms 1-20 using a loop - - end - def check_room_available?(start_date,end_date) - #will take in a start date and end date - #check all rooms booked dates (if date in array unavilable) - #for each room.all loop - #return aval room or no room aval - end - - - end - diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb new file mode 100644 index 000000000..9f5b50fa8 --- /dev/null +++ b/lib/hotel_dispatcher.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'date' +require_relative 'reservation' +require_relative 'room' + +class HotelDispatcher + def initialize; end + + def make_rooms + room_array = [] + (1..20).each do |room_num| + room_array << Room.new(room_num) + end + @all_rooms = room_array + room_array + end + + def check_room_available?(start_date, end_date) + nights = Date.new(end_date) - Date.new(start_date) + nights + # will take in a start date and end date + # check all rooms booked dates (if date in array unavilable) + # for each room.all loop + # return aval room or no room aval + end +end diff --git a/lib/room.rb b/lib/room.rb index 35e5a52ee..9a70befb1 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -14,9 +14,11 @@ def add_reservation def find_all_resevations reservation_array = Reservation.all - reservation_array.each do |reservation| return reservation if reservation.room_num == @room_num end end + + def find_room_number + end end diff --git a/test/hotel_dispatch_test.rb b/test/hotel_dispatcher_test.rb similarity index 54% rename from test/hotel_dispatch_test.rb rename to test/hotel_dispatcher_test.rb index 08be128f2..616b7a744 100644 --- a/test/hotel_dispatch_test.rb +++ b/test/hotel_dispatcher_test.rb @@ -1,4 +1,4 @@ -require 'hotel_dispatch' +require 'hotel_dispatcher' require_relative 'test_helper' describe 'HotelDispatcher class' do @@ -11,4 +11,12 @@ def build_test_dispatcher expect(dispatcher).must_be_kind_of HotelDispatcher end end + describe 'Instance of Hotel Dispatcher' do + it 'can makes all rooms' do + hotel_dispatcher = build_test_dispatcher + room_array = hotel_dispatcher.make_rooms + expect(room_array.length).must_equal 20 + describe + end + end end From 9eeba2b5e7b6855a71a925348f50f9c097c12ea5 Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Mon, 2 Mar 2020 21:13:16 -0800 Subject: [PATCH 04/15] Wave 1 - added date test to HotelDispatch --- lib/hotel_dispatcher.rb | 14 +++++++++----- lib/room.rb | 2 ++ test/hotel_dispatcher_test.rb | 12 ++++++++++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb index 9f5b50fa8..058d4a976 100644 --- a/lib/hotel_dispatcher.rb +++ b/lib/hotel_dispatcher.rb @@ -1,5 +1,3 @@ -# frozen_string_literal: true - require 'date' require_relative 'reservation' require_relative 'room' @@ -7,6 +5,9 @@ class HotelDispatcher def initialize; end +# - For this wave, any room can be reserved at any time, and you don't need to check whether reservations conflict with each other (this will come in wave 2!) + +# - The hotel has 20 rooms, and they are numbered 1 through 20 def make_rooms room_array = [] (1..20).each do |room_num| @@ -16,9 +17,12 @@ def make_rooms room_array end - def check_room_available?(start_date, end_date) - nights = Date.new(end_date) - Date.new(start_date) - nights +# - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation + + def check_room_available?(start_date,end_date) + start_date = Date.parse(start_date) + end_date= Date.parse(end_date) + p end_date # will take in a start date and end date # check all rooms booked dates (if date in array unavilable) # for each room.all loop diff --git a/lib/room.rb b/lib/room.rb index 9a70befb1..ee77bd406 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -8,6 +8,8 @@ def initialize(room_num) @room_num = room_num end + # - Every room is identical, and a room always costs $200/night + # - The last day of a reservation is the checkout day, so the guest should not be charged for that night def add_reservation Reservation.new(@room_num, start_date, end_date) end diff --git a/test/hotel_dispatcher_test.rb b/test/hotel_dispatcher_test.rb index 616b7a744..8289e9069 100644 --- a/test/hotel_dispatcher_test.rb +++ b/test/hotel_dispatcher_test.rb @@ -1,9 +1,11 @@ +# frozen_string_literal: true + require 'hotel_dispatcher' require_relative 'test_helper' describe 'HotelDispatcher class' do def build_test_dispatcher - return HotelDispatcher.new + HotelDispatcher.new end describe 'Initializer' do it 'is an instance of HotelDispatcher' do @@ -16,7 +18,13 @@ def build_test_dispatcher hotel_dispatcher = build_test_dispatcher room_array = hotel_dispatcher.make_rooms expect(room_array.length).must_equal 20 - describe + end + end + describe 'Checks room for availablility' do + it 'takes in the start and end date' do + hotel_dispatcher = build_test_dispatcher + room_check = hotel_dispatcher.check_room_available?('3rd Feb 2001', '5 Feb 2001') + expect(room_check).must_be_kind_of Date end end end From 093eaf8dce2945341b14cd48163ce5d2509b8a5a Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Tue, 3 Mar 2020 13:57:18 -0800 Subject: [PATCH 05/15] Completed Wave 1??- Should have all test. --- lib/hotel_dispatcher.rb | 15 ++++++++------- lib/reservation.rb | 16 ++++++++++++---- lib/room.rb | 9 ++++++--- test/hotel_dispatcher_test.rb | 22 +++++++++++----------- test/reservation_test.rb | 10 ++++++++-- test/room_test.rb | 15 ++++++++++++++- 6 files changed, 59 insertions(+), 28 deletions(-) diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb index 058d4a976..6807e1d1f 100644 --- a/lib/hotel_dispatcher.rb +++ b/lib/hotel_dispatcher.rb @@ -1,3 +1,4 @@ + require 'date' require_relative 'reservation' require_relative 'room' @@ -5,9 +6,9 @@ class HotelDispatcher def initialize; end -# - For this wave, any room can be reserved at any time, and you don't need to check whether reservations conflict with each other (this will come in wave 2!) + # - For this wave, any room can be reserved at any time, and you don't need to check whether reservations conflict with each other (this will come in wave 2!) -# - The hotel has 20 rooms, and they are numbered 1 through 20 + # - The hotel has 20 rooms, and they are numbered 1 through 20 def make_rooms room_array = [] (1..20).each do |room_num| @@ -17,13 +18,13 @@ def make_rooms room_array end -# - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation + # - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation - def check_room_available?(start_date,end_date) + def check_room_available?(start_date, end_date) start_date = Date.parse(start_date) - end_date= Date.parse(end_date) - p end_date - # will take in a start date and end date + end_date = Date.parse(end_date) + + # check all rooms booked dates (if date in array unavilable) # for each room.all loop # return aval room or no room aval diff --git a/lib/reservation.rb b/lib/reservation.rb index c6136d166..3b5546b7a 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,12 +1,20 @@ + class Reservation - attr_accessor :room_num,:start_date,:end_date - def initialize(room_num,start_date,end_date) - @room_num = room_num + attr_accessor :room,:start_date,:end_date + def initialize(room,start_date,end_date) + @room = room @start_date = start_date @end_date = end_date end def total - # number of nights * $200/night - 1 night + # take in the Room class add_res method + # converts date range into number of nights +# each night * $200 less the last night + @room.add_reservation(start_date,end_date) + date_range = end_date - start_date + num_of_nights = date_range.to_i - 1 + p num_of_nights = num_of_nights * 200 + return num_of_nights end end \ No newline at end of file diff --git a/lib/room.rb b/lib/room.rb index ee77bd406..e7243831c 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,17 +1,20 @@ # frozen_string_literal: true -require 'reservation' +require_relative 'reservation' class Room attr_accessor :reservations, :room_num def initialize(room_num) @room_num = room_num + @reservations = [] end # - Every room is identical, and a room always costs $200/night # - The last day of a reservation is the checkout day, so the guest should not be charged for that night - def add_reservation - Reservation.new(@room_num, start_date, end_date) + def add_reservation(start_date, end_date) + new_res = Reservation.new(self, start_date, end_date) + @reservations << new_res + return new_res end def find_all_resevations diff --git a/test/hotel_dispatcher_test.rb b/test/hotel_dispatcher_test.rb index 8289e9069..59afc2936 100644 --- a/test/hotel_dispatcher_test.rb +++ b/test/hotel_dispatcher_test.rb @@ -1,29 +1,29 @@ -# frozen_string_literal: true -require 'hotel_dispatcher' -require_relative 'test_helper' +require "hotel_dispatcher" +require_relative "test_helper" -describe 'HotelDispatcher class' do +describe "HotelDispatcher class" do def build_test_dispatcher HotelDispatcher.new end - describe 'Initializer' do - it 'is an instance of HotelDispatcher' do + + describe "Initializer" do + it "is an instance of HotelDispatcher" do dispatcher = build_test_dispatcher expect(dispatcher).must_be_kind_of HotelDispatcher end end - describe 'Instance of Hotel Dispatcher' do - it 'can makes all rooms' do + describe "Instance of Hotel Dispatcher" do + it "can makes all rooms" do hotel_dispatcher = build_test_dispatcher room_array = hotel_dispatcher.make_rooms expect(room_array.length).must_equal 20 end end - describe 'Checks room for availablility' do - it 'takes in the start and end date' do + describe "Checks room for availablility" do + it "takes in the start and end date" do hotel_dispatcher = build_test_dispatcher - room_check = hotel_dispatcher.check_room_available?('3rd Feb 2001', '5 Feb 2001') + room_check = hotel_dispatcher.check_room_available?("3rd Feb 2001", "5 Feb 2001") expect(room_check).must_be_kind_of Date end end diff --git a/test/reservation_test.rb b/test/reservation_test.rb index c1ff64704..72bc251e3 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -4,11 +4,17 @@ describe 'Reservation class' do describe 'Initializer' do + let(:start_date){Date.new(2001, 2, 3)} + let(:end_date){Date.new(2001, 2, 5)} it 'is an instance of Reservation' do - start_date = Date.new(2001,2,3) - end_date = Date.new(2001,2,5) res = Reservation.new(1,start_date,end_date) expect(res).must_be_kind_of Reservation end + describe 'Reservation total method' do + it 'takes in the date' do + res = Reservation.new(Room.new(1),start_date,end_date) + + end + end end end \ No newline at end of file diff --git a/test/room_test.rb b/test/room_test.rb index dca68b091..789aba28b 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -7,5 +7,18 @@ test_room = Room.new(1) expect(test_room).must_be_kind_of Room end + + it 'can create a new reservation' do + room = Room.new(1) + reservation = room.add_reservation(Date.today,Date.today + 3) + expect(room.reservations.length).must_equal 1 + expect(room.reservations).must_include reservation + end + + it 'can take in the dates from Room class' do + new_res = Reservation.new(Room.new(1),Date.today,Date.today + 3) + expect(new_res.total).must_equal 400 + end end -end \ No newline at end of file +end + From 30e1da6e44e2bf2979547917625a5ba8a47ce3dd Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Tue, 3 Mar 2020 18:49:53 -0800 Subject: [PATCH 06/15] Wave 1 - 90 % fix broken test --- lib/hotel_dispatcher.rb | 8 +++----- lib/reservation.rb | 18 ++++++++---------- lib/room.rb | 3 ++- test/hotel_dispatcher_test.rb | 3 +-- test/reservation_test.rb | 17 ++++++++--------- test/room_test.rb | 25 +++++++++++++------------ test/test_helper.rb | 2 +- 7 files changed, 36 insertions(+), 40 deletions(-) diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb index 6807e1d1f..dea3717ac 100644 --- a/lib/hotel_dispatcher.rb +++ b/lib/hotel_dispatcher.rb @@ -4,7 +4,7 @@ require_relative 'room' class HotelDispatcher - def initialize; end + def initialize;end # - For this wave, any room can be reserved at any time, and you don't need to check whether reservations conflict with each other (this will come in wave 2!) @@ -14,8 +14,7 @@ def make_rooms (1..20).each do |room_num| room_array << Room.new(room_num) end - @all_rooms = room_array - room_array + p room_array end # - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation @@ -23,10 +22,9 @@ def make_rooms def check_room_available?(start_date, end_date) start_date = Date.parse(start_date) end_date = Date.parse(end_date) - - # check all rooms booked dates (if date in array unavilable) # for each room.all loop # return aval room or no room aval end end + diff --git a/lib/reservation.rb b/lib/reservation.rb index 3b5546b7a..459b69873 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,20 +1,18 @@ - class Reservation - attr_accessor :room,:start_date,:end_date - def initialize(room,start_date,end_date) + attr_accessor :room, :start_date, :end_date + + def initialize(room, start_date, end_date) @room = room @start_date = start_date @end_date = end_date end + def total - # take in the Room class add_res method - # converts date range into number of nights -# each night * $200 less the last night - @room.add_reservation(start_date,end_date) - date_range = end_date - start_date + # take in the Room class add_res method, converts date range into number of nights, each night * $200 less the last night + @room.add_reservation(start_date, end_date) + date_range = end_date - start_date num_of_nights = date_range.to_i - 1 p num_of_nights = num_of_nights * 200 return num_of_nights end - -end \ No newline at end of file +end diff --git a/lib/room.rb b/lib/room.rb index e7243831c..e8c152e87 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -3,7 +3,7 @@ require_relative 'reservation' class Room - attr_accessor :reservations, :room_num + attr_accessor :reservations, :room_num, def initialize(room_num) @room_num = room_num @reservations = [] @@ -17,6 +17,7 @@ def add_reservation(start_date, end_date) return new_res end + def find_all_resevations reservation_array = Reservation.all reservation_array.each do |reservation| diff --git a/test/hotel_dispatcher_test.rb b/test/hotel_dispatcher_test.rb index 59afc2936..96a1a2bf2 100644 --- a/test/hotel_dispatcher_test.rb +++ b/test/hotel_dispatcher_test.rb @@ -1,6 +1,5 @@ - -require "hotel_dispatcher" require_relative "test_helper" +require 'hotel_dispatcher' describe "HotelDispatcher class" do def build_test_dispatcher diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 72bc251e3..08e6808ef 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -1,20 +1,19 @@ -require 'room' +require 'reservation' require 'date' require_relative 'test_helper' -describe 'Reservation class' do +xdescribe 'Reservation class' do describe 'Initializer' do let(:start_date){Date.new(2001, 2, 3)} let(:end_date){Date.new(2001, 2, 5)} it 'is an instance of Reservation' do - res = Reservation.new(1,start_date,end_date) + res = Reservation.new(room,start_date,end_date) expect(res).must_be_kind_of Reservation end - describe 'Reservation total method' do - it 'takes in the date' do - res = Reservation.new(Room.new(1),start_date,end_date) - - end - end + # describe 'Reservation total method' do + # it 'takes in the date' do + # res = Reservation.new(Room.new(1),start_date, end_date) + # end + # end end end \ No newline at end of file diff --git a/test/room_test.rb b/test/room_test.rb index 789aba28b..7e68128ca 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -1,24 +1,25 @@ -require 'room' require_relative 'test_helper' +require 'room' +require 'reservation' -describe 'Room class' do +xdescribe 'Room class' do describe 'Initializer' do it 'is an instance of Room' do test_room = Room.new(1) expect(test_room).must_be_kind_of Room end - it 'can create a new reservation' do - room = Room.new(1) - reservation = room.add_reservation(Date.today,Date.today + 3) - expect(room.reservations.length).must_equal 1 - expect(room.reservations).must_include reservation - end + # it 'can create a new reservation' do + # room = Room.new(1) + # reservation = room.add_reservation(Date.today,Date.today + 3) + # expect(room.reservations.length).must_equal 1 + # expect(room.reservations).must_include reservation + # end - it 'can take in the dates from Room class' do - new_res = Reservation.new(Room.new(1),Date.today,Date.today + 3) - expect(new_res.total).must_equal 400 - end + # it 'can take in the dates from Room class' do + # new_res = Reservation.new(Room.new(1),Date.today,Date.today + 3) + # expect(new_res.total).must_equal 400 + # end end end diff --git a/test/test_helper.rb b/test/test_helper.rb index ce583ff3d..f61826682 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,4 +1,4 @@ -# Add simplecov +# require 'simple_cov' require "minitest" require "minitest/autorun" require "minitest/reporters" From 6df777e73c241a8a8789ecc12b132e0c66660080 Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Tue, 3 Mar 2020 20:35:08 -0800 Subject: [PATCH 07/15] created 8 test for wave 1 so far all passing --- lib/hotel_dispatcher.rb | 2 +- lib/reservation.rb | 9 +++++++-- lib/room.rb | 3 +-- test/reservation_test.rb | 18 +++++++++--------- test/room_test.rb | 25 ++++++++++++------------- 5 files changed, 30 insertions(+), 27 deletions(-) diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb index dea3717ac..2b5dbf688 100644 --- a/lib/hotel_dispatcher.rb +++ b/lib/hotel_dispatcher.rb @@ -14,7 +14,7 @@ def make_rooms (1..20).each do |room_num| room_array << Room.new(room_num) end - p room_array + return room_array end # - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation diff --git a/lib/reservation.rb b/lib/reservation.rb index 459b69873..93c57b6df 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -7,12 +7,17 @@ def initialize(room, start_date, end_date) @end_date = end_date end + # take in the Room class add_res method, converts date range into number of nights, each night * $200 less the one night + def total - # take in the Room class add_res method, converts date range into number of nights, each night * $200 less the last night + total_cost_for_stay = number_of_nights? * 200 + return total_cost_for_stay + end + + def number_of_nights? @room.add_reservation(start_date, end_date) date_range = end_date - start_date num_of_nights = date_range.to_i - 1 - p num_of_nights = num_of_nights * 200 return num_of_nights end end diff --git a/lib/room.rb b/lib/room.rb index e8c152e87..0e5271c94 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,9 +1,8 @@ -# frozen_string_literal: true require_relative 'reservation' class Room - attr_accessor :reservations, :room_num, + attr_accessor :reservations, :room_num def initialize(room_num) @room_num = room_num @reservations = [] diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 08e6808ef..5c6d34607 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -1,19 +1,19 @@ -require 'reservation' require 'date' require_relative 'test_helper' -xdescribe 'Reservation class' do +describe 'Reservation class' do describe 'Initializer' do let(:start_date){Date.new(2001, 2, 3)} - let(:end_date){Date.new(2001, 2, 5)} + let(:end_date){Date.new(2001, 2, 6)} it 'is an instance of Reservation' do - res = Reservation.new(room,start_date,end_date) + res = Reservation.new(Room.new(1),start_date,end_date) expect(res).must_be_kind_of Reservation end - # describe 'Reservation total method' do - # it 'takes in the date' do - # res = Reservation.new(Room.new(1),start_date, end_date) - # end - # end + describe 'Reservation total method' do + it 'takes in the date' do + res = Reservation.new(Room.new(1),start_date, end_date) + expect(res.total).must_equal 400 + end + end end end \ No newline at end of file diff --git a/test/room_test.rb b/test/room_test.rb index 7e68128ca..4e8b4742a 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -1,25 +1,24 @@ require_relative 'test_helper' -require 'room' -require 'reservation' -xdescribe 'Room class' do + +describe 'Room class' do describe 'Initializer' do it 'is an instance of Room' do test_room = Room.new(1) expect(test_room).must_be_kind_of Room end - # it 'can create a new reservation' do - # room = Room.new(1) - # reservation = room.add_reservation(Date.today,Date.today + 3) - # expect(room.reservations.length).must_equal 1 - # expect(room.reservations).must_include reservation - # end + it 'can create a new reservation' do + room = Room.new(1) + reservation = room.add_reservation(Date.today,Date.today + 3) + expect(room.reservations.length).must_equal 1 + expect(room.reservations).must_include reservation + end - # it 'can take in the dates from Room class' do - # new_res = Reservation.new(Room.new(1),Date.today,Date.today + 3) - # expect(new_res.total).must_equal 400 - # end + it 'can take in the dates from Room class' do + new_res = Reservation.new(Room.new(1),Date.today,Date.today + 3) + expect(new_res.total).must_equal 400 + end end end From 12c3cf6b7d9f41658b2451fd01f1732f1e8f394a Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Thu, 5 Mar 2020 21:16:18 -0800 Subject: [PATCH 08/15] Complete Refactor - Add another class for date --- lib/date_range.rb | 38 +++++++++++++++++++ lib/hotel_dispatcher.rb | 51 ++++++++++++++++++------- lib/reservation.rb | 41 +++++++++++--------- lib/room.rb | 30 +++++---------- test/date_range_test.rb | 70 +++++++++++++++++++++++++++++++++++ test/hotel_dispatcher_test.rb | 12 +++--- test/reservation_test.rb | 29 ++++++++------- test/room_test.rb | 13 ++++--- 8 files changed, 210 insertions(+), 74 deletions(-) create mode 100644 lib/date_range.rb create mode 100644 test/date_range_test.rb diff --git a/lib/date_range.rb b/lib/date_range.rb new file mode 100644 index 000000000..50ab1d9c9 --- /dev/null +++ b/lib/date_range.rb @@ -0,0 +1,38 @@ +require "date" + +# - I can view a list of rooms that are not reserved for a given date range, so that I can see all available rooms for that day +# - I can make a reservation of a room for a given date range, and that room will not be part of any other reservation overlapping that date range +# - I want an exception raised if I try to reserve a room during a date range when all rooms are reserved, so that I cannot make two reservations for the same room that overlap by date + +class Date_Range + attr_reader :check_in_date, :check_out_date + + def initialize(check_in_date, check_out_date) + unless check_out_date > check_in_date + raise ArgumentError, "These dates are invalid." + end + @check_in_date = check_in_date + @check_out_date = check_out_date + end + + # - The last day of a reservation is the checkout day, so the guest should not be charged for that night + def overlaps_in_reservations?(new_date_range) + if (new_date_range.check_out_date <= @check_in_date) || (new_date_range.check_in_date >= @check_out_date) + return false + else + return true + end + end + + def number_of_nights? + return @check_out_date - @check_in_date + end +end + +# def contains(date) +# if date >= @check_in_date && date < @check_out_date +# return true +# else +# return false +# end +# end diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb index 2b5dbf688..1ab03fd7e 100644 --- a/lib/hotel_dispatcher.rb +++ b/lib/hotel_dispatcher.rb @@ -1,12 +1,14 @@ +require "date" +require_relative "date_range" +require_relative "reservation" +require_relative "room" -require 'date' -require_relative 'reservation' -require_relative 'room' +class HotelManager < Date_Range + attr_accessor :reservations -class HotelDispatcher - def initialize;end - - # - For this wave, any room can be reserved at any time, and you don't need to check whether reservations conflict with each other (this will come in wave 2!) + def initialize + @rooms = make_rooms + end # - The hotel has 20 rooms, and they are numbered 1 through 20 def make_rooms @@ -19,12 +21,35 @@ def make_rooms # - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation - def check_room_available?(start_date, end_date) - start_date = Date.parse(start_date) - end_date = Date.parse(end_date) - # check all rooms booked dates (if date in array unavilable) - # for each room.all loop - # return aval room or no room aval + # check all rooms booked dates (if date in array unavilable) + # for each room.all loop + # return aval room or no room aval + # - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation + # - I can view a list of rooms that are not reserved for a given date range, so that I can see all available rooms for that day + def check_room_available?(check_in_date, check_out_date) + date_range = Date_Range.new(check_in_date, check_out_date) + @rooms.each do |room| + # If no res has any overlap return true # + if !room.reservations.any? { |res| res.overlaps_in_reservations?(new_date_range) } + return true + end + end + # However if there is return false because there is a overlap. No room available whatsoever# + return false + end + + def find_all_resevations + all_res = [] + @rooms.each do |room| + room.reservations.each do |res| + all_res << res + end + end + return all_res + # reservation_array = Reservation.all + # reservation_array.each do |reservation| + # return reservation if reservation.room_num == @room_num end end +# - For this wave, any room can be reserved at any time, and you don't need to check whether reservations conflict with each other (this will come in wave 2!) diff --git a/lib/reservation.rb b/lib/reservation.rb index 93c57b6df..421d5dddd 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,23 +1,30 @@ -class Reservation - attr_accessor :room, :start_date, :end_date +require_relative "date_range" - def initialize(room, start_date, end_date) - @room = room - @start_date = start_date - @end_date = end_date - end - - # take in the Room class add_res method, converts date range into number of nights, each night * $200 less the one night +class Reservation < Date_Range + attr_accessor :room_num, :check_in_date, :check_out_date - def total - total_cost_for_stay = number_of_nights? * 200 - return total_cost_for_stay + def initialize(room_num, check_in_date, check_out_date) + @room = room_num + @check_in_date = check_in_date + @check_out_date = check_out_date end - def number_of_nights? - @room.add_reservation(start_date, end_date) - date_range = end_date - start_date - num_of_nights = date_range.to_i - 1 - return num_of_nights + #each time the employee creates a reservation it is created here + +# Every room is identical, and a room always costs $200/night + def total_cost_for_stay + number_of_nights? * 200 end end + +# take in the Room class add_res method, converts date range into number of nights, each night * $200 less the one night +# def number_of_nights? +# @room.add_reservation(check_in_date, check_out_date) +# num_of_nights = check_out_date - check_in_date - 1 +# return num_of_nights.to_i +# end + +# def total +# total_cost_for_stay = number_of_nights? * 200 +# return total_cost_for_stay +# end diff --git a/lib/room.rb b/lib/room.rb index 0e5271c94..07b8fb94e 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,29 +1,17 @@ - -require_relative 'reservation' +# require_relative 'reservation' class Room + # currently a room is only a room attr_accessor :reservations, :room_num + def initialize(room_num) @room_num = room_num @reservations = [] end - - # - Every room is identical, and a room always costs $200/night - # - The last day of a reservation is the checkout day, so the guest should not be charged for that night - def add_reservation(start_date, end_date) - new_res = Reservation.new(self, start_date, end_date) - @reservations << new_res - return new_res - end - - - def find_all_resevations - reservation_array = Reservation.all - reservation_array.each do |reservation| - return reservation if reservation.room_num == @room_num - end - end - - def find_room_number - end end + +def create_new_reservation + new_res = Reservation.new(room_num, check_in_date, check_out_date) + @reservations << new_res + return new_res +end \ No newline at end of file diff --git a/test/date_range_test.rb b/test/date_range_test.rb new file mode 100644 index 000000000..564254f54 --- /dev/null +++ b/test/date_range_test.rb @@ -0,0 +1,70 @@ +#date range (1) 2001,2,1 - 2001, 2,10 9 nights +#date range (2) 2001,2,1 - 2001, 2,4 3 nights +#date range (3) 2001,1,31 - 2001,2,4 4 nights +#date range (4) 2001,2,4 - 2001, 2,8 4 nights +#date range (5) 2001,2,8 - 2001, 2,10 2 nights +#date range (6) 2001,2,8 - 2001, 2,12 4 nights +#date range (7) 2001,2,12 - 2001,2,14 4 nights + + + + + + +require_relative "test_helper" + +describe "Instanitates a new Date Range" do + let(:check_in_date) { Date.new(2001, 2, 3) } + let(:check_out_date) { Date.new(2001, 2, 6) } + it "Initialize Date Range" do + new_date = Date_Range.new(check_in_date,check_out_date) + expect(new_date).must_be_kind_of Date_Range + end + +describe 'Checks overlaps - exactly the same'do + let(:check_in_date) { Date.new(2001, 2, 3) } + let(:check_out_date) { Date.new(2001, 2, 6) } + let(:date_range_1) {Date_Range.new(check_in_date,check_out_date)} + + it "If check in is the same as check" do + # Arrange + date_range_2 = Date_Range.new(check_in_date,check_out_date) + # Act + test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) + # Assert + expect(test_date_range).must_equal true + + end + + it " If the date range falls inside a current date range" do + # Arrange + start_two = Date.new(2001,2,4) + end_two = Date.new(2001,2,5) + date_range_2 = Date_Range.new(start_two,end_two) + # Act + test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) + # Assert + expect(test_date_range).must_equal true + end + + it " If partial overlap, new date range start date fails inside current date" do + # Arrange + start_two = Date.new(2001,2,2) + end_two = Date.new(2001,2,5) + date_range_2 = Date_Range.new(start_two,end_two) + # Act + test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) + # Assert + expect(test_date_range).must_equal true + end + + it "If partial overlap, end date fails inside current date " + end + + it " If a reservations fails inbetween to other reservations" do + end + + it "If long stay overlaps with another date range" do + end + + end \ No newline at end of file diff --git a/test/hotel_dispatcher_test.rb b/test/hotel_dispatcher_test.rb index 96a1a2bf2..fd3a3c26e 100644 --- a/test/hotel_dispatcher_test.rb +++ b/test/hotel_dispatcher_test.rb @@ -1,15 +1,15 @@ require_relative "test_helper" -require 'hotel_dispatcher' +require "hotel_dispatcher" describe "HotelDispatcher class" do def build_test_dispatcher - HotelDispatcher.new + HotelManager.new end describe "Initializer" do it "is an instance of HotelDispatcher" do dispatcher = build_test_dispatcher - expect(dispatcher).must_be_kind_of HotelDispatcher + expect(dispatcher).must_be_kind_of HotelManager end end describe "Instance of Hotel Dispatcher" do @@ -20,10 +20,12 @@ def build_test_dispatcher end end describe "Checks room for availablility" do + let(:check_in_date) { Date.new(2001, 2, 3) } + let(:check_out_date) { Date.new(2001, 2, 6) } it "takes in the start and end date" do hotel_dispatcher = build_test_dispatcher - room_check = hotel_dispatcher.check_room_available?("3rd Feb 2001", "5 Feb 2001") - expect(room_check).must_be_kind_of Date + room_check = hotel_dispatcher.check_room_available?(check_in_date, check_out_date) + expect(room_check).must_equal true end end end diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 5c6d34607..4eee562bf 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -1,19 +1,22 @@ require 'date' -require_relative 'test_helper' +require_relative "test_helper" -describe 'Reservation class' do - describe 'Initializer' do - let(:start_date){Date.new(2001, 2, 3)} - let(:end_date){Date.new(2001, 2, 6)} - it 'is an instance of Reservation' do - res = Reservation.new(Room.new(1),start_date,end_date) +xdescribe "Reservation class" do + describe "Initializer" do + let(:start_date) { Date.new(2001, 2, 3) } + let(:end_date) { Date.new(2001, 2, 6) } + it "is an instance of Reservation" do + res = Reservation.new(Room.new(1), start_date, end_date) expect(res).must_be_kind_of Reservation end - describe 'Reservation total method' do - it 'takes in the date' do - res = Reservation.new(Room.new(1),start_date, end_date) - expect(res.total).must_equal 400 - end + it "Calculates Total of Reservation" do + res = Reservation.new(Room.new(1),start_date, end_date) + expect(res.number_of_nights?).must_equal 2 + end + it "takes in the date" do + res = Reservation.new(Room.new(1), + start_date, end_date) + expect(res.total).must_equal 400 end end -end \ No newline at end of file +end diff --git a/test/room_test.rb b/test/room_test.rb index 4e8b4742a..c64df4ca4 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -1,7 +1,7 @@ require_relative 'test_helper' -describe 'Room class' do +xdescribe 'Room class' do describe 'Initializer' do it 'is an instance of Room' do test_room = Room.new(1) @@ -15,10 +15,13 @@ expect(room.reservations).must_include reservation end - it 'can take in the dates from Room class' do - new_res = Reservation.new(Room.new(1),Date.today,Date.today + 3) - expect(new_res.total).must_equal 400 + it 'can hold each reservation'do + room = Room.new(1) + all_res = [] + 5.times do |index| + all_res << room.add_reservation(Date.today,Date.today + 3) + end + expect(all_res.length).must_equal 5 end end end - From fb0d69d5aa61cbbe35fe78e790f121b36687b6b1 Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Sat, 7 Mar 2020 16:40:56 -0800 Subject: [PATCH 09/15] Add coverage directory to .gitignore file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5e1422c9c..c0ac3dc53 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ build-iPhoneSimulator/ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc +coverage From 018d66db440fed58bf923d0495831ac136d6b820 Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Sun, 8 Mar 2020 10:52:09 -0700 Subject: [PATCH 10/15] Wave 3 - add a hotel block class Fixed simple cov Cleaned Resvation Class and Hotel Dispatch --- lib/date_range.rb | 10 ++- lib/hotel_block.rb | 22 +++++ lib/hotel_dispatcher.rb | 45 ++++++++++- lib/reservation.rb | 8 +- lib/room.rb | 24 ++++-- test/date_range_test.rb | 148 +++++++++++++++++++++------------- test/hotel_dispatcher_test.rb | 5 ++ test/reservation_test.rb | 20 ++--- test/room_test.rb | 39 +++++---- test/test_helper.rb | 5 +- 10 files changed, 229 insertions(+), 97 deletions(-) create mode 100644 lib/hotel_block.rb diff --git a/lib/date_range.rb b/lib/date_range.rb index 50ab1d9c9..bd1e176ad 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -7,6 +7,9 @@ class Date_Range attr_reader :check_in_date, :check_out_date + # this is were we will handle the date, taking in the check in date and out date + # if the check out date is more higher that checking in date the date is invalide + # Example 2001,2 3 > 2001 2,4 def initialize(check_in_date, check_out_date) unless check_out_date > check_in_date raise ArgumentError, "These dates are invalid." @@ -15,9 +18,12 @@ def initialize(check_in_date, check_out_date) @check_out_date = check_out_date end - # - The last day of a reservation is the checkout day, so the guest should not be charged for that night + # every time Date_Range is called it takes in check in and out dates as parms + # setting check_in and check_out allows me to compare two date ranges for overlap + # if there is no overlap then return false + # Example 2001,2 3 2001 2,4 def overlaps_in_reservations?(new_date_range) - if (new_date_range.check_out_date <= @check_in_date) || (new_date_range.check_in_date >= @check_out_date) + if (new_date_range.check_in_date >= @check_out_date) || (new_date_range.check_out_date <= @check_in_date) return false else return true diff --git a/lib/hotel_block.rb b/lib/hotel_block.rb new file mode 100644 index 000000000..d020ec66a --- /dev/null +++ b/lib/hotel_block.rb @@ -0,0 +1,22 @@ +class HotelBlock + attr_accessor :room_info, :check_in_date, :check_out_date, :room_rate + + def initialize(room_ids, check_in_date, check_out_date, room_rate, hotel_block_id) + # room_info maps a room_id to whether it has been occupied or not. So to begin with, all rooms in a hotel block are not occupied. They are set to a value of false, indicating that they are not occupied. + @room_info = Hash[*room_ids.collect { |room_id| [room_id, false] }.flatten] + @check_in_date = check_in_date + @check_out_date = check_out_date + @room_rate = room_rate + @hotel_block_id = @hotel_block_id + end + + def check_rooms_available + @room_info.each do |room_id, occupied| + # If a room has occupied set to false, we know it is available. + if occupied == false + return true + end + end + return false + end +end diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb index 1ab03fd7e..cfe4d701a 100644 --- a/lib/hotel_dispatcher.rb +++ b/lib/hotel_dispatcher.rb @@ -8,6 +8,8 @@ class HotelManager < Date_Range def initialize @rooms = make_rooms + @hotel_blocks = [] + @hotel_block_counter = 0 end # - The hotel has 20 rooms, and they are numbered 1 through 20 @@ -30,7 +32,7 @@ def check_room_available?(check_in_date, check_out_date) date_range = Date_Range.new(check_in_date, check_out_date) @rooms.each do |room| # If no res has any overlap return true # - if !room.reservations.any? { |res| res.overlaps_in_reservations?(new_date_range) } + if !room.check_overlap_with_room_reservations(date_range) return true end end @@ -50,6 +52,47 @@ def find_all_resevations # reservation_array.each do |reservation| # return reservation if reservation.room_num == @room_num end + + def create_reservation(check_in_date, check_out_date) + # Need to determine if which room to use for the reservation. + + # Iterate over list of rooms. + # Find room that has availability. + # First room that has not time conflict is the room, we choose to use for the reservation. + # If no rooms have availability during the checkin_date to checkout_date, we should return an error/ raise an error. + + date_range = Date_Range.new(check_in_date, check_out_date) + @rooms.each do |room| + # If no res has any overlap return true # + if !room.check_overlap_with_room_reservations(date_range) + room.create_new_reservation(check_in_date, check_out_date) + return + end + end + + # Raise exception as no room is available during the requested date_range. + raise Exception.new "There are no rooms available for this date range" + end + + def create_room_block(room_ids, check_in_date, check_out_date, room_rate) + requested_date_range = Date_Range.new(check_in_date, check_out_date) + room_ids.each do |room_id| + room = @rooms[room_id] + if room.check_overlap_with_room_reservations(requested_date_range) + raise Exception.new "One of the rooms in the hotel block requested is unavailable" + end + end + + # Go to each room and add the reservation for the given date range + room_ids.each do |room_id| + room = @rooms[room_id] + room.create_new_reservation(check_in_date, check_out_date, true) + end + + # Create the HotelBlock object and add it to the list of hotel_blocks + hotel_blocks << HotelBlock.new(room_ids, check_in_date, check_out_date, room_rate, @hotel_block_counter) + @hotel_block_counter += 1 + end end # - For this wave, any room can be reserved at any time, and you don't need to check whether reservations conflict with each other (this will come in wave 2!) diff --git a/lib/reservation.rb b/lib/reservation.rb index 421d5dddd..b0f25ef3d 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -3,18 +3,22 @@ class Reservation < Date_Range attr_accessor :room_num, :check_in_date, :check_out_date - def initialize(room_num, check_in_date, check_out_date) + def initialize(room_num, check_in_date, check_out_date, hotel_block_reservation = false) @room = room_num @check_in_date = check_in_date @check_out_date = check_out_date + @hotel_block_reservation = hotel_block_reservation end #each time the employee creates a reservation it is created here -# Every room is identical, and a room always costs $200/night + # Every room is identical, and a room always costs $200/night def total_cost_for_stay number_of_nights? * 200 end + + def check_overlap(checkin, checkout) + end end # take in the Room class add_res method, converts date range into number of nights, each night * $200 less the one night diff --git a/lib/room.rb b/lib/room.rb index 07b8fb94e..67b7b8b65 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,6 +1,7 @@ +# require_relative 'date_range' # require_relative 'reservation' -class Room +class Room < Date_Range # currently a room is only a room attr_accessor :reservations, :room_num @@ -8,10 +9,19 @@ def initialize(room_num) @room_num = room_num @reservations = [] end -end -def create_new_reservation - new_res = Reservation.new(room_num, check_in_date, check_out_date) - @reservations << new_res - return new_res -end \ No newline at end of file + def check_overlap_with_room_reservations(requested_date_range) + # check if the check_in and check_out date overlaps with any other reservations for the room. + # Return true if no reservation conflicts with the checkin and checkout date. + if !@reservations.any? { |res| res.overlaps_in_reservations?(requested_date_range) } + return true + end + return false + end + + def create_new_reservation(check_in_date, check_out_date, hotel_block_reservation = false) + new_res = Reservation.new(room_num, check_in_date, check_out_date, hotel_block_reservation) + @reservations << new_res + return new_res + end +end diff --git a/test/date_range_test.rb b/test/date_range_test.rb index 564254f54..07eee740d 100644 --- a/test/date_range_test.rb +++ b/test/date_range_test.rb @@ -6,65 +6,105 @@ #date range (6) 2001,2,8 - 2001, 2,12 4 nights #date range (7) 2001,2,12 - 2001,2,14 4 nights - - - - - require_relative "test_helper" describe "Instanitates a new Date Range" do - let(:check_in_date) { Date.new(2001, 2, 3) } - let(:check_out_date) { Date.new(2001, 2, 6) } + let(:check_in_date) { Date.new(2001, 2, 1) } + let(:check_out_date) { Date.new(2001, 2, 3) } + it "Initialize Date Range" do - new_date = Date_Range.new(check_in_date,check_out_date) + new_date = Date_Range.new(check_in_date, check_out_date) expect(new_date).must_be_kind_of Date_Range end -describe 'Checks overlaps - exactly the same'do - let(:check_in_date) { Date.new(2001, 2, 3) } - let(:check_out_date) { Date.new(2001, 2, 6) } - let(:date_range_1) {Date_Range.new(check_in_date,check_out_date)} - - it "If check in is the same as check" do - # Arrange - date_range_2 = Date_Range.new(check_in_date,check_out_date) - # Act - test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) - # Assert - expect(test_date_range).must_equal true - - end - - it " If the date range falls inside a current date range" do - # Arrange - start_two = Date.new(2001,2,4) - end_two = Date.new(2001,2,5) - date_range_2 = Date_Range.new(start_two,end_two) - # Act - test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) - # Assert - expect(test_date_range).must_equal true - end - - it " If partial overlap, new date range start date fails inside current date" do - # Arrange - start_two = Date.new(2001,2,2) - end_two = Date.new(2001,2,5) - date_range_2 = Date_Range.new(start_two,end_two) - # Act - test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) - # Assert - expect(test_date_range).must_equal true - end - - it "If partial overlap, end date fails inside current date " - end - - it " If a reservations fails inbetween to other reservations" do - end - - it "If long stay overlaps with another date range" do - end + describe "Checks Overlaps" do + let(:check_in_date) { Date.new(2001, 2, 1) } + let(:check_out_date) { Date.new(2001, 2, 4) } + let(:date_range_1) { Date_Range.new(check_in_date, check_out_date) } + + it "both date ranges are the exact same" do + # Arrange + date_range_2 = Date_Range.new(check_in_date, check_out_date) + # Act + test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) + # Assert + expect(test_date_range).must_equal true + end + + it " New date range fails within current date range" do + # Arrange + start_two = Date.new(2001, 2, 2) + end_two = Date.new(2001, 2, 3) + date_range_2 = Date_Range.new(start_two, end_two) + # Act + test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) + # Assert + expect(test_date_range).must_equal true + end + + it "New date range starts before current date range - ends after after current check in" do + # Arrange + start_two = Date.new(2001, 1, 31) + end_two = Date.new(2001, 2, 2) + date_range_2 = Date_Range.new(start_two, end_two) + # Act + test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) + # Assert + expect(test_date_range).must_equal true + end + + it "New date range check in starts prior to current date range end - ends after " do + # Arrange + start_two = Date.new(2001, 2, 3) + end_two = Date.new(2001, 2, 6) + date_range_2 = Date_Range.new(start_two, end_two) + # Act + test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) + # Assert + expect(test_date_range).must_equal true + end + + it "New date range spans the length of the whole current reservation " do + # Arrange + start_two = Date.new(2001, 2, 3) + end_two = Date.new(2001, 2, 6) + date_range_2 = Date_Range.new(start_two, end_two) + # Act + test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) + # Assert + expect(test_date_range).must_equal true + end + + it " New range check in same as check out for current - Return False" do + # Arrange + start_two = Date.new(2001, 2, 4) + end_two = Date.new(2001, 2, 7) + date_range_2 = Date_Range.new(start_two, end_two) + # Act + test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) + # Assert + expect(test_date_range).must_equal false + end + + it " New date check in end before current check in" do + # Arrange + start_two = Date.new(2001, 1, 28) + end_two = Date.new(2001, 2, 1) + date_range_2 = Date_Range.new(start_two, end_two) + # Act + test_date_range = date_range_1.overlaps_in_reservations?(date_range_2) + # Assert + expect(test_date_range).must_equal false + end + describe "Calulates number of nights " do + let(:check_in_date) { Date.new(2001, 2, 3) } + let(:check_out_date) { Date.new(2001, 2, 6) } + + it "Correctly calulates number of nights" do + res = Reservation.new(Room.new(1), check_in_date, check_out_date) + expect(res.number_of_nights?).must_equal 3 + end + end + end # inside describe +end # top describe - end \ No newline at end of file diff --git a/test/hotel_dispatcher_test.rb b/test/hotel_dispatcher_test.rb index fd3a3c26e..62158e6cb 100644 --- a/test/hotel_dispatcher_test.rb +++ b/test/hotel_dispatcher_test.rb @@ -19,6 +19,7 @@ def build_test_dispatcher expect(room_array.length).must_equal 20 end end + describe "Checks room for availablility" do let(:check_in_date) { Date.new(2001, 2, 3) } let(:check_out_date) { Date.new(2001, 2, 6) } @@ -27,5 +28,9 @@ def build_test_dispatcher room_check = hotel_dispatcher.check_room_available?(check_in_date, check_out_date) expect(room_check).must_equal true end + it "takes in the start and end date" do + hotel_dispatcher = build_test_dispatcher + room_check = hotel_dispatcher.check_room_available?(check_in_date, check_out_date) + expect(room_check).must_equal true end end diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 4eee562bf..e3c5dd094 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -1,22 +1,18 @@ -require 'date' +require "date" require_relative "test_helper" -xdescribe "Reservation class" do +describe "Reservation class" do describe "Initializer" do - let(:start_date) { Date.new(2001, 2, 3) } - let(:end_date) { Date.new(2001, 2, 6) } + let(:check_in_date) { Date.new(2001, 2, 3) } + let(:check_out_date) { Date.new(2001, 2, 6) } it "is an instance of Reservation" do - res = Reservation.new(Room.new(1), start_date, end_date) + res = Reservation.new(Room.new(1),check_in_date, check_out_date) expect(res).must_be_kind_of Reservation end - it "Calculates Total of Reservation" do - res = Reservation.new(Room.new(1),start_date, end_date) - expect(res.number_of_nights?).must_equal 2 - end + it "takes in the date" do - res = Reservation.new(Room.new(1), - start_date, end_date) - expect(res.total).must_equal 400 + res = Reservation.new(Room.new(1),check_in_date, check_out_date) + expect(res.total_cost_for_stay).must_equal 600 end end end diff --git a/test/room_test.rb b/test/room_test.rb index c64df4ca4..7c5b752dd 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -1,27 +1,32 @@ -require_relative 'test_helper' +require_relative "test_helper" - -xdescribe 'Room class' do - describe 'Initializer' do - it 'is an instance of Room' do - test_room = Room.new(1) +describe "Room class" do + describe "Initializer" do + it "is an instance of Room" do + test_room = Room.new(1) expect(test_room).must_be_kind_of Room end - - it 'can create a new reservation' do - room = Room.new(1) - reservation = room.add_reservation(Date.today,Date.today + 3) - expect(room.reservations.length).must_equal 1 - expect(room.reservations).must_include reservation - end - it 'can hold each reservation'do - room = Room.new(1) - all_res = [] + it "Can create mutliple reservations for 1 room" do + room = Room.new(1) + all_res = [] 5.times do |index| - all_res << room.add_reservation(Date.today,Date.today + 3) + all_res << room.create_new_reservation(Date.today, Date.today + 3) end expect(all_res.length).must_equal 5 end end end + +# it "can create a new reservation" do +# #Arrange +# room = Room.new(1) +# reservation = room.create_new_reservation +#Act +#Assert +# it "can create a new reservation" do +# room = Room.new(1) +# reservation = room.add_reservation(Date.today, Date.today + 3) +# expect(room.reservations.length).must_equal 1 +# expect(room.reservations).must_include reservation +# end diff --git a/test/test_helper.rb b/test/test_helper.rb index f61826682..73e02cfd2 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,8 +1,9 @@ -# require 'simple_cov' +require 'simplecov' +SimpleCov.start require "minitest" require "minitest/autorun" require "minitest/reporters" -require 'minitest/skip_dsl' +require "minitest/skip_dsl" Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From 6a145afd9a74f42085de745f4a9e49980d298a38 Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Sun, 8 Mar 2020 12:36:17 -0700 Subject: [PATCH 11/15] Added notes for check room avalablity in Hotel Dis Class --- lib/hotel_dispatcher.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb index cfe4d701a..1cfa251e2 100644 --- a/lib/hotel_dispatcher.rb +++ b/lib/hotel_dispatcher.rb @@ -13,6 +13,8 @@ def initialize end # - The hotel has 20 rooms, and they are numbered 1 through 20 + # - In this method we make a rooms spanning 1 - 20 + # - Each room is placed in an array which because an room array def make_rooms room_array = [] (1..20).each do |room_num| @@ -28,6 +30,11 @@ def make_rooms # return aval room or no room aval # - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation # - I can view a list of rooms that are not reserved for a given date range, so that I can see all available rooms for that day + + # Here we check the room availability by taking in the check in and out date as parms + # Those parms are then used to create a new Instantation of a date range + # By setting that new instantion of a date range as a variable we can then + # Go into each room and check that said date range def check_room_available?(check_in_date, check_out_date) date_range = Date_Range.new(check_in_date, check_out_date) @rooms.each do |room| From 1c500621fe65c5b09f0252250ce01b5113a63ce4 Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Sun, 8 Mar 2020 16:18:42 -0700 Subject: [PATCH 12/15] Created another hotel dispatcher test --- lib/hotel_dispatcher.rb | 39 +++++++++++++++++-------------- test/date_range_test.rb | 1 - test/hotel_dispatcher_test.rb | 44 ++++++++++++++++++++++++++--------- test/reservation_test.rb | 4 ++-- test/test_helper.rb | 3 ++- 5 files changed, 59 insertions(+), 32 deletions(-) diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb index 1cfa251e2..06790a58e 100644 --- a/lib/hotel_dispatcher.rb +++ b/lib/hotel_dispatcher.rb @@ -1,7 +1,9 @@ require "date" +require "pry" require_relative "date_range" require_relative "reservation" require_relative "room" +require_relative "hotel_block" class HotelManager < Date_Range attr_accessor :reservations @@ -13,7 +15,7 @@ def initialize end # - The hotel has 20 rooms, and they are numbered 1 through 20 - # - In this method we make a rooms spanning 1 - 20 + # - In this method we make a rooms spanning 1 - 20 # - Each room is placed in an array which because an room array def make_rooms room_array = [] @@ -23,17 +25,9 @@ def make_rooms return room_array end - # - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation - - # check all rooms booked dates (if date in array unavilable) - # for each room.all loop - # return aval room or no room aval - # - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation - # - I can view a list of rooms that are not reserved for a given date range, so that I can see all available rooms for that day - # Here we check the room availability by taking in the check in and out date as parms # Those parms are then used to create a new Instantation of a date range - # By setting that new instantion of a date range as a variable we can then + # By setting that new instantion of a date range as a variable we can then # Go into each room and check that said date range def check_room_available?(check_in_date, check_out_date) date_range = Date_Range.new(check_in_date, check_out_date) @@ -55,9 +49,6 @@ def find_all_resevations end end return all_res - # reservation_array = Reservation.all - # reservation_array.each do |reservation| - # return reservation if reservation.room_num == @room_num end def create_reservation(check_in_date, check_out_date) @@ -65,22 +56,28 @@ def create_reservation(check_in_date, check_out_date) # Iterate over list of rooms. # Find room that has availability. - # First room that has not time conflict is the room, we choose to use for the reservation. + # First room that has no time conflict is the room, we choose to use for the reservation. # If no rooms have availability during the checkin_date to checkout_date, we should return an error/ raise an error. date_range = Date_Range.new(check_in_date, check_out_date) @rooms.each do |room| # If no res has any overlap return true # - if !room.check_overlap_with_room_reservations(date_range) + if room.check_overlap_with_room_reservations(date_range) room.create_new_reservation(check_in_date, check_out_date) - return + return true end end - # Raise exception as no room is available during the requested date_range. + # # Raise exception as no room is available during the requested date_range. raise Exception.new "There are no rooms available for this date range" end + # This method is used to create a Hotel Block + # Takes in Room Ids and check in and check out date + # inside the method we create a method we create a variable called new requested_date_range which uses the Date_Range class + # room_ids is the number of rooms + # need to raise error if more than 5 rooms + # using the make rooms we def create_room_block(room_ids, check_in_date, check_out_date, room_rate) requested_date_range = Date_Range.new(check_in_date, check_out_date) room_ids.each do |room_id| @@ -103,3 +100,11 @@ def create_room_block(room_ids, check_in_date, check_out_date, room_rate) end # - For this wave, any room can be reserved at any time, and you don't need to check whether reservations conflict with each other (this will come in wave 2!) + +# - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation + +# check all rooms booked dates (if date in array unavilable) +# for each room.all loop +# return aval room or no room aval +# - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation +# - I can view a list of rooms that are not reserved for a given date range, so that I can see all available rooms for that day diff --git a/test/date_range_test.rb b/test/date_range_test.rb index 07eee740d..35caa33a3 100644 --- a/test/date_range_test.rb +++ b/test/date_range_test.rb @@ -107,4 +107,3 @@ end end # inside describe end # top describe - diff --git a/test/hotel_dispatcher_test.rb b/test/hotel_dispatcher_test.rb index 62158e6cb..12588f2f1 100644 --- a/test/hotel_dispatcher_test.rb +++ b/test/hotel_dispatcher_test.rb @@ -8,11 +8,10 @@ def build_test_dispatcher describe "Initializer" do it "is an instance of HotelDispatcher" do - dispatcher = build_test_dispatcher - expect(dispatcher).must_be_kind_of HotelManager + hotel_dispatcher = build_test_dispatcher + expect(hotel_dispatcher).must_be_kind_of HotelManager end - end - describe "Instance of Hotel Dispatcher" do + it "can makes all rooms" do hotel_dispatcher = build_test_dispatcher room_array = hotel_dispatcher.make_rooms @@ -20,17 +19,40 @@ def build_test_dispatcher end end - describe "Checks room for availablility" do + describe "Can create a reservation" do let(:check_in_date) { Date.new(2001, 2, 3) } let(:check_out_date) { Date.new(2001, 2, 6) } - it "takes in the start and end date" do + it "Return true if reservation is can be created" do hotel_dispatcher = build_test_dispatcher - room_check = hotel_dispatcher.check_room_available?(check_in_date, check_out_date) - expect(room_check).must_equal true + hotel_dispatcher.make_rooms + new_res = hotel_dispatcher.create_reservation(check_in_date, check_out_date) + expect(new_res).must_equal true end - it "takes in the start and end date" do + + it "Raises error if no reservation available " do hotel_dispatcher = build_test_dispatcher - room_check = hotel_dispatcher.check_room_available?(check_in_date, check_out_date) - expect(room_check).must_equal true + hotel_dispatcher.make_rooms + new_res = hotel_dispatcher.create_reservation(check_in_date, check_out_date) + expect { new_res.create_reservation }.must_raise NoMethodError + end + end + + + # describe "Can create a Hotel room block" do + # let(:check_in_date) { Date.new(2001, 2, 3) } + # let(:check_out_date) { Date.new(2001, 2, 6) } + # it "Return true if reservation is can be created" do + # hotel_dispatcher = build_test_dispatcher + # hotel_dispatcher.make_rooms + # new_res = hotel_dispatcher.create_room_block(check_in_date, check_out_date) + # expect(new_res).must_equal true + # end + + # it "Raises error if no reservation available " do + # hotel_dispatcher = build_test_dispatcher + # hotel_dispatcher.make_rooms + # new_res = hotel_dispatcher.create_reservation(5,check_in_date, check_out_date) + # expect { new_res.create_reservation }.must_raise NoMethodError + # end end end diff --git a/test/reservation_test.rb b/test/reservation_test.rb index e3c5dd094..1c65a09c5 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -6,12 +6,12 @@ let(:check_in_date) { Date.new(2001, 2, 3) } let(:check_out_date) { Date.new(2001, 2, 6) } it "is an instance of Reservation" do - res = Reservation.new(Room.new(1),check_in_date, check_out_date) + res = Reservation.new(Room.new(1), check_in_date, check_out_date) expect(res).must_be_kind_of Reservation end it "takes in the date" do - res = Reservation.new(Room.new(1),check_in_date, check_out_date) + res = Reservation.new(Room.new(1), check_in_date, check_out_date) expect(res.total_cost_for_stay).must_equal 600 end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 73e02cfd2..37d675803 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,5 +1,6 @@ -require 'simplecov' +require "simplecov" SimpleCov.start + require "minitest" require "minitest/autorun" require "minitest/reporters" From 08e0d576b5722134a3a043c1b47fa2393b6d9da7 Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Sun, 8 Mar 2020 17:51:50 -0700 Subject: [PATCH 13/15] Broken test on line 42 of Hotel Dispatch --- lib/hotel_dispatcher.rb | 4 ++-- test/hotel_dispatcher_test.rb | 19 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb index 06790a58e..416705a1f 100644 --- a/lib/hotel_dispatcher.rb +++ b/lib/hotel_dispatcher.rb @@ -80,7 +80,7 @@ def create_reservation(check_in_date, check_out_date) # using the make rooms we def create_room_block(room_ids, check_in_date, check_out_date, room_rate) requested_date_range = Date_Range.new(check_in_date, check_out_date) - room_ids.each do |room_id| + (1..room_ids).each do |room_id| room = @rooms[room_id] if room.check_overlap_with_room_reservations(requested_date_range) raise Exception.new "One of the rooms in the hotel block requested is unavailable" @@ -88,7 +88,7 @@ def create_room_block(room_ids, check_in_date, check_out_date, room_rate) end # Go to each room and add the reservation for the given date range - room_ids.each do |room_id| + (1..room_ids).each do |room_id| room = @rooms[room_id] room.create_new_reservation(check_in_date, check_out_date, true) end diff --git a/test/hotel_dispatcher_test.rb b/test/hotel_dispatcher_test.rb index 12588f2f1..7f539e19a 100644 --- a/test/hotel_dispatcher_test.rb +++ b/test/hotel_dispatcher_test.rb @@ -38,15 +38,16 @@ def build_test_dispatcher end - # describe "Can create a Hotel room block" do - # let(:check_in_date) { Date.new(2001, 2, 3) } - # let(:check_out_date) { Date.new(2001, 2, 6) } - # it "Return true if reservation is can be created" do - # hotel_dispatcher = build_test_dispatcher - # hotel_dispatcher.make_rooms - # new_res = hotel_dispatcher.create_room_block(check_in_date, check_out_date) - # expect(new_res).must_equal true - # end + describe "Can create a Hotel room block" do + let(:check_in_date) { Date.new(2001, 2, 3) } + let(:check_out_date) { Date.new(2001, 2, 6) } + it "Raise expection if reservation is can't be created" do + hotel_dispatcher = build_test_dispatcher + room_ids = 5 + hotel_dispatcher.make_rooms + new_res = hotel_dispatcher.create_room_block(room_ids,check_in_date, check_out_date, 150) + expect {new_res.create_room_block}.must_raise NoMethodError + end # it "Raises error if no reservation available " do # hotel_dispatcher = build_test_dispatcher From b2c99a5048dc6e5292522688eb17959bca7392c5 Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Mon, 9 Mar 2020 08:24:57 -0700 Subject: [PATCH 14/15] Only 86% coverage --- lib/hotel_block.rb | 7 +++--- lib/hotel_dispatcher.rb | 17 +++++--------- lib/reservation.rb | 3 --- test/hotel_block_test.rb | 28 +++++++++++++++++++++++ test/hotel_dispatcher_test.rb | 42 ++++++++++++++++++----------------- test/room_test.rb | 26 ++++++++++------------ test/test_helper.rb | 4 ++++ 7 files changed, 75 insertions(+), 52 deletions(-) create mode 100644 test/hotel_block_test.rb diff --git a/lib/hotel_block.rb b/lib/hotel_block.rb index d020ec66a..2f834945a 100644 --- a/lib/hotel_block.rb +++ b/lib/hotel_block.rb @@ -1,13 +1,14 @@ -class HotelBlock +class Hotel_Block < Date_Range attr_accessor :room_info, :check_in_date, :check_out_date, :room_rate def initialize(room_ids, check_in_date, check_out_date, room_rate, hotel_block_id) # room_info maps a room_id to whether it has been occupied or not. So to begin with, all rooms in a hotel block are not occupied. They are set to a value of false, indicating that they are not occupied. - @room_info = Hash[*room_ids.collect { |room_id| [room_id, false] }.flatten] + @room_info = + h = Hash[*room_ids.collect { |room_ids| [room_ids, (false)] }.flatten] @check_in_date = check_in_date @check_out_date = check_out_date @room_rate = room_rate - @hotel_block_id = @hotel_block_id + @hotel_block_id = hotel_block_id end def check_rooms_available diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb index 416705a1f..0b4cb3cbc 100644 --- a/lib/hotel_dispatcher.rb +++ b/lib/hotel_dispatcher.rb @@ -48,6 +48,7 @@ def find_all_resevations all_res << res end end + all_res << hotel_blocks return all_res end @@ -80,7 +81,7 @@ def create_reservation(check_in_date, check_out_date) # using the make rooms we def create_room_block(room_ids, check_in_date, check_out_date, room_rate) requested_date_range = Date_Range.new(check_in_date, check_out_date) - (1..room_ids).each do |room_id| + (1..room_ids).each do |room_id| room = @rooms[room_id] if room.check_overlap_with_room_reservations(requested_date_range) raise Exception.new "One of the rooms in the hotel block requested is unavailable" @@ -88,23 +89,15 @@ def create_room_block(room_ids, check_in_date, check_out_date, room_rate) end # Go to each room and add the reservation for the given date range + def add_reservation (room_info) (1..room_ids).each do |room_id| room = @rooms[room_id] room.create_new_reservation(check_in_date, check_out_date, true) + end end # Create the HotelBlock object and add it to the list of hotel_blocks - hotel_blocks << HotelBlock.new(room_ids, check_in_date, check_out_date, room_rate, @hotel_block_counter) + hotel_blocks << Hotel_Block.new(room_ids, check_in_date, check_out_date, room_rate, @hotel_block_counter) @hotel_block_counter += 1 end end - -# - For this wave, any room can be reserved at any time, and you don't need to check whether reservations conflict with each other (this will come in wave 2!) - -# - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation - -# check all rooms booked dates (if date in array unavilable) -# for each room.all loop -# return aval room or no room aval -# - When reserving a room, the user provides only the start and end dates - the library should determine which room to use for the reservation -# - I can view a list of rooms that are not reserved for a given date range, so that I can see all available rooms for that day diff --git a/lib/reservation.rb b/lib/reservation.rb index b0f25ef3d..2a9760b99 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -16,9 +16,6 @@ def initialize(room_num, check_in_date, check_out_date, hotel_block_reservation def total_cost_for_stay number_of_nights? * 200 end - - def check_overlap(checkin, checkout) - end end # take in the Room class add_res method, converts date range into number of nights, each night * $200 less the one night diff --git a/test/hotel_block_test.rb b/test/hotel_block_test.rb new file mode 100644 index 000000000..14a96317e --- /dev/null +++ b/test/hotel_block_test.rb @@ -0,0 +1,28 @@ +require_relative "test_helper" + +describe "Instanitates a new Hotel Block" do + let(:room_ids) { 5 } + let(:room_info) { 5 } + let(:hotel_block_id) { 101 } + let(:room_rate) { 150 } + let(:check_in_date) { Date.new(2001, 2, 1) } + let(:check_out_date) { Date.new(2001, 2, 3) } + + it "Initialize Hotel Block" do + room_ids = [1, 2, 3, 4, 5] + new_hotel_block = Hotel_Block.new(room_ids, check_in_date, check_out_date, room_rate, hotel_block_id) + expect(new_hotel_block).must_be_kind_of Hotel_Block + end + + it "Correctly show Check room availablity as occupied" do + room_ids = [1, 2, 3, 4, 5] + new_hotel_block = Hotel_Block.new(room_ids, check_in_date, check_out_date, room_rate, hotel_block_id) + expect(new_hotel_block.check_rooms_available).must_equal true + end + + it "Correctly show Check room availablity as occupied" do + room_ids = [1, 2, 3, 4, 5] + new_hotel_block = Hotel_Block.new(room_ids, check_in_date, check_out_date, room_rate, hotel_block_id) + expect(new_hotel_block.check_rooms_available).must_equal true + end +end diff --git a/test/hotel_dispatcher_test.rb b/test/hotel_dispatcher_test.rb index 7f539e19a..9ebb05fbe 100644 --- a/test/hotel_dispatcher_test.rb +++ b/test/hotel_dispatcher_test.rb @@ -20,8 +20,13 @@ def build_test_dispatcher end describe "Can create a reservation" do + let(:room_ids) { 5 } + let(:room_info) { 5 } + let(:hotel_block_id) { 101 } + let(:room_rate) { 150 } let(:check_in_date) { Date.new(2001, 2, 3) } let(:check_out_date) { Date.new(2001, 2, 6) } + it "Return true if reservation is can be created" do hotel_dispatcher = build_test_dispatcher hotel_dispatcher.make_rooms @@ -36,24 +41,21 @@ def build_test_dispatcher expect { new_res.create_reservation }.must_raise NoMethodError end end - - - describe "Can create a Hotel room block" do - let(:check_in_date) { Date.new(2001, 2, 3) } - let(:check_out_date) { Date.new(2001, 2, 6) } - it "Raise expection if reservation is can't be created" do - hotel_dispatcher = build_test_dispatcher - room_ids = 5 - hotel_dispatcher.make_rooms - new_res = hotel_dispatcher.create_room_block(room_ids,check_in_date, check_out_date, 150) - expect {new_res.create_room_block}.must_raise NoMethodError - end - - # it "Raises error if no reservation available " do - # hotel_dispatcher = build_test_dispatcher - # hotel_dispatcher.make_rooms - # new_res = hotel_dispatcher.create_reservation(5,check_in_date, check_out_date) - # expect { new_res.create_reservation }.must_raise NoMethodError - # end - end end +# describe "Can create a Hotel room block" do +# let(:check_in_date) { Date.new(2001, 2, 3) } +# let(:check_out_date) { Date.new(2001, 2, 6) } + +# it "Checks the check room method block" do +# room_ids = [1, 2, 3, 4, 5] +# hotel_dispatcher = build_test_dispatcher +# hotel_dispatcher.make_rooms +# new_res = hotel_dispatcher.create_room_block(room_ids, check_in_date, check_out_date, room_rate) +# expect { new_res.create_room_block }.must_raise NoMethodError +# end + +# it "Raise expection if reservation is can't be created" do +# hotel_dispatcher = build_test_dispatcher +# hotel_dispatcher.create_room_block(3, check_in_date, check_out_date, 150) +# expect { new_res.create_room_block }.must_raise NoMethodError +# end diff --git a/test/room_test.rb b/test/room_test.rb index 7c5b752dd..304bdf77b 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -2,6 +2,9 @@ describe "Room class" do describe "Initializer" do + let(:check_in_date) { Date.new(2001, 2, 1) } + let(:check_out_date) { Date.new(2001, 2, 3) } + let(:date_range_1) { Date_Range.new(check_in_date, check_out_date) } it "is an instance of Room" do test_room = Room.new(1) expect(test_room).must_be_kind_of Room @@ -11,22 +14,17 @@ room = Room.new(1) all_res = [] 5.times do |index| - all_res << room.create_new_reservation(Date.today, Date.today + 3) + all_res << room.create_new_reservation(Date.today, Date.today + 3, hotel_block_reservation = false) end expect(all_res.length).must_equal 5 end + + it "Can check overlap within rooms" do + room = Room.new(1) + requested_date_range = Date_Range.new(check_in_date, check_out_date) + room.create_new_reservation(check_in_date, check_out_date, hotel_block_reservation = false) + all_res = room.check_overlap_with_room_reservations(requested_date_range) + expect(all_res).must_equal false + end end end - -# it "can create a new reservation" do -# #Arrange -# room = Room.new(1) -# reservation = room.create_new_reservation -#Act -#Assert -# it "can create a new reservation" do -# room = Room.new(1) -# reservation = room.add_reservation(Date.today, Date.today + 3) -# expect(room.reservations.length).must_equal 1 -# expect(room.reservations).must_include reservation -# end diff --git a/test/test_helper.rb b/test/test_helper.rb index 37d675803..952c0ff52 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -10,3 +10,7 @@ # require_relative your lib files here! # test/test_helper.rb +# require_relative "/lib/hotel_block.rb" +# require_relative "/lib/date_range.rb" +# require_relative "/lib/hotel_dispatch.rb" +# require_relative "/lib/reservation.rb" From fde6c481a979b941e087ad96ff74d9287df6518c Mon Sep 17 00:00:00 2001 From: Shonda860 Date: Tue, 10 Mar 2020 18:46:04 -0700 Subject: [PATCH 15/15] Added test for hotel dispatcher - Check_rooms and add res --- lib/hotel_dispatcher.rb | 23 ++++++------- test/hotel_block_test.rb | 3 +- test/hotel_dispatcher_test.rb | 64 ++++++++++++++++++++++++----------- 3 files changed, 57 insertions(+), 33 deletions(-) diff --git a/lib/hotel_dispatcher.rb b/lib/hotel_dispatcher.rb index 0b4cb3cbc..363b0a8a6 100644 --- a/lib/hotel_dispatcher.rb +++ b/lib/hotel_dispatcher.rb @@ -6,6 +6,7 @@ require_relative "hotel_block" class HotelManager < Date_Range + attr_reader :rooms attr_accessor :reservations def initialize @@ -33,7 +34,7 @@ def check_room_available?(check_in_date, check_out_date) date_range = Date_Range.new(check_in_date, check_out_date) @rooms.each do |room| # If no res has any overlap return true # - if !room.check_overlap_with_room_reservations(date_range) + if room.check_overlap_with_room_reservations(date_range) return true end end @@ -48,7 +49,7 @@ def find_all_resevations all_res << res end end - all_res << hotel_blocks + all_res << @hotel_blocks return all_res end @@ -68,7 +69,6 @@ def create_reservation(check_in_date, check_out_date) return true end end - # # Raise exception as no room is available during the requested date_range. raise Exception.new "There are no rooms available for this date range" end @@ -81,23 +81,22 @@ def create_reservation(check_in_date, check_out_date) # using the make rooms we def create_room_block(room_ids, check_in_date, check_out_date, room_rate) requested_date_range = Date_Range.new(check_in_date, check_out_date) - (1..room_ids).each do |room_id| + room_ids.each do |room_id| room = @rooms[room_id] - if room.check_overlap_with_room_reservations(requested_date_range) + if !room.check_overlap_with_room_reservations(requested_date_range) raise Exception.new "One of the rooms in the hotel block requested is unavailable" end end # Go to each room and add the reservation for the given date range - def add_reservation (room_info) - (1..room_ids).each do |room_id| - room = @rooms[room_id] - room.create_new_reservation(check_in_date, check_out_date, true) - end - end + # room_ids.each do |room_id| + # room = @rooms[room_id] + # room.create_new_reservation(check_in_date, check_out_date, true) + # end + # Create the HotelBlock object and add it to the list of hotel_blocks - hotel_blocks << Hotel_Block.new(room_ids, check_in_date, check_out_date, room_rate, @hotel_block_counter) + @hotel_blocks << Hotel_Block.new(room_ids, check_in_date, check_out_date, room_rate, @hotel_block_counter) @hotel_block_counter += 1 end end diff --git a/test/hotel_block_test.rb b/test/hotel_block_test.rb index 14a96317e..0082cac85 100644 --- a/test/hotel_block_test.rb +++ b/test/hotel_block_test.rb @@ -23,6 +23,7 @@ it "Correctly show Check room availablity as occupied" do room_ids = [1, 2, 3, 4, 5] new_hotel_block = Hotel_Block.new(room_ids, check_in_date, check_out_date, room_rate, hotel_block_id) - expect(new_hotel_block.check_rooms_available).must_equal true + new_hotel_block.room_info = {1=> true,2=> true,3=> true,4=> true,5=> true} + expect(new_hotel_block.check_rooms_available).must_equal false end end diff --git a/test/hotel_dispatcher_test.rb b/test/hotel_dispatcher_test.rb index 9ebb05fbe..cb0c3e273 100644 --- a/test/hotel_dispatcher_test.rb +++ b/test/hotel_dispatcher_test.rb @@ -36,26 +36,50 @@ def build_test_dispatcher it "Raises error if no reservation available " do hotel_dispatcher = build_test_dispatcher - hotel_dispatcher.make_rooms - new_res = hotel_dispatcher.create_reservation(check_in_date, check_out_date) - expect { new_res.create_reservation }.must_raise NoMethodError + hotel_dispatcher.rooms.each do |room| + room.create_new_reservation(Date.today, Date.today + 3) + end + expect { new_res = hotel_dispatcher.create_reservation(Date.today, Date.today + 3) }.must_raise Exception + end + end + + describe "Can create a Hotel room block??????" do + let(:check_in_date) { Date.new(2001, 2, 3) } + let(:check_out_date) { Date.new(2001, 2, 6) } + it "Raise expection if reservation is can't be created" do + hotel_dispatcher = build_test_dispatcher + room_ids = [1, 2, 3] + hotel_dispatcher.rooms.each do |room| + room.create_new_reservation(Date.today, Date.today + 3) + end + expect { new_res = hotel_dispatcher.create_room_block(room_ids, Date.today, Date.today + 3, 150) }.must_raise Exception + end + # it "Creates a successfull room block" do + + # end + + it "Check room availablity " do + hotel_dispatcher = build_test_dispatcher + + hotel_dispatcher.rooms.each do |room| + room.create_new_reservation(Date.today, Date.today + 3, hotel_block_reservation = false) + end + results = hotel_dispatcher.check_room_available?(Date.today, Date.today + 3) + expect(results).must_equal false + end + end + describe " Find all res" do + it "finds all res" do + hotel_dispatcher = build_test_dispatcher + all_res = [] + hotel_dispatcher.rooms.each do |room| + all_res << room.create_new_reservation(Date.today, Date.today + 3, hotel_block_reservation = false) + end + find_all = hotel_dispatcher.find_all_resevations + all_res.each do |res| + expect(find_all).must_include res + end end end end -# describe "Can create a Hotel room block" do -# let(:check_in_date) { Date.new(2001, 2, 3) } -# let(:check_out_date) { Date.new(2001, 2, 6) } - -# it "Checks the check room method block" do -# room_ids = [1, 2, 3, 4, 5] -# hotel_dispatcher = build_test_dispatcher -# hotel_dispatcher.make_rooms -# new_res = hotel_dispatcher.create_room_block(room_ids, check_in_date, check_out_date, room_rate) -# expect { new_res.create_room_block }.must_raise NoMethodError -# end - -# it "Raise expection if reservation is can't be created" do -# hotel_dispatcher = build_test_dispatcher -# hotel_dispatcher.create_room_block(3, check_in_date, check_out_date, 150) -# expect { new_res.create_room_block }.must_raise NoMethodError -# end +