From 38671be201e02934af21fe9931d0ccb7a51c50f3 Mon Sep 17 00:00:00 2001 From: Yieni Date: Mon, 2 Mar 2020 14:11:30 -0800 Subject: [PATCH 01/30] setting up file structures --- lib/calendar.rb | 5 +++++ lib/front_desk.rb | 4 ++++ lib/reservations.rb | 4 ++++ lib/rooms.rb | 4 ++++ test/calendar_test.rb | 5 +++++ test/front_desk_test.rb | 5 +++++ test/reservations_test.rb | 5 +++++ test/rooms_test.rb | 5 +++++ test/test_helper.rb | 8 ++++++++ 9 files changed, 45 insertions(+) create mode 100644 lib/calendar.rb create mode 100644 lib/front_desk.rb create mode 100644 lib/reservations.rb create mode 100644 lib/rooms.rb create mode 100644 test/calendar_test.rb create mode 100644 test/front_desk_test.rb create mode 100644 test/reservations_test.rb create mode 100644 test/rooms_test.rb diff --git a/lib/calendar.rb b/lib/calendar.rb new file mode 100644 index 000000000..9dfe5f405 --- /dev/null +++ b/lib/calendar.rb @@ -0,0 +1,5 @@ +module Hotel + class Calendar + + end +end \ No newline at end of file diff --git a/lib/front_desk.rb b/lib/front_desk.rb new file mode 100644 index 000000000..6d412f01d --- /dev/null +++ b/lib/front_desk.rb @@ -0,0 +1,4 @@ +module Hotel + class FrontDesk + end +end diff --git a/lib/reservations.rb b/lib/reservations.rb new file mode 100644 index 000000000..dccac654a --- /dev/null +++ b/lib/reservations.rb @@ -0,0 +1,4 @@ +module Hotel + class Reservations + end +end \ No newline at end of file diff --git a/lib/rooms.rb b/lib/rooms.rb new file mode 100644 index 000000000..1ccb5e198 --- /dev/null +++ b/lib/rooms.rb @@ -0,0 +1,4 @@ +module Hotel + class Rooms + end +end diff --git a/test/calendar_test.rb b/test/calendar_test.rb new file mode 100644 index 000000000..a234c4fe8 --- /dev/null +++ b/test/calendar_test.rb @@ -0,0 +1,5 @@ +require_relative 'test_helper' + +describe "calendar" do + +end \ No newline at end of file diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb new file mode 100644 index 000000000..df79463c1 --- /dev/null +++ b/test/front_desk_test.rb @@ -0,0 +1,5 @@ +require_relative 'test_helper' + +describe "front desk" do + +end \ No newline at end of file diff --git a/test/reservations_test.rb b/test/reservations_test.rb new file mode 100644 index 000000000..f4bd0302a --- /dev/null +++ b/test/reservations_test.rb @@ -0,0 +1,5 @@ +require_relative 'test_helper' + +describe "reservations" do + +end \ No newline at end of file diff --git a/test/rooms_test.rb b/test/rooms_test.rb new file mode 100644 index 000000000..b2b46d901 --- /dev/null +++ b/test/rooms_test.rb @@ -0,0 +1,5 @@ +require_relative 'test_helper' + +describe "rooms" do + +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index c3a7695cf..7b2239630 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -2,7 +2,15 @@ require "minitest" require "minitest/autorun" require "minitest/reporters" +require "simplecov" +SimpleCov.start do + add_filter 'test/' +end Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # require_relative your lib files here! +require_relative "../lib/calendar" +require_relative "../lib/front_desk" +require_relative "../lib/reservations" +require_relative "../lib/rooms" \ No newline at end of file From 77c03901a80bd3ba67190bc8b40ad0f553125969 Mon Sep 17 00:00:00 2001 From: Yieni Date: Mon, 2 Mar 2020 15:32:09 -0800 Subject: [PATCH 02/30] initialized rooms and wrote test --- lib/calendar.rb | 2 ++ lib/front_desk.rb | 15 +++++++++++++++ lib/reservations.rb | 4 +++- lib/rooms.rb | 22 +++++++++++++++++++++- test/front_desk_test.rb | 3 +++ test/rooms_test.rb | 11 ++++++++++- 6 files changed, 54 insertions(+), 3 deletions(-) diff --git a/lib/calendar.rb b/lib/calendar.rb index 9dfe5f405..80ef7ab77 100644 --- a/lib/calendar.rb +++ b/lib/calendar.rb @@ -1,3 +1,5 @@ +require 'date' + module Hotel class Calendar diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 6d412f01d..8f2e5bd90 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -1,4 +1,19 @@ +require 'date' + module Hotel class FrontDesk + attr_accessor :rooms, :reservations, :calendar + + def initialize + @rooms = [] + + (1..20).each do |room_num| + new_room = Room.new(room_number: room_num, cost: 200, status: :available) + @rooms << new_room + end + + @reservations + @calendar + end end end diff --git a/lib/reservations.rb b/lib/reservations.rb index dccac654a..7ea71bd7a 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -1,4 +1,6 @@ +require 'date' + module Hotel - class Reservations + class Reservation end end \ No newline at end of file diff --git a/lib/rooms.rb b/lib/rooms.rb index 1ccb5e198..99f140455 100644 --- a/lib/rooms.rb +++ b/lib/rooms.rb @@ -1,4 +1,24 @@ +require 'date' + module Hotel - class Rooms + class Room + attr_reader :room_number, :rooms + attr_accessor :cost, :status, :reservations + + def initialize(room_number:, cost:, status: :available, reservations: nil) + @room_number = room_number + @cost = 200 + + if status == :available || status == :unavailable + @status = status + else + raise ArgumentError.new("Room status must be availble or unavailable") + end + + @reservations = [] + + end + + end end diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index df79463c1..81fb7148b 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -1,5 +1,8 @@ require_relative 'test_helper' describe "front desk" do + it "stores all 20 hotel rooms" do + expect(Hotel::FrontDesk.rooms.count).must_equal 20 + end end \ No newline at end of file diff --git a/test/rooms_test.rb b/test/rooms_test.rb index b2b46d901..7d94556e6 100644 --- a/test/rooms_test.rb +++ b/test/rooms_test.rb @@ -1,5 +1,14 @@ require_relative 'test_helper' describe "rooms" do - + describe "initializing room" do + it "creates an instance of a room" do + room = Hotel::Room.new(room_number: 1, cost: 200) + expect(room).must_be_instance_of Hotel::Room + end + + it "raises an ArgumentError if status is not available or unavailable" do + + end + end end \ No newline at end of file From ddde6bfe94d2072c5562cc8e4d91b588a1c797e9 Mon Sep 17 00:00:00 2001 From: Yieni Date: Mon, 2 Mar 2020 16:54:19 -0800 Subject: [PATCH 03/30] write initial reservations test and code --- lib/front_desk.rb | 9 ++++++--- lib/reservations.rb | 9 +++++++++ lib/rooms.rb | 2 +- test/reservations_test.rb | 5 +++++ test/rooms_test.rb | 10 +++++++--- 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 8f2e5bd90..2f17eab68 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -3,14 +3,17 @@ module Hotel class FrontDesk attr_accessor :rooms, :reservations, :calendar - - def initialize - @rooms = [] + def self.rooms + @rooms = [] + (1..20).each do |room_num| new_room = Room.new(room_number: room_num, cost: 200, status: :available) @rooms << new_room end + end + + def initialize @reservations @calendar diff --git a/lib/reservations.rb b/lib/reservations.rb index 7ea71bd7a..dc6662aba 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -2,5 +2,14 @@ module Hotel class Reservation + attr_reader :start_date, :end_date, :room, :id + + def initialize(id:, start_date:, end_date:, room: nil) + @id = id + @start_date = Date.parse(start_date) + @end_date = Date.parse(end_date) + @room = room + end + end end \ No newline at end of file diff --git a/lib/rooms.rb b/lib/rooms.rb index 99f140455..6d93bd833 100644 --- a/lib/rooms.rb +++ b/lib/rooms.rb @@ -15,7 +15,7 @@ def initialize(room_number:, cost:, status: :available, reservations: nil) raise ArgumentError.new("Room status must be availble or unavailable") end - @reservations = [] + @reservations = reservations || [] end diff --git a/test/reservations_test.rb b/test/reservations_test.rb index f4bd0302a..1ceb11e55 100644 --- a/test/reservations_test.rb +++ b/test/reservations_test.rb @@ -1,5 +1,10 @@ require_relative 'test_helper' describe "reservations" do + describe "initialize reservations" do + it "creates an instance of a reservation" do + expect(Hotel::Reservation.new( id: 1, start_date: "3/4/2020", end_date: "3/9/2020")).must_be_instance_of Hotel::Reservation + end + end end \ No newline at end of file diff --git a/test/rooms_test.rb b/test/rooms_test.rb index 7d94556e6..f77da2d28 100644 --- a/test/rooms_test.rb +++ b/test/rooms_test.rb @@ -1,14 +1,18 @@ require_relative 'test_helper' describe "rooms" do + describe "initializing room" do + before do + @room = Hotel::Room.new(room_number: 1, cost: 200) + end + it "creates an instance of a room" do - room = Hotel::Room.new(room_number: 1, cost: 200) - expect(room).must_be_instance_of Hotel::Room + expect(@room).must_be_instance_of Hotel::Room end it "raises an ArgumentError if status is not available or unavailable" do - + expect{Hotel::Room.new(room_number: 1, cost: 200, status: "xyz")}.must_raise ArgumentError end end end \ No newline at end of file From 4c8484446eeed64ee5a5700aab5cb2a070da6668 Mon Sep 17 00:00:00 2001 From: Yieni Date: Mon, 2 Mar 2020 17:24:37 -0800 Subject: [PATCH 04/30] add more initialize tests for reservation --- lib/reservations.rb | 4 +++- test/reservations_test.rb | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index dc6662aba..89552825e 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -8,8 +8,10 @@ def initialize(id:, start_date:, end_date:, room: nil) @id = id @start_date = Date.parse(start_date) @end_date = Date.parse(end_date) + + raise ArgumentError.new("End date must be after start date") if @end_date < @start_date @room = room end end -end \ No newline at end of file +end diff --git a/test/reservations_test.rb b/test/reservations_test.rb index 1ceb11e55..873d754b7 100644 --- a/test/reservations_test.rb +++ b/test/reservations_test.rb @@ -2,8 +2,25 @@ describe "reservations" do describe "initialize reservations" do + before do + @new_reservation = Hotel::Reservation.new( id: 1, start_date: "3/4/2020", end_date: "3/9/2020", room: Hotel::Room.new(room_number: 1, cost: 200)) + end + it "creates an instance of a reservation" do - expect(Hotel::Reservation.new( id: 1, start_date: "3/4/2020", end_date: "3/9/2020")).must_be_instance_of Hotel::Reservation + expect(@new_reservation).must_be_instance_of Hotel::Reservation + end + + it "converts start and end dates to instances of Date class" do + expect(@new_reservation.start_date).must_be_instance_of Date + expect(@new_reservation.end_date).must_be_instance_of Date + end + + it "raises ArgumentError if end date is before start date" do + expect{Hotel::Reservation.new( id: 1, start_date: "3/4/2020", end_date: "3/3/2020")}.must_raise ArgumentError + end + + it "has an attribute of room that is an instance of Room class" do + expect(@new_reservation.room).must_be_instance_of Hotel::Room end end From 776f0e542e0e437d7e0c102761284f807b444ee7 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 11:30:46 -0800 Subject: [PATCH 05/30] changed calendar filename to daterange and rooms file to room --- lib/{calendar.rb => daterange.rb} | 2 +- lib/front_desk.rb | 5 +++-- lib/reservations.rb | 2 ++ lib/room.rb | 20 ++++++++++++++++++++ lib/rooms.rb | 24 ------------------------ 5 files changed, 26 insertions(+), 27 deletions(-) rename lib/{calendar.rb => daterange.rb} (70%) create mode 100644 lib/room.rb delete mode 100644 lib/rooms.rb diff --git a/lib/calendar.rb b/lib/daterange.rb similarity index 70% rename from lib/calendar.rb rename to lib/daterange.rb index 80ef7ab77..9da88c393 100644 --- a/lib/calendar.rb +++ b/lib/daterange.rb @@ -1,7 +1,7 @@ require 'date' module Hotel - class Calendar + class DateRange end end \ No newline at end of file diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 2f17eab68..9b04d40b4 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -8,15 +8,16 @@ def self.rooms @rooms = [] (1..20).each do |room_num| - new_room = Room.new(room_number: room_num, cost: 200, status: :available) + new_room = Room.new(room_number: room_num, cost: 200) @rooms << new_room end end def initialize - @reservations @calendar end + + end end diff --git a/lib/reservations.rb b/lib/reservations.rb index 89552825e..4b26f526e 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -13,5 +13,7 @@ def initialize(id:, start_date:, end_date:, room: nil) @room = room end + + end end diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..d9ed36313 --- /dev/null +++ b/lib/room.rb @@ -0,0 +1,20 @@ +require 'date' + +module Hotel + class Room + attr_reader :room_number + attr_accessor :cost, :reservations + + def initialize(room_number:, cost:, reservations: nil) + @room_number = room_number + + raise ArgumentError.new("There are only 20 rooms") if room_number < 1 || room_number > 20 + + @cost = 200 + @reservations = reservations || [] + + end + + + end +end diff --git a/lib/rooms.rb b/lib/rooms.rb deleted file mode 100644 index 6d93bd833..000000000 --- a/lib/rooms.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'date' - -module Hotel - class Room - attr_reader :room_number, :rooms - attr_accessor :cost, :status, :reservations - - def initialize(room_number:, cost:, status: :available, reservations: nil) - @room_number = room_number - @cost = 200 - - if status == :available || status == :unavailable - @status = status - else - raise ArgumentError.new("Room status must be availble or unavailable") - end - - @reservations = reservations || [] - - end - - - end -end From 0d10b72275e333d3d9609618eb0e223597ffdf67 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 11:33:37 -0800 Subject: [PATCH 06/30] change calendar_test.rb to daterange_test.rb --- test/{calendar_test.rb => daterange_test.rb} | 2 +- test/rooms_test.rb | 5 +++-- test/test_helper.rb | 12 +++++++----- 3 files changed, 11 insertions(+), 8 deletions(-) rename test/{calendar_test.rb => daterange_test.rb} (61%) diff --git a/test/calendar_test.rb b/test/daterange_test.rb similarity index 61% rename from test/calendar_test.rb rename to test/daterange_test.rb index a234c4fe8..f26e596bd 100644 --- a/test/calendar_test.rb +++ b/test/daterange_test.rb @@ -1,5 +1,5 @@ require_relative 'test_helper' -describe "calendar" do +describe "daterange" do end \ No newline at end of file diff --git a/test/rooms_test.rb b/test/rooms_test.rb index f77da2d28..2cf067e3d 100644 --- a/test/rooms_test.rb +++ b/test/rooms_test.rb @@ -11,8 +11,9 @@ expect(@room).must_be_instance_of Hotel::Room end - it "raises an ArgumentError if status is not available or unavailable" do - expect{Hotel::Room.new(room_number: 1, cost: 200, status: "xyz")}.must_raise ArgumentError + it "raises an arguement error if room number is less than 1 or more than 20" do + expect{Hotel::Room.new(room_number: 21, cost: 200)}.must_raise ArgumentError + expect{Hotel::Room.new(room_number: -1, cost: 200)}.must_raise ArgumentError end end end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 7b2239630..f2a98eec5 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,16 +1,18 @@ # Add simplecov -require "minitest" -require "minitest/autorun" -require "minitest/reporters" require "simplecov" SimpleCov.start do add_filter 'test/' end +require "minitest" +require "minitest/autorun" +require "minitest/reporters" +require "minitest/skip_dsl" + Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # require_relative your lib files here! -require_relative "../lib/calendar" +require_relative "../lib/daterange" require_relative "../lib/front_desk" require_relative "../lib/reservations" -require_relative "../lib/rooms" \ No newline at end of file +require_relative "../lib/room" \ No newline at end of file From 4048b4f6d7cae708dcc914e062d09a38d2be2bed Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 11:53:16 -0800 Subject: [PATCH 07/30] fixed various bugs from changing filenames --- test/daterange_test.rb | 7 ++++++- test/reservations_test.rb | 11 +++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/test/daterange_test.rb b/test/daterange_test.rb index f26e596bd..cd8884724 100644 --- a/test/daterange_test.rb +++ b/test/daterange_test.rb @@ -1,5 +1,10 @@ require_relative 'test_helper' -describe "daterange" do +describe "DateRange" do + describe "initialize" do + it "raises ArgumentError if end date is before start date" do + expect{Hotel::DateRange.new(start_date: "3/4/2020", end_date: "3/3/2020")}.must_raise ArgumentError + end + end end \ No newline at end of file diff --git a/test/reservations_test.rb b/test/reservations_test.rb index 873d754b7..91ac9f3f2 100644 --- a/test/reservations_test.rb +++ b/test/reservations_test.rb @@ -3,20 +3,15 @@ describe "reservations" do describe "initialize reservations" do before do - @new_reservation = Hotel::Reservation.new( id: 1, start_date: "3/4/2020", end_date: "3/9/2020", room: Hotel::Room.new(room_number: 1, cost: 200)) + @new_reservation = Hotel::Reservation.new( id: 1, date_range: Hotel::DateRange.new(start_date: "3/1/2020", end_date: "3/4/2020"), room: Hotel::Room.new(room_number: 1, cost: 200)) end it "creates an instance of a reservation" do expect(@new_reservation).must_be_instance_of Hotel::Reservation end - it "converts start and end dates to instances of Date class" do - expect(@new_reservation.start_date).must_be_instance_of Date - expect(@new_reservation.end_date).must_be_instance_of Date - end - - it "raises ArgumentError if end date is before start date" do - expect{Hotel::Reservation.new( id: 1, start_date: "3/4/2020", end_date: "3/3/2020")}.must_raise ArgumentError + it "has an attribute of date_range that is an instance of Date_Range class" do + expect(@new_reservation.date_range).must_be_instance_of Hotel::DateRange end it "has an attribute of room that is an instance of Room class" do From d17df05c45c782c0fa02be08cfcf2538892a29a5 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 13:28:10 -0800 Subject: [PATCH 08/30] refactored code that shows all rooms --- test/front_desk_test.rb | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 81fb7148b..49308c2e3 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -1,8 +1,37 @@ require_relative 'test_helper' describe "front desk" do - it "stores all 20 hotel rooms" do - expect(Hotel::FrontDesk.rooms.count).must_equal 20 + describe "self.rooms" do + + before do + @front_desk = Hotel::FrontDesk.new + end + + it "stores all 20 hotel rooms" do + expect(@front_desk.rooms.count).must_equal 20 + end + + it "returns an array of the 20 rooms" do + expect(@front_desk.rooms).must_be_instance_of Array + end + + it "stores instances of the Room class inside the array" do + expect(@front_desk.rooms.sample).must_be_instance_of Hotel::Room + expect(@front_desk.rooms.sample).must_be_instance_of Hotel::Room + expect(@front_desk.rooms.sample).must_be_instance_of Hotel::Room + end end - + + # describe "self.find_room" do + # it "finds an instance of a room given the room number" do + # room_number = 4 + # expect(Hotel::FrontDesk.find_room(room_number)).must_be_instance_of Hotel::Room + # end + # end + + # describe "add_reservation" do + # it "" do + + # end + # end end \ No newline at end of file From d2b0176f19871df3b20d19922931febb393c5777 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 13:36:18 -0800 Subject: [PATCH 09/30] add find room method --- lib/front_desk.rb | 32 +++++++++++++++++++++++++------- test/front_desk_test.rb | 16 ++++++++++------ 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 9b04d40b4..9713c36e6 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -1,23 +1,41 @@ require 'date' +require_relative 'room' module Hotel class FrontDesk - attr_accessor :rooms, :reservations, :calendar - - def self.rooms - @rooms = [] + attr_accessor :rooms, :reservations, :date_range + + def initialize + @rooms = [] (1..20).each do |room_num| new_room = Room.new(room_number: room_num, cost: 200) @rooms << new_room end + @reservations = [] + @date_range = [] end - def initialize - @reservations - @calendar + # def add_reservation(date_range, room) + # id = (1...Float::INFINITY) + # @date_range = date_range + # @room = room + # new_reservation = reservations.new(id: id.shift, date_range: date_range, room: room) + # @reservations << new_reservation + # end + + def find_room(room_number) + front_desk = FrontDesk.new + found_room = front_desk.rooms.select {|room| room.room_number == room_number} + return found_room[0] end + # def self.reservations + # @reservations = [] + # return @reservations + # end + + end end diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 49308c2e3..e7b039f48 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -22,12 +22,16 @@ end end - # describe "self.find_room" do - # it "finds an instance of a room given the room number" do - # room_number = 4 - # expect(Hotel::FrontDesk.find_room(room_number)).must_be_instance_of Hotel::Room - # end - # end + describe "find_room" do + before do + @front_desk = Hotel::FrontDesk.new + end + + it "finds an instance of a room given the room number" do + room_number = 4 + expect(@front_desk.find_room(room_number)).must_be_instance_of Hotel::Room + end + end # describe "add_reservation" do # it "" do From e3b8311048d6ef29f45dae6e6fb2bb95465eac17 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 18:12:09 -0800 Subject: [PATCH 10/30] changed date parse to date.new --- lib/date_range.rb | 21 +++++++++++++++++ lib/daterange.rb | 7 ------ lib/front_desk.rb | 24 ++++++++++++++------ lib/reservations.rb | 12 +++------- lib/room.rb | 3 +++ test/daterange_test.rb | 47 +++++++++++++++++++++++++++++++++++++-- test/front_desk_test.rb | 37 ++++++++++++++++++++++++------ test/reservations_test.rb | 3 ++- test/test_helper.rb | 2 +- 9 files changed, 122 insertions(+), 34 deletions(-) create mode 100644 lib/date_range.rb delete mode 100644 lib/daterange.rb diff --git a/lib/date_range.rb b/lib/date_range.rb new file mode 100644 index 000000000..2d31d9c26 --- /dev/null +++ b/lib/date_range.rb @@ -0,0 +1,21 @@ +require 'date' + +module Hotel + class DateRange + attr_reader :start_date, :end_date, :range + + def initialize(start_date:, end_date:) + raise ArgumentError.new("start and end dates must be Date objects") if start_date.class != Date && end_date.class != Date + @start_date = start_date + @end_date = end_date + @range = (@start_date .. @end_date).to_a + raise ArgumentError.new("End date can not be before start date") if @end_date < @start_date + + end + + def overlap?(date_range) + return (self.range & date_range.range).empty? ? "no overlap" : "overlap" + end + + end +end diff --git a/lib/daterange.rb b/lib/daterange.rb deleted file mode 100644 index 9da88c393..000000000 --- a/lib/daterange.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'date' - -module Hotel - class DateRange - - end -end \ No newline at end of file diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 9713c36e6..88e6dabfb 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -1,5 +1,7 @@ require 'date' require_relative 'room' +require_relative 'date_range' +require_relative 'reservations' module Hotel class FrontDesk @@ -16,20 +18,28 @@ def initialize @date_range = [] end - # def add_reservation(date_range, room) - # id = (1...Float::INFINITY) - # @date_range = date_range - # @room = room - # new_reservation = reservations.new(id: id.shift, date_range: date_range, room: room) + # def add_reservation(date_range) + # id = (1..1000).to_a + # @date_range << date_range + # available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.reject{|room| room.reservations.select{|reservation| reservation.date_range == date_range}} + # #the above doesn't validate if a room is booked from 3/1/20-3/5/20 and someone wants to book same room for 3/2/20-3/4/20 + # chosen_room = available_rooms.shift + # new_reservation = Hotel::Reservation.new(id: id.shift, date_range: date_range, room: chosen_room) # @reservations << new_reservation + # #i need to come back and check finish writing this code and it's tests + # chosen_room.add_room_reservation(new_reservation) # end def find_room(room_number) - front_desk = FrontDesk.new - found_room = front_desk.rooms.select {|room| room.room_number == room_number} + found_room = @rooms.select {|room| room.room_number == room_number} return found_room[0] end + # def find_reservation_with(date_range) + # res_w_given_date = @reservations.select {|reservation| reservation.date_range == date_range} + # return res_w_given_date + # end + # def self.reservations # @reservations = [] diff --git a/lib/reservations.rb b/lib/reservations.rb index 4b26f526e..a775d74ee 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -2,18 +2,12 @@ module Hotel class Reservation - attr_reader :start_date, :end_date, :room, :id + attr_reader :date_range, :room, :id - def initialize(id:, start_date:, end_date:, room: nil) + def initialize(id:, date_range:, room: nil) @id = id - @start_date = Date.parse(start_date) - @end_date = Date.parse(end_date) - - raise ArgumentError.new("End date must be after start date") if @end_date < @start_date + @date_range = date_range @room = room end - - - end end diff --git a/lib/room.rb b/lib/room.rb index d9ed36313..846c1939a 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -15,6 +15,9 @@ def initialize(room_number:, cost:, reservations: nil) end + # def add_room_reservation(reservation) + # @reservations << reservation + # end end end diff --git a/test/daterange_test.rb b/test/daterange_test.rb index cd8884724..74a452008 100644 --- a/test/daterange_test.rb +++ b/test/daterange_test.rb @@ -1,10 +1,53 @@ require_relative 'test_helper' +require 'date' describe "DateRange" do - describe "initialize" do + describe "initialize DateRange" do it "raises ArgumentError if end date is before start date" do - expect{Hotel::DateRange.new(start_date: "3/4/2020", end_date: "3/3/2020")}.must_raise ArgumentError + expect{Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 2))}.must_raise ArgumentError end + + it "raises ArgumentError if end date and start date are not Date objects" do + expect{Hotel::DateRange.new(start_date: "March 4, 2020", end_date: "March 2, 2020")}.must_raise ArgumentError + end + + it "creates a range of the start and end dates" do + start_date = Date.new(2020, 3, 4) + end_date = Date.new(2020, 3, 9) + date_range = Hotel::DateRange.new(start_date: start_date, end_date: end_date) + expect(date_range.range).must_equal (start_date..end_date).to_a + end + end + + describe "overlap?" do + before do + @start_date = Date.new(2020, 3, 4) + @end_date = Date.new(2020, 3, 9) + @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) + end + + it "returns true if the date is within the range" do + @date_range2 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 6)) + @date_range3 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 5), end_date: Date.new(2020, 3, 9)) + @date_range4 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 2), end_date: Date.new(2020, 3, 14)) + @date_range5 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 9), end_date: Date.new(2020, 3, 14)) + expect(@date_range.overlap?(@date_range2)).must_equal "overlap" + expect(@date_range.overlap?(@date_range3)).must_equal "overlap" + expect(@date_range.overlap?(@date_range4)).must_equal "overlap" + expect(@date_range.overlap?(@date_range5)).must_equal "overlap" + end + + it "returns false if the date is not within the range" do + @date_range2 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 10), end_date: Date.new(2020, 3, 15)) + @date_range3 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 11), end_date: Date.new(2020, 3, 13)) + @date_range4 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 2), end_date: Date.new(2020, 3, 3)) + @date_range5 = Hotel::DateRange.new(start_date: Date.new(2020, 2, 9), end_date: Date.new(2020, 2, 16)) + expect(@date_range.overlap?(@date_range2)).must_equal "no overlap" + expect(@date_range.overlap?(@date_range3)).must_equal "no overlap" + expect(@date_range.overlap?(@date_range4)).must_equal "no overlap" + expect(@date_range.overlap?(@date_range5)).must_equal "no overlap" + end + end end \ No newline at end of file diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index e7b039f48..05b364245 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -1,12 +1,13 @@ require_relative 'test_helper' +require_relative '../lib/date_range' describe "front desk" do - describe "self.rooms" do - - before do - @front_desk = Hotel::FrontDesk.new - end + before do + @front_desk = Hotel::FrontDesk.new + end + describe "self.rooms" do + it "stores all 20 hotel rooms" do expect(@front_desk.rooms.count).must_equal 20 end @@ -34,8 +35,30 @@ end # describe "add_reservation" do - # it "" do - + # before do + # @dates = Hotel::DateRange.new(start_date: "3/4/2020", end_date: "3/7/2020") + # @front_desk.add_reservation(@dates) + # end + + # it "adds an id to the reservation" do + # expect(@front_desk.reservations[0].id).must_be_instance_of Integer # end + + # it "adds a an instance of the room class to the reservation" do + # expect(@front_desk.reservations[0].room).must_be_instance_of Hotel::Room + # end + # end + + # describe "find_reservation_with(date_range)" do + # before do + # @dates = Hotel::DateRange.new(start_date: "3/4/2020", end_date: "3/7/2020") + # end + + # it "returns an array of reservations that match the date" do + # expect(@front_desk.find_reservation_with(@date)).must_be_instance_of Array + # expect(@front_desk.find_reservation_with(@date).sample).must_be_instance_of (Hotel::Reservation || nil) + # #make a test where one array will be empty so I can check nil, and another where it will have a reservation + # end + # end end \ No newline at end of file diff --git a/test/reservations_test.rb b/test/reservations_test.rb index 91ac9f3f2..a43b76575 100644 --- a/test/reservations_test.rb +++ b/test/reservations_test.rb @@ -1,9 +1,10 @@ require_relative 'test_helper' +require 'date' describe "reservations" do describe "initialize reservations" do before do - @new_reservation = Hotel::Reservation.new( id: 1, date_range: Hotel::DateRange.new(start_date: "3/1/2020", end_date: "3/4/2020"), room: Hotel::Room.new(room_number: 1, cost: 200)) + @new_reservation = Hotel::Reservation.new( id: 1, date_range: Hotel::DateRange.new(start_date: Date.new(2020, 3, 1), end_date: Date.new(2020, 3, 4)), room: Hotel::Room.new(room_number: 1, cost: 200)) end it "creates an instance of a reservation" do diff --git a/test/test_helper.rb b/test/test_helper.rb index f2a98eec5..af679dbf8 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -12,7 +12,7 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # require_relative your lib files here! -require_relative "../lib/daterange" +require_relative "../lib/date_range" require_relative "../lib/front_desk" require_relative "../lib/reservations" require_relative "../lib/room" \ No newline at end of file From 10cb24b16ed2380f00535e962d4756c853c57694 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 18:17:37 -0800 Subject: [PATCH 11/30] change return of overlap test to true or false --- lib/date_range.rb | 5 ++++- test/daterange_test.rb | 16 ++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 2d31d9c26..b056893dc 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -14,7 +14,10 @@ def initialize(start_date:, end_date:) end def overlap?(date_range) - return (self.range & date_range.range).empty? ? "no overlap" : "overlap" + # if the array of the combined arrays is empty, there is no overlap, so return false + # if the array is not empty, return true + return (self.range & date_range.range).empty? ? false : true + end end diff --git a/test/daterange_test.rb b/test/daterange_test.rb index 74a452008..185f36422 100644 --- a/test/daterange_test.rb +++ b/test/daterange_test.rb @@ -31,10 +31,10 @@ @date_range3 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 5), end_date: Date.new(2020, 3, 9)) @date_range4 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 2), end_date: Date.new(2020, 3, 14)) @date_range5 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 9), end_date: Date.new(2020, 3, 14)) - expect(@date_range.overlap?(@date_range2)).must_equal "overlap" - expect(@date_range.overlap?(@date_range3)).must_equal "overlap" - expect(@date_range.overlap?(@date_range4)).must_equal "overlap" - expect(@date_range.overlap?(@date_range5)).must_equal "overlap" + expect(@date_range.overlap?(@date_range2)).must_equal true + expect(@date_range.overlap?(@date_range3)).must_equal true + expect(@date_range.overlap?(@date_range4)).must_equal true + expect(@date_range.overlap?(@date_range5)).must_equal true end it "returns false if the date is not within the range" do @@ -42,10 +42,10 @@ @date_range3 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 11), end_date: Date.new(2020, 3, 13)) @date_range4 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 2), end_date: Date.new(2020, 3, 3)) @date_range5 = Hotel::DateRange.new(start_date: Date.new(2020, 2, 9), end_date: Date.new(2020, 2, 16)) - expect(@date_range.overlap?(@date_range2)).must_equal "no overlap" - expect(@date_range.overlap?(@date_range3)).must_equal "no overlap" - expect(@date_range.overlap?(@date_range4)).must_equal "no overlap" - expect(@date_range.overlap?(@date_range5)).must_equal "no overlap" + expect(@date_range.overlap?(@date_range2)).must_equal false + expect(@date_range.overlap?(@date_range3)).must_equal false + expect(@date_range.overlap?(@date_range4)).must_equal false + expect(@date_range.overlap?(@date_range5)).must_equal false end end From 159864ae0a261e57cb34e1a68a686669bf1af3f8 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 18:46:02 -0800 Subject: [PATCH 12/30] write nights and add reservation methods --- lib/date_range.rb | 5 +++++ lib/front_desk.rb | 20 +++++++++----------- lib/room.rb | 6 +++--- test/daterange_test.rb | 11 +++++++++++ test/front_desk_test.rb | 34 ++++++++++++++++++++++------------ 5 files changed, 50 insertions(+), 26 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index b056893dc..f8fcb79ec 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -20,5 +20,10 @@ def overlap?(date_range) end + def nights + return @range.count - 1 + end + + end end diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 88e6dabfb..1337816d3 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -18,17 +18,15 @@ def initialize @date_range = [] end - # def add_reservation(date_range) - # id = (1..1000).to_a - # @date_range << date_range - # available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.reject{|room| room.reservations.select{|reservation| reservation.date_range == date_range}} - # #the above doesn't validate if a room is booked from 3/1/20-3/5/20 and someone wants to book same room for 3/2/20-3/4/20 - # chosen_room = available_rooms.shift - # new_reservation = Hotel::Reservation.new(id: id.shift, date_range: date_range, room: chosen_room) - # @reservations << new_reservation - # #i need to come back and check finish writing this code and it's tests - # chosen_room.add_room_reservation(new_reservation) - # end + def add_reservation(date_range) + id = (1..1000).to_a + @date_range << date_range + available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.reject{|room| room.reservations.select{|reservation| reservation.date_range.overlap?(date_range)} == true} + chosen_room = available_rooms.shift + new_reservation = Hotel::Reservation.new(id: id.shift, date_range: date_range, room: chosen_room) + @reservations << new_reservation + chosen_room.add_room_reservation(new_reservation) + end def find_room(room_number) found_room = @rooms.select {|room| room.room_number == room_number} diff --git a/lib/room.rb b/lib/room.rb index 846c1939a..5ee256081 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -15,9 +15,9 @@ def initialize(room_number:, cost:, reservations: nil) end - # def add_room_reservation(reservation) - # @reservations << reservation - # end + def add_room_reservation(reservation) + @reservations << reservation + end end end diff --git a/test/daterange_test.rb b/test/daterange_test.rb index 185f36422..bed77722c 100644 --- a/test/daterange_test.rb +++ b/test/daterange_test.rb @@ -49,5 +49,16 @@ end end + + describe "nights" do + + start_date = Date.new(2020, 3, 4) + end_date = Date.new(2020, 3, 9) + date_range = Hotel::DateRange.new(start_date: start_date, end_date: end_date) + + it "calculates the number of nights booked" do + expect(date_range.nights).must_equal 5 + end + end end \ No newline at end of file diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 05b364245..b88e39950 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -1,5 +1,6 @@ require_relative 'test_helper' require_relative '../lib/date_range' +require 'date' describe "front desk" do before do @@ -34,20 +35,29 @@ end end - # describe "add_reservation" do - # before do - # @dates = Hotel::DateRange.new(start_date: "3/4/2020", end_date: "3/7/2020") - # @front_desk.add_reservation(@dates) - # end + describe "add_reservation" do + before do + @dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 7)) + @front_desk.add_reservation(@dates) + end - # it "adds an id to the reservation" do - # expect(@front_desk.reservations[0].id).must_be_instance_of Integer - # end + it "adds an id to the reservation" do + expect(@front_desk.reservations[0].id).must_be_instance_of Integer + end - # it "adds a an instance of the room class to the reservation" do - # expect(@front_desk.reservations[0].room).must_be_instance_of Hotel::Room - # end - # end + it "adds an instance of the room class to the reservation" do + expect(@front_desk.reservations[0].room).must_be_instance_of Hotel::Room + end + + it "adds a reservation object to collection of reservations" do + expect(@front_desk.reservations[0]).must_be_instance_of Hotel::Reservation + end + + it " adds the reservation to the room object" do + expect(@front_desk.reservations[0].room.reservations[0]).must_be_instance_of Hotel::Reservation + end + + end # describe "find_reservation_with(date_range)" do # before do From 83b3034fd931b701dcb79d20080c741d4c0e0b37 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 20:15:29 -0800 Subject: [PATCH 13/30] add available rooms for given date range method --- lib/front_desk.rb | 16 +++++++++++++--- test/front_desk_test.rb | 4 ++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 1337816d3..6c4e64f84 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -5,7 +5,7 @@ module Hotel class FrontDesk - attr_accessor :rooms, :reservations, :date_range + attr_accessor :rooms, :reservations, :date_ranges def initialize @rooms = [] @@ -15,12 +15,12 @@ def initialize @rooms << new_room end @reservations = [] - @date_range = [] + @date_ranges = [] end def add_reservation(date_range) id = (1..1000).to_a - @date_range << date_range + @date_ranges << date_range available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.reject{|room| room.reservations.select{|reservation| reservation.date_range.overlap?(date_range)} == true} chosen_room = available_rooms.shift new_reservation = Hotel::Reservation.new(id: id.shift, date_range: date_range, room: chosen_room) @@ -28,6 +28,16 @@ def add_reservation(date_range) chosen_room.add_room_reservation(new_reservation) end + def available_rooms(date_range) + available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.reject{|room| room.reservations.select{|reservation| reservation.date_range.overlap?(date_range)} == true} + return available_rooms + end + + start_date = Date.new(2020,3,1) + end_date = Date.new(2020,3,4) + dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) + front_desk = Hotel::FrontDesk.new + def find_room(room_number) found_room = @rooms.select {|room| room.room_number == room_number} return found_room[0] diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index b88e39950..8f58a011a 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -40,6 +40,10 @@ @dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 7)) @front_desk.add_reservation(@dates) end + + it "adds date range to front desk date range instance variable array" do + expect(@front_desk.date_ranges[0]).must_be_instance_of Hotel::DateRange + end it "adds an id to the reservation" do expect(@front_desk.reservations[0].id).must_be_instance_of Integer From 2ae449af505fb544c8c35b9364b1f38f63e42bd3 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 20:56:00 -0800 Subject: [PATCH 14/30] write code and tests to find reservation given a room and date range --- lib/front_desk.rb | 25 ++++++++++---------- test/front_desk_test.rb | 52 +++++++++++++++++++++++++++++++---------- 2 files changed, 52 insertions(+), 25 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 6c4e64f84..a4ef644e1 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -33,26 +33,25 @@ def available_rooms(date_range) return available_rooms end - start_date = Date.new(2020,3,1) - end_date = Date.new(2020,3,4) - dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) - front_desk = Hotel::FrontDesk.new - def find_room(room_number) found_room = @rooms.select {|room| room.room_number == room_number} return found_room[0] end - # def find_reservation_with(date_range) - # res_w_given_date = @reservations.select {|reservation| reservation.date_range == date_range} - # return res_w_given_date - # end + def find_reservation_with(room, date_range) + res_w_given_date = @reservations.select {|reservation| reservation.date_range == date_range && reservation.room == room} + return res_w_given_date + end + # start_date = Date.new(2020,3,1) + # end_date = Date.new(2020,3,4) + # dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) + # front_desk = Hotel::FrontDesk.new + # room = front_desk.rooms[0] - # def self.reservations - # @reservations = [] - # return @reservations - # end + # front_desk.add_reservation(dates) + # p front_desk.find_reservation_with(room, dates) + end diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 8f58a011a..1059e5e9e 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -63,16 +63,44 @@ end - # describe "find_reservation_with(date_range)" do - # before do - # @dates = Hotel::DateRange.new(start_date: "3/4/2020", end_date: "3/7/2020") - # end - - # it "returns an array of reservations that match the date" do - # expect(@front_desk.find_reservation_with(@date)).must_be_instance_of Array - # expect(@front_desk.find_reservation_with(@date).sample).must_be_instance_of (Hotel::Reservation || nil) - # #make a test where one array will be empty so I can check nil, and another where it will have a reservation - # end - - # end + describe "available_rooms" do + before do + @dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 7)) + @front_desk.add_reservation(@dates) + end + + it "returns an array of all available rooms given a date range" do + expect(@front_desk.available_rooms(@dates)).must_be_instance_of Array + end + + it "has room objects contained in the array" do + expect(@front_desk.available_rooms(@dates).sample).must_be_instance_of Hotel::Room + end + + it "returns array of rooms that doesn't include any rooms that are booked for same date range" do + expect(@front_desk.available_rooms(@dates).count).must_equal 19 + expect(@front_desk.available_rooms(@dates)[0].room_number).must_equal 2 + end + end + + describe "find_reservation_with(date_range)" do + before do + @dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 7)) + @room = @front_desk.rooms[0] + end + + it "returns an array of reservations that match the date" do + expect(@front_desk.find_reservation_with(@room, @dates)).must_be_instance_of Array + end + + it "returns an empty array if there are no reservations" do + expect(@front_desk.find_reservation_with(@room, @dates).sample).must_equal nil + end + + it "returns reservations if there are reservations for given room and date range" do + @front_desk.add_reservation(@dates) + expect(@front_desk.find_reservation_with(@room, @dates).sample).must_be_instance_of Hotel::Reservation + end + + end end \ No newline at end of file From 0fc55095e0eabeb5565bad136ec01a87d58d5c89 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 21:20:02 -0800 Subject: [PATCH 15/30] refactor find_reservations_with method an tests --- lib/front_desk.rb | 11 ++++++++--- test/front_desk_test.rb | 13 +++++++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index a4ef644e1..9641dd8b6 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -38,11 +38,14 @@ def find_room(room_number) return found_room[0] end - def find_reservation_with(room, date_range) - res_w_given_date = @reservations.select {|reservation| reservation.date_range == date_range && reservation.room == room} + def find_reservation_with(room: nil, date_range:) + res_w_given_date = @reservations.select {|reservation| (reservation.date_range == date_range && reservation.room == room) || reservation.date_range == date_range } return res_w_given_date end + def total_cost(Reservation) + end + # start_date = Date.new(2020,3,1) # end_date = Date.new(2020,3,4) # dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) @@ -50,7 +53,9 @@ def find_reservation_with(room, date_range) # room = front_desk.rooms[0] # front_desk.add_reservation(dates) - # p front_desk.find_reservation_with(room, dates) + # p front_desk.find_reservation_with( date_range: dates) + # puts "\n" + # p front_desk.find_reservation_with( room: room, date_range: dates) diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 1059e5e9e..e4331d9b7 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -83,23 +83,28 @@ end end - describe "find_reservation_with(date_range)" do + describe "find_reservation_with" do before do @dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 7)) @room = @front_desk.rooms[0] end it "returns an array of reservations that match the date" do - expect(@front_desk.find_reservation_with(@room, @dates)).must_be_instance_of Array + expect(@front_desk.find_reservation_with(room: @room, date_range: @dates)).must_be_instance_of Array end it "returns an empty array if there are no reservations" do - expect(@front_desk.find_reservation_with(@room, @dates).sample).must_equal nil + expect(@front_desk.find_reservation_with(room: @room, date_range: @dates).sample).must_equal nil end it "returns reservations if there are reservations for given room and date range" do @front_desk.add_reservation(@dates) - expect(@front_desk.find_reservation_with(@room, @dates).sample).must_be_instance_of Hotel::Reservation + expect(@front_desk.find_reservation_with(room: @room, date_range: @dates).sample).must_be_instance_of Hotel::Reservation + end + + it "returns reservations if there are reservations for given date range" do + @front_desk.add_reservation(@dates) + expect(@front_desk.find_reservation_with(date_range: @dates).sample).must_be_instance_of Hotel::Reservation end end From 0add42f3e0a0d8ec1c31b991e378dd209c2bbb68 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 21:50:19 -0800 Subject: [PATCH 16/30] write total cost method --- lib/front_desk.rb | 3 ++- lib/reservations.rb | 1 + test/front_desk_test.rb | 10 ++++++++++ test/reservations_test.rb | 7 ++++--- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 9641dd8b6..9080ce841 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -43,7 +43,8 @@ def find_reservation_with(room: nil, date_range:) return res_w_given_date end - def total_cost(Reservation) + def total_cost(reservation) + total_cost = reservation.date_range.nights * reservation.room.cost end # start_date = Date.new(2020,3,1) diff --git a/lib/reservations.rb b/lib/reservations.rb index a775d74ee..2a6b58436 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -9,5 +9,6 @@ def initialize(id:, date_range:, room: nil) @date_range = date_range @room = room end + end end diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index e4331d9b7..3b3fee475 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -108,4 +108,14 @@ end end + + describe " total_cost" do + before do + @new_reservation = Hotel::Reservation.new( id: 1, date_range: Hotel::DateRange.new(start_date: Date.new(2020, 3, 1), end_date: Date.new(2020, 3, 4)), room: Hotel::Room.new(room_number: 1, cost: 200)) + end + + it "calculates total cost of the reservation " do + expect(@front_desk.total_cost(@new_reservation)).must_equal 600 + end + end end \ No newline at end of file diff --git a/test/reservations_test.rb b/test/reservations_test.rb index a43b76575..4db25a962 100644 --- a/test/reservations_test.rb +++ b/test/reservations_test.rb @@ -2,10 +2,11 @@ require 'date' describe "reservations" do + before do + @new_reservation = Hotel::Reservation.new( id: 1, date_range: Hotel::DateRange.new(start_date: Date.new(2020, 3, 1), end_date: Date.new(2020, 3, 4)), room: Hotel::Room.new(room_number: 1, cost: 200)) + end + describe "initialize reservations" do - before do - @new_reservation = Hotel::Reservation.new( id: 1, date_range: Hotel::DateRange.new(start_date: Date.new(2020, 3, 1), end_date: Date.new(2020, 3, 4)), room: Hotel::Room.new(room_number: 1, cost: 200)) - end it "creates an instance of a reservation" do expect(@new_reservation).must_be_instance_of Hotel::Reservation From e6280022f38c5a5e7e4d001b13b59a23388d6dd6 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 22:17:00 -0800 Subject: [PATCH 17/30] raised exception for no available rooms and write test --- lib/No_Available_Room_Error.rb | 2 ++ lib/date_range.rb | 3 +-- lib/front_desk.rb | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 lib/No_Available_Room_Error.rb diff --git a/lib/No_Available_Room_Error.rb b/lib/No_Available_Room_Error.rb new file mode 100644 index 000000000..b2467d001 --- /dev/null +++ b/lib/No_Available_Room_Error.rb @@ -0,0 +1,2 @@ +class NoAvailableRoomError < StandardError +end diff --git a/lib/date_range.rb b/lib/date_range.rb index f8fcb79ec..927cc47b3 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -16,8 +16,7 @@ def initialize(start_date:, end_date:) def overlap?(date_range) # if the array of the combined arrays is empty, there is no overlap, so return false # if the array is not empty, return true - return (self.range & date_range.range).empty? ? false : true - + return overlap = (self.range & date_range.range).empty? ? false : true end def nights diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 9080ce841..37e0633b7 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -22,6 +22,8 @@ def add_reservation(date_range) id = (1..1000).to_a @date_ranges << date_range available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.reject{|room| room.reservations.select{|reservation| reservation.date_range.overlap?(date_range)} == true} + raise NoAvailableRoomError.new("there are no available rooms for that date")if available_rooms.empty? == true + chosen_room = available_rooms.shift new_reservation = Hotel::Reservation.new(id: id.shift, date_range: date_range, room: chosen_room) @reservations << new_reservation From 4731ffa1a926b0b3612dcdb4ba41d81117802755 Mon Sep 17 00:00:00 2001 From: Yieni Date: Tue, 3 Mar 2020 23:14:47 -0800 Subject: [PATCH 18/30] start scaffolding for wave 3 --- lib/date_range.rb | 3 ++- lib/front_desk.rb | 3 +++ test/daterange_test.rb | 5 +++-- test/front_desk_test.rb | 25 +++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 927cc47b3..dbce02f2d 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -16,7 +16,8 @@ def initialize(start_date:, end_date:) def overlap?(date_range) # if the array of the combined arrays is empty, there is no overlap, so return false # if the array is not empty, return true - return overlap = (self.range & date_range.range).empty? ? false : true + overlap = (self.range & date_range.range).empty? || (date_range.start_date >= self.end_date) ? false : true + return overlap end def nights diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 37e0633b7..ee99c1a42 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -30,6 +30,9 @@ def add_reservation(date_range) chosen_room.add_room_reservation(new_reservation) end + # def add_block_reservation(block_count:, date_range:, discount_cost:) + # end + def available_rooms(date_range) available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.reject{|room| room.reservations.select{|reservation| reservation.date_range.overlap?(date_range)} == true} return available_rooms diff --git a/test/daterange_test.rb b/test/daterange_test.rb index bed77722c..f2b7aa6fa 100644 --- a/test/daterange_test.rb +++ b/test/daterange_test.rb @@ -26,11 +26,11 @@ @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) end - it "returns true if the date is within the range" do + it "returns true if there is overlap between date ranges" do @date_range2 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 6)) @date_range3 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 5), end_date: Date.new(2020, 3, 9)) @date_range4 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 2), end_date: Date.new(2020, 3, 14)) - @date_range5 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 9), end_date: Date.new(2020, 3, 14)) + @date_range5 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 3), end_date: Date.new(2020, 3, 6)) expect(@date_range.overlap?(@date_range2)).must_equal true expect(@date_range.overlap?(@date_range3)).must_equal true expect(@date_range.overlap?(@date_range4)).must_equal true @@ -42,6 +42,7 @@ @date_range3 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 11), end_date: Date.new(2020, 3, 13)) @date_range4 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 2), end_date: Date.new(2020, 3, 3)) @date_range5 = Hotel::DateRange.new(start_date: Date.new(2020, 2, 9), end_date: Date.new(2020, 2, 16)) + @date_range5 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 9), end_date: Date.new(2020, 3, 14)) expect(@date_range.overlap?(@date_range2)).must_equal false expect(@date_range.overlap?(@date_range3)).must_equal false expect(@date_range.overlap?(@date_range4)).must_equal false diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 3b3fee475..dffc26140 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -1,5 +1,6 @@ require_relative 'test_helper' require_relative '../lib/date_range' +require_relative '../lib/No_Available_Room_Error.rb' require 'date' describe "front desk" do @@ -44,6 +45,15 @@ it "adds date range to front desk date range instance variable array" do expect(@front_desk.date_ranges[0]).must_be_instance_of Hotel::DateRange end + + it "raises exception when there are no available rooms for a given date range" do + 19.times do + @front_desk.add_reservation(@dates) + end + + expect{@front_desk.add_reservation(@dates)}.must_raise NoAvailableRoomError + + end it "adds an id to the reservation" do expect(@front_desk.reservations[0].id).must_be_instance_of Integer @@ -63,6 +73,21 @@ end + describe "add_block_reservation" do + + it "reserves the correct number of rooms" do + + end + + it "raises exception if block_count is not greater than 1 or less than 6" do + + end + + it " raises exception if there aren't enough rooms to fill block" do + + end + end + describe "available_rooms" do before do @dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 7)) From 6172d57afb3b3161c08e7329cb0164eb0d4ac8d1 Mon Sep 17 00:00:00 2001 From: Yieni Date: Wed, 4 Mar 2020 11:57:40 -0800 Subject: [PATCH 19/30] add hotel block class and test, remove id from reservations --- lib/front_desk.rb | 8 ++------ lib/hotel_block.rb | 18 ++++++++++++++++++ lib/reservations.rb | 5 ++--- test/front_desk_test.rb | 21 +-------------------- test/hotel_block_test.rb | 36 ++++++++++++++++++++++++++++++++++++ test/reservations_test.rb | 2 +- test/test_helper.rb | 3 ++- 7 files changed, 62 insertions(+), 31 deletions(-) create mode 100644 lib/hotel_block.rb create mode 100644 test/hotel_block_test.rb diff --git a/lib/front_desk.rb b/lib/front_desk.rb index ee99c1a42..0b910a214 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -2,7 +2,7 @@ require_relative 'room' require_relative 'date_range' require_relative 'reservations' - +require_relative 'hotel_block' module Hotel class FrontDesk attr_accessor :rooms, :reservations, :date_ranges @@ -19,20 +19,16 @@ def initialize end def add_reservation(date_range) - id = (1..1000).to_a @date_ranges << date_range available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.reject{|room| room.reservations.select{|reservation| reservation.date_range.overlap?(date_range)} == true} raise NoAvailableRoomError.new("there are no available rooms for that date")if available_rooms.empty? == true chosen_room = available_rooms.shift - new_reservation = Hotel::Reservation.new(id: id.shift, date_range: date_range, room: chosen_room) + new_reservation = Hotel::Reservation.new(date_range: date_range, room: chosen_room) @reservations << new_reservation chosen_room.add_room_reservation(new_reservation) end - # def add_block_reservation(block_count:, date_range:, discount_cost:) - # end - def available_rooms(date_range) available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.reject{|room| room.reservations.select{|reservation| reservation.date_range.overlap?(date_range)} == true} return available_rooms diff --git a/lib/hotel_block.rb b/lib/hotel_block.rb new file mode 100644 index 000000000..9d776e3f3 --- /dev/null +++ b/lib/hotel_block.rb @@ -0,0 +1,18 @@ +require_relative 'room' +require_relative 'date_range' +require_relative 'reservations' + + +module Hotel + class HotelBlock + def add_block(block_count:, date_range:, discount_cost:) + + + end + + # def add_reservation_to_block(date_range, room) + # end + + end + +end \ No newline at end of file diff --git a/lib/reservations.rb b/lib/reservations.rb index 2a6b58436..1a5b50892 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -2,10 +2,9 @@ module Hotel class Reservation - attr_reader :date_range, :room, :id + attr_reader :date_range, :room - def initialize(id:, date_range:, room: nil) - @id = id + def initialize(date_range:, room: nil) @date_range = date_range @room = room end diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index dffc26140..4ceb8b9ec 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -54,10 +54,6 @@ expect{@front_desk.add_reservation(@dates)}.must_raise NoAvailableRoomError end - - it "adds an id to the reservation" do - expect(@front_desk.reservations[0].id).must_be_instance_of Integer - end it "adds an instance of the room class to the reservation" do expect(@front_desk.reservations[0].room).must_be_instance_of Hotel::Room @@ -73,21 +69,6 @@ end - describe "add_block_reservation" do - - it "reserves the correct number of rooms" do - - end - - it "raises exception if block_count is not greater than 1 or less than 6" do - - end - - it " raises exception if there aren't enough rooms to fill block" do - - end - end - describe "available_rooms" do before do @dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 7)) @@ -136,7 +117,7 @@ describe " total_cost" do before do - @new_reservation = Hotel::Reservation.new( id: 1, date_range: Hotel::DateRange.new(start_date: Date.new(2020, 3, 1), end_date: Date.new(2020, 3, 4)), room: Hotel::Room.new(room_number: 1, cost: 200)) + @new_reservation = Hotel::Reservation.new(date_range: Hotel::DateRange.new(start_date: Date.new(2020, 3, 1), end_date: Date.new(2020, 3, 4)), room: Hotel::Room.new(room_number: 1, cost: 200)) end it "calculates total cost of the reservation " do diff --git a/test/hotel_block_test.rb b/test/hotel_block_test.rb new file mode 100644 index 000000000..6561b1d0f --- /dev/null +++ b/test/hotel_block_test.rb @@ -0,0 +1,36 @@ +describe "HotelBlock" do + describe "add_block" do + + it "reserves the correct number of rooms" do + + end + + it "raises exception if block_count is not greater than 1 or less than 6" do + + end + + it " raises exception if there aren't enough rooms to fill block" do + + end + + it "sets aside the rooms and doesn't allow someone out of the block to reserve a room in the block" do + + end + end + + # describe "add_reservation_to_block" do + + # it "reserves the correct number of rooms" do + + # end + + # it "raises exception if block_count is not greater than 1 or less than 6" do + + # end + + # it " raises exception if there aren't enough rooms to fill block" do + + # end + # end +end + diff --git a/test/reservations_test.rb b/test/reservations_test.rb index 4db25a962..7c54e5d65 100644 --- a/test/reservations_test.rb +++ b/test/reservations_test.rb @@ -3,7 +3,7 @@ describe "reservations" do before do - @new_reservation = Hotel::Reservation.new( id: 1, date_range: Hotel::DateRange.new(start_date: Date.new(2020, 3, 1), end_date: Date.new(2020, 3, 4)), room: Hotel::Room.new(room_number: 1, cost: 200)) + @new_reservation = Hotel::Reservation.new(date_range: Hotel::DateRange.new(start_date: Date.new(2020, 3, 1), end_date: Date.new(2020, 3, 4)), room: Hotel::Room.new(room_number: 1, cost: 200)) end describe "initialize reservations" do diff --git a/test/test_helper.rb b/test/test_helper.rb index af679dbf8..2c46894d2 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -15,4 +15,5 @@ require_relative "../lib/date_range" require_relative "../lib/front_desk" require_relative "../lib/reservations" -require_relative "../lib/room" \ No newline at end of file +require_relative "../lib/room" +require_relative "../lib/hotel_block" \ No newline at end of file From 2e4bef59f9e70ebf40cfdc3779dfdda9fc7980c7 Mon Sep 17 00:00:00 2001 From: Yieni Date: Wed, 4 Mar 2020 16:00:41 -0800 Subject: [PATCH 20/30] add psuedo code for wave 3 --- lib/front_desk.rb | 18 +++++++++--------- lib/hotel_block.rb | 15 +++++++++++++-- lib/room.rb | 4 +++- test/daterange_test.rb | 1 - test/front_desk_test.rb | 25 +++++++++---------------- test/hotel_block_test.rb | 2 ++ test/reservations_test.rb | 1 - test/test_helper.rb | 5 +++-- 8 files changed, 39 insertions(+), 32 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 0b910a214..1f8eed597 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -3,9 +3,10 @@ require_relative 'date_range' require_relative 'reservations' require_relative 'hotel_block' + module Hotel class FrontDesk - attr_accessor :rooms, :reservations, :date_ranges + attr_accessor :rooms, :reservations, :hotel_blocks def initialize @rooms = [] @@ -15,12 +16,11 @@ def initialize @rooms << new_room end @reservations = [] - @date_ranges = [] + @hotel_blocks = [] end def add_reservation(date_range) - @date_ranges << date_range - available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.reject{|room| room.reservations.select{|reservation| reservation.date_range.overlap?(date_range)} == true} + available_rooms = available_rooms(date_range) raise NoAvailableRoomError.new("there are no available rooms for that date")if available_rooms.empty? == true chosen_room = available_rooms.shift @@ -30,14 +30,14 @@ def add_reservation(date_range) end def available_rooms(date_range) - available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.reject{|room| room.reservations.select{|reservation| reservation.date_range.overlap?(date_range)} == true} + available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.select{|room| room.reservations.select{|reservation| reservation.date_range.overlap?(date_range)} == false} return available_rooms end - def find_room(room_number) - found_room = @rooms.select {|room| room.room_number == room_number} - return found_room[0] - end + # def find_room(room_number) + # found_room = @rooms.select {|room| room.room_number == room_number} + # return found_room[0] + # end def find_reservation_with(room: nil, date_range:) res_w_given_date = @reservations.select {|reservation| (reservation.date_range == date_range && reservation.room == room) || reservation.date_range == date_range } diff --git a/lib/hotel_block.rb b/lib/hotel_block.rb index 9d776e3f3..effc219bb 100644 --- a/lib/hotel_block.rb +++ b/lib/hotel_block.rb @@ -5,14 +5,25 @@ module Hotel class HotelBlock - def add_block(block_count:, date_range:, discount_cost:) - + attr_reader :block_count, :date_range, :discount_cost, :rooms + def initialize(block_count:, date_range:, discount_cost:) + #raises an exception if you try and add a reservation using FrontDesk's method + #for adding reservations + #takes list of available rooms for the date_range that is passed in that is not already in a block + #if no available rooms/no enough rooms are available to fill block raise the exception that there are none. + #pulls out how many rooms are requested for the block (between 2-5) + #from the block_count that was passed in + # assaigns the discounted cost to the cost of each room + #returns that collection of available rooms w/ new discounted price end # def add_reservation_to_block(date_range, room) + # #allows you to add a reservation for a room by calling out the first room + # #from the collection of block rooms # end + end end \ No newline at end of file diff --git a/lib/room.rb b/lib/room.rb index 5ee256081..aeb7b2d30 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -3,7 +3,7 @@ module Hotel class Room attr_reader :room_number - attr_accessor :cost, :reservations + attr_accessor :cost, :reservations, :block_status, :availability def initialize(room_number:, cost:, reservations: nil) @room_number = room_number @@ -12,6 +12,8 @@ def initialize(room_number:, cost:, reservations: nil) @cost = 200 @reservations = reservations || [] + @block_status = :in_block || :not_in_block + @availability = :available || :unavailable end diff --git a/test/daterange_test.rb b/test/daterange_test.rb index f2b7aa6fa..59b368120 100644 --- a/test/daterange_test.rb +++ b/test/daterange_test.rb @@ -1,5 +1,4 @@ require_relative 'test_helper' -require 'date' describe "DateRange" do describe "initialize DateRange" do diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 4ceb8b9ec..4d7f2a026 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -1,7 +1,4 @@ require_relative 'test_helper' -require_relative '../lib/date_range' -require_relative '../lib/No_Available_Room_Error.rb' -require 'date' describe "front desk" do before do @@ -25,16 +22,16 @@ end end - describe "find_room" do - before do - @front_desk = Hotel::FrontDesk.new - end + # describe "find_room" do + # before do + # @front_desk = Hotel::FrontDesk.new + # end - it "finds an instance of a room given the room number" do - room_number = 4 - expect(@front_desk.find_room(room_number)).must_be_instance_of Hotel::Room - end - end + # it "finds an instance of a room given the room number" do + # room_number = 4 + # expect(@front_desk.find_room(room_number)).must_be_instance_of Hotel::Room + # end + # end describe "add_reservation" do before do @@ -42,10 +39,6 @@ @front_desk.add_reservation(@dates) end - it "adds date range to front desk date range instance variable array" do - expect(@front_desk.date_ranges[0]).must_be_instance_of Hotel::DateRange - end - it "raises exception when there are no available rooms for a given date range" do 19.times do @front_desk.add_reservation(@dates) diff --git a/test/hotel_block_test.rb b/test/hotel_block_test.rb index 6561b1d0f..4c3219c08 100644 --- a/test/hotel_block_test.rb +++ b/test/hotel_block_test.rb @@ -1,3 +1,5 @@ +require_relative 'test_helper' + describe "HotelBlock" do describe "add_block" do diff --git a/test/reservations_test.rb b/test/reservations_test.rb index 7c54e5d65..491ae03e2 100644 --- a/test/reservations_test.rb +++ b/test/reservations_test.rb @@ -1,5 +1,4 @@ require_relative 'test_helper' -require 'date' describe "reservations" do before do diff --git a/test/test_helper.rb b/test/test_helper.rb index 2c46894d2..1fe262d7d 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -7,7 +7,7 @@ require "minitest/autorun" require "minitest/reporters" require "minitest/skip_dsl" - +require "date" Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new @@ -16,4 +16,5 @@ require_relative "../lib/front_desk" require_relative "../lib/reservations" require_relative "../lib/room" -require_relative "../lib/hotel_block" \ No newline at end of file +require_relative "../lib/hotel_block" +require_relative '../lib/No_Available_Room_Error.rb' From 0af6916f9d55c1e3fb5bd10ff7c7d33579ac2287 Mon Sep 17 00:00:00 2001 From: Yieni Date: Wed, 4 Mar 2020 20:56:50 -0800 Subject: [PATCH 21/30] rewrite available room method and prep for writing blockmethods --- lib/front_desk.rb | 5 ++++- lib/room.rb | 6 +++--- test/front_desk_test.rb | 27 ++++++++++++++++++++++++--- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 1f8eed597..9cc6f5715 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -30,7 +30,9 @@ def add_reservation(date_range) end def available_rooms(date_range) - available_rooms = @rooms.select{|room| room.reservations.empty? == true} || @rooms.select{|room| room.reservations.select{|reservation| reservation.date_range.overlap?(date_range)} == false} + available_rooms = @rooms.reject do |room| + room.reservations.any?{|reservation| reservation.date_range.overlap?(date_range) == true} + end return available_rooms end @@ -46,6 +48,7 @@ def find_reservation_with(room: nil, date_range:) def total_cost(reservation) total_cost = reservation.date_range.nights * reservation.room.cost + return total_cost end # start_date = Date.new(2020,3,1) diff --git a/lib/room.rb b/lib/room.rb index aeb7b2d30..7ac88748c 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -3,7 +3,7 @@ module Hotel class Room attr_reader :room_number - attr_accessor :cost, :reservations, :block_status, :availability + attr_accessor :cost, :reservations, :block_status, :availability_in_block def initialize(room_number:, cost:, reservations: nil) @room_number = room_number @@ -12,8 +12,8 @@ def initialize(room_number:, cost:, reservations: nil) @cost = 200 @reservations = reservations || [] - @block_status = :in_block || :not_in_block - @availability = :available || :unavailable + @block_status = :not_in_block || :in_block + @availability_in_block = :available || :unavailable end diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 4d7f2a026..f2417dc0b 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -65,7 +65,6 @@ describe "available_rooms" do before do @dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 7)) - @front_desk.add_reservation(@dates) end it "returns an array of all available rooms given a date range" do @@ -76,10 +75,32 @@ expect(@front_desk.available_rooms(@dates).sample).must_be_instance_of Hotel::Room end - it "returns array of rooms that doesn't include any rooms that are booked for same date range" do + it "returns array of all rooms for a given date range if no reservations exist for any room" do + expect(@front_desk.available_rooms(@dates).count).must_equal 20 + expect(@front_desk.available_rooms(@dates)[0].room_number).must_equal 1 + end + + it "returns array of all rooms for a given date range that don't overlap the date range" do + @front_desk.add_reservation(@dates) expect(@front_desk.available_rooms(@dates).count).must_equal 19 expect(@front_desk.available_rooms(@dates)[0].room_number).must_equal 2 - end + + @front_desk.add_reservation(@dates) + + expect(@front_desk.available_rooms(@dates).count).must_equal 18 + expect(@front_desk.available_rooms(@dates)[0].room_number).must_equal 3 + + new_dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 7), end_date: Date.new(2020, 3, 9)) + @front_desk.add_reservation(new_dates) + + expect(@front_desk.available_rooms(@dates).count).must_equal 18 + expect(@front_desk.available_rooms(@dates)[0].room_number).must_equal 3 + + test_dates = Hotel::DateRange.new(start_date: Date.new(2020, 2, 7), end_date: Date.new(2020, 2, 9)) + expect(@front_desk.available_rooms(test_dates).count).must_equal 20 + expect(@front_desk.available_rooms(test_dates)[0].room_number).must_equal 1 + end + end describe "find_reservation_with" do From ccc6cba07b66af62c5bd9d7f9195a7c810c6172f Mon Sep 17 00:00:00 2001 From: Yieni Date: Wed, 4 Mar 2020 21:48:34 -0800 Subject: [PATCH 22/30] add extra validation for date range --- lib/date_range.rb | 3 ++- lib/front_desk.rb | 5 ---- test/daterange_test.rb | 52 +++++++++++++++++++-------------------- test/front_desk_test.rb | 23 +++++------------ test/reservations_test.rb | 2 +- 5 files changed, 35 insertions(+), 50 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index dbce02f2d..e999ce9a8 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -10,13 +10,14 @@ def initialize(start_date:, end_date:) @end_date = end_date @range = (@start_date .. @end_date).to_a raise ArgumentError.new("End date can not be before start date") if @end_date < @start_date + raise ArgumentError.new("Reservation can not be before today") if @end_date < Date.today || @start_date < Date.today end def overlap?(date_range) # if the array of the combined arrays is empty, there is no overlap, so return false # if the array is not empty, return true - overlap = (self.range & date_range.range).empty? || (date_range.start_date >= self.end_date) ? false : true + overlap = (self.range & date_range.range).empty? || (date_range.start_date >= self.end_date) || (date_range.end_date <= self.start_date) ? false : true return overlap end diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 9cc6f5715..f7d017140 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -36,11 +36,6 @@ def available_rooms(date_range) return available_rooms end - # def find_room(room_number) - # found_room = @rooms.select {|room| room.room_number == room_number} - # return found_room[0] - # end - def find_reservation_with(room: nil, date_range:) res_w_given_date = @reservations.select {|reservation| (reservation.date_range == date_range && reservation.room == room) || reservation.date_range == date_range } return res_w_given_date diff --git a/test/daterange_test.rb b/test/daterange_test.rb index 59b368120..eef073e9f 100644 --- a/test/daterange_test.rb +++ b/test/daterange_test.rb @@ -3,7 +3,7 @@ describe "DateRange" do describe "initialize DateRange" do it "raises ArgumentError if end date is before start date" do - expect{Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 2))}.must_raise ArgumentError + expect{Hotel::DateRange.new(start_date: Date.today + 6, end_date: Date.today + 2)}.must_raise ArgumentError end it "raises ArgumentError if end date and start date are not Date objects" do @@ -11,8 +11,8 @@ end it "creates a range of the start and end dates" do - start_date = Date.new(2020, 3, 4) - end_date = Date.new(2020, 3, 9) + start_date = Date.today + 2 + end_date = Date.today + 6 date_range = Hotel::DateRange.new(start_date: start_date, end_date: end_date) expect(date_range.range).must_equal (start_date..end_date).to_a end @@ -20,44 +20,44 @@ describe "overlap?" do before do - @start_date = Date.new(2020, 3, 4) - @end_date = Date.new(2020, 3, 9) + @start_date = Date.today + 2 + @end_date = Date.today + 6 @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) end it "returns true if there is overlap between date ranges" do - @date_range2 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 6)) - @date_range3 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 5), end_date: Date.new(2020, 3, 9)) - @date_range4 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 2), end_date: Date.new(2020, 3, 14)) - @date_range5 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 3), end_date: Date.new(2020, 3, 6)) - expect(@date_range.overlap?(@date_range2)).must_equal true - expect(@date_range.overlap?(@date_range3)).must_equal true - expect(@date_range.overlap?(@date_range4)).must_equal true - expect(@date_range.overlap?(@date_range5)).must_equal true + date_range2 = Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 4) + date_range3 = Hotel::DateRange.new(start_date: Date.today + 3, end_date: Date.today + 6) + date_range4 = Hotel::DateRange.new(start_date: Date.today + 1, end_date: Date.today + 9) + date_range5 = Hotel::DateRange.new(start_date: Date.today + 1, end_date: Date.today + 6) + expect(@date_range.overlap?(date_range2)).must_equal true + expect(@date_range.overlap?(date_range3)).must_equal true + expect(@date_range.overlap?(date_range4)).must_equal true + expect(@date_range.overlap?(date_range5)).must_equal true end it "returns false if the date is not within the range" do - @date_range2 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 10), end_date: Date.new(2020, 3, 15)) - @date_range3 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 11), end_date: Date.new(2020, 3, 13)) - @date_range4 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 2), end_date: Date.new(2020, 3, 3)) - @date_range5 = Hotel::DateRange.new(start_date: Date.new(2020, 2, 9), end_date: Date.new(2020, 2, 16)) - @date_range5 = Hotel::DateRange.new(start_date: Date.new(2020, 3, 9), end_date: Date.new(2020, 3, 14)) - expect(@date_range.overlap?(@date_range2)).must_equal false - expect(@date_range.overlap?(@date_range3)).must_equal false - expect(@date_range.overlap?(@date_range4)).must_equal false - expect(@date_range.overlap?(@date_range5)).must_equal false + date_range2 = Hotel::DateRange.new(start_date: Date.today + 6, end_date: Date.today + 9) + date_range3 = Hotel::DateRange.new(start_date: Date.today + 7, end_date: Date.today + 13) + date_range4 = Hotel::DateRange.new(start_date: Date.today + 1, end_date: Date.today + 2) + date_range5 = Hotel::DateRange.new(start_date: Date.today + 19, end_date: Date.today + 20) + date_range5 = Hotel::DateRange.new(start_date: Date.today , end_date: Date.today + 1) + expect(@date_range.overlap?(date_range2)).must_equal false + expect(@date_range.overlap?(date_range3)).must_equal false + expect(@date_range.overlap?(date_range4)).must_equal false + expect(@date_range.overlap?(date_range5)).must_equal false end end describe "nights" do - start_date = Date.new(2020, 3, 4) - end_date = Date.new(2020, 3, 9) - date_range = Hotel::DateRange.new(start_date: start_date, end_date: end_date) + start_date = Date.today + 2 + end_date = Date.today + 6 + date_range = Hotel::DateRange.new(start_date:start_date, end_date:end_date) it "calculates the number of nights booked" do - expect(date_range.nights).must_equal 5 + expect(date_range.nights).must_equal 4 end end diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index f2417dc0b..5f846d2b3 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -22,20 +22,9 @@ end end - # describe "find_room" do - # before do - # @front_desk = Hotel::FrontDesk.new - # end - - # it "finds an instance of a room given the room number" do - # room_number = 4 - # expect(@front_desk.find_room(room_number)).must_be_instance_of Hotel::Room - # end - # end - describe "add_reservation" do before do - @dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 7)) + @dates = Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 6) @front_desk.add_reservation(@dates) end @@ -64,7 +53,7 @@ describe "available_rooms" do before do - @dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 7)) + @dates = Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 6) end it "returns an array of all available rooms given a date range" do @@ -90,13 +79,13 @@ expect(@front_desk.available_rooms(@dates).count).must_equal 18 expect(@front_desk.available_rooms(@dates)[0].room_number).must_equal 3 - new_dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 7), end_date: Date.new(2020, 3, 9)) + new_dates = Hotel::DateRange.new(start_date: Date.today + 6, end_date: Date.today + 10) @front_desk.add_reservation(new_dates) expect(@front_desk.available_rooms(@dates).count).must_equal 18 expect(@front_desk.available_rooms(@dates)[0].room_number).must_equal 3 - test_dates = Hotel::DateRange.new(start_date: Date.new(2020, 2, 7), end_date: Date.new(2020, 2, 9)) + test_dates = Hotel::DateRange.new(start_date: Date.today + 1, end_date: Date.today + 2) expect(@front_desk.available_rooms(test_dates).count).must_equal 20 expect(@front_desk.available_rooms(test_dates)[0].room_number).must_equal 1 end @@ -105,7 +94,7 @@ describe "find_reservation_with" do before do - @dates = Hotel::DateRange.new(start_date: Date.new(2020, 3, 4), end_date: Date.new(2020, 3, 7)) + @dates = Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 6) @room = @front_desk.rooms[0] end @@ -131,7 +120,7 @@ describe " total_cost" do before do - @new_reservation = Hotel::Reservation.new(date_range: Hotel::DateRange.new(start_date: Date.new(2020, 3, 1), end_date: Date.new(2020, 3, 4)), room: Hotel::Room.new(room_number: 1, cost: 200)) + @new_reservation = Hotel::Reservation.new(date_range: Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 5), room: Hotel::Room.new(room_number: 1, cost: 200)) end it "calculates total cost of the reservation " do diff --git a/test/reservations_test.rb b/test/reservations_test.rb index 491ae03e2..b47abcd6e 100644 --- a/test/reservations_test.rb +++ b/test/reservations_test.rb @@ -2,7 +2,7 @@ describe "reservations" do before do - @new_reservation = Hotel::Reservation.new(date_range: Hotel::DateRange.new(start_date: Date.new(2020, 3, 1), end_date: Date.new(2020, 3, 4)), room: Hotel::Room.new(room_number: 1, cost: 200)) + @new_reservation = Hotel::Reservation.new(date_range: Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 6), room: Hotel::Room.new(room_number: 1, cost: 200)) end describe "initialize reservations" do From 72aba3b02a87016355e460d929cbfb9f73c27bac Mon Sep 17 00:00:00 2001 From: Yieni Date: Thu, 5 Mar 2020 23:49:58 -0800 Subject: [PATCH 23/30] add hotelblock tests and dry up test code --- lib/front_desk.rb | 1 - lib/hotel_block.rb | 6 +++--- lib/reservations.rb | 1 - lib/room.rb | 1 - test/daterange_test.rb | 27 +++++++++++++-------------- test/front_desk_test.rb | 14 +++++++------- test/hotel_block_test.rb | 22 ++++++++++++++++++++-- test/reservations_test.rb | 2 +- test/rooms_test.rb | 2 +- 9 files changed, 45 insertions(+), 31 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index f7d017140..413a12137 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -1,4 +1,3 @@ -require 'date' require_relative 'room' require_relative 'date_range' require_relative 'reservations' diff --git a/lib/hotel_block.rb b/lib/hotel_block.rb index effc219bb..2be086997 100644 --- a/lib/hotel_block.rb +++ b/lib/hotel_block.rb @@ -1,6 +1,6 @@ -require_relative 'room' -require_relative 'date_range' -require_relative 'reservations' +# require_relative 'room' +# require_relative 'date_range' +# require_relative 'reservations' module Hotel diff --git a/lib/reservations.rb b/lib/reservations.rb index 1a5b50892..2406346d0 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -1,4 +1,3 @@ -require 'date' module Hotel class Reservation diff --git a/lib/room.rb b/lib/room.rb index 7ac88748c..a652e71c9 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,4 +1,3 @@ -require 'date' module Hotel class Room diff --git a/test/daterange_test.rb b/test/daterange_test.rb index eef073e9f..6e237161d 100644 --- a/test/daterange_test.rb +++ b/test/daterange_test.rb @@ -1,7 +1,18 @@ require_relative 'test_helper' describe "DateRange" do + before do + @start_date = Date.today + 2 + @end_date = Date.today + 6 + @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) + end + describe "initialize DateRange" do + + it "creates a DateRange object" do + expect(@date_range).must_be_instance_of Hotel::DateRange + end + it "raises ArgumentError if end date is before start date" do expect{Hotel::DateRange.new(start_date: Date.today + 6, end_date: Date.today + 2)}.must_raise ArgumentError end @@ -11,19 +22,11 @@ end it "creates a range of the start and end dates" do - start_date = Date.today + 2 - end_date = Date.today + 6 - date_range = Hotel::DateRange.new(start_date: start_date, end_date: end_date) - expect(date_range.range).must_equal (start_date..end_date).to_a + expect(@date_range.range).must_equal (@start_date..@end_date).to_a end end describe "overlap?" do - before do - @start_date = Date.today + 2 - @end_date = Date.today + 6 - @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) - end it "returns true if there is overlap between date ranges" do date_range2 = Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 4) @@ -51,13 +54,9 @@ end describe "nights" do - - start_date = Date.today + 2 - end_date = Date.today + 6 - date_range = Hotel::DateRange.new(start_date:start_date, end_date:end_date) it "calculates the number of nights booked" do - expect(date_range.nights).must_equal 4 + expect(@date_range.nights).must_equal 4 end end diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 5f846d2b3..69c1d78f2 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -3,10 +3,15 @@ describe "front desk" do before do @front_desk = Hotel::FrontDesk.new + @dates = Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 6) end - describe "self.rooms" do - + describe "initialize FrontDesk" do + + it "creates a FrontDesk object" do + expect(@front_desk).must_be_instance_of Hotel::FrontDesk + end + it "stores all 20 hotel rooms" do expect(@front_desk.rooms.count).must_equal 20 end @@ -24,7 +29,6 @@ describe "add_reservation" do before do - @dates = Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 6) @front_desk.add_reservation(@dates) end @@ -52,9 +56,6 @@ end describe "available_rooms" do - before do - @dates = Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 6) - end it "returns an array of all available rooms given a date range" do expect(@front_desk.available_rooms(@dates)).must_be_instance_of Array @@ -94,7 +95,6 @@ describe "find_reservation_with" do before do - @dates = Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 6) @room = @front_desk.rooms[0] end diff --git a/test/hotel_block_test.rb b/test/hotel_block_test.rb index 4c3219c08..1cd41ce07 100644 --- a/test/hotel_block_test.rb +++ b/test/hotel_block_test.rb @@ -1,14 +1,32 @@ require_relative 'test_helper' describe "HotelBlock" do - describe "add_block" do + describe "initialize HotelBlock" do + before do + @start_date = Date.today + 2 + @end_date = Date.today + 6 + @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) + end + + it "creates a HotelBlock object" do + expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range, discount_cost: 180)).must_be_instance_of Hotel::HotelBlock + end it "reserves the correct number of rooms" do + + expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range, discount_cost: 180).rooms.count).must_equal 3 + expect(Hotel::HotelBlock.new(block_count: 2, date_range: @date_range, discount_cost: 180).rooms.count).must_equal 2 + expect(Hotel::HotelBlock.new(block_count: 4, date_range: @date_range, discount_cost: 180).rooms.count).must_equal 4 + expect(Hotel::HotelBlock.new(block_count: 5, date_range: @date_range, discount_cost: 180).rooms.count).must_equal 5 end it "raises exception if block_count is not greater than 1 or less than 6" do - + expect{Hotel::HotelBlock.new(block_count: 6, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: 1, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: 0, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: -1, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: "three", date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError end it " raises exception if there aren't enough rooms to fill block" do diff --git a/test/reservations_test.rb b/test/reservations_test.rb index b47abcd6e..57844285e 100644 --- a/test/reservations_test.rb +++ b/test/reservations_test.rb @@ -7,7 +7,7 @@ describe "initialize reservations" do - it "creates an instance of a reservation" do + it "creates a Reservation object" do expect(@new_reservation).must_be_instance_of Hotel::Reservation end diff --git a/test/rooms_test.rb b/test/rooms_test.rb index 2cf067e3d..1293c08f8 100644 --- a/test/rooms_test.rb +++ b/test/rooms_test.rb @@ -7,7 +7,7 @@ @room = Hotel::Room.new(room_number: 1, cost: 200) end - it "creates an instance of a room" do + it "creates a Room object" do expect(@room).must_be_instance_of Hotel::Room end From 7ff3e3f953903441194e166adc13af719ecc5075 Mon Sep 17 00:00:00 2001 From: Yieni Date: Fri, 6 Mar 2020 02:21:07 -0800 Subject: [PATCH 24/30] write request block method --- lib/front_desk.rb | 23 +++++++++++++++++- lib/hotel_block.rb | 37 ++++++++++++++++------------- test/front_desk_test.rb | 27 +++++++++++++++++++++ test/hotel_block_test.rb | 51 +++++++++++++++++++--------------------- 4 files changed, 94 insertions(+), 44 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 413a12137..0e86b0c0c 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -22,7 +22,7 @@ def add_reservation(date_range) available_rooms = available_rooms(date_range) raise NoAvailableRoomError.new("there are no available rooms for that date")if available_rooms.empty? == true - chosen_room = available_rooms.shift + chosen_room = available_rooms[0] new_reservation = Hotel::Reservation.new(date_range: date_range, room: chosen_room) @reservations << new_reservation chosen_room.add_room_reservation(new_reservation) @@ -45,6 +45,27 @@ def total_cost(reservation) return total_cost end + def request_block(block_count, date_range) + available_rooms = available_rooms(date_range) + raise NoAvailableRoomError.new("Not enough available rooms to fulfill block") if available_rooms.count < block_count + + hotel_block = Hotel::HotelBlock.new(block_count: block_count, date_range: date_range) + + x = 0 + until x == block_count do + hotel_block.rooms << available_rooms[x] + x += 1 + end + + @hotel_blocks << hotel_block + end + + # @start_date = Date.today + 2 + # @end_date = Date.today + 6 + # @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) + # hotel_block = Hotel::HotelBlock.new(block_count: 3, date_range: @date_range) + # hotel_block.find_room_4_block(block_count: 3, date_range: @date_range) + # start_date = Date.new(2020,3,1) # end_date = Date.new(2020,3,4) # dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) diff --git a/lib/hotel_block.rb b/lib/hotel_block.rb index 2be086997..4a92af6c6 100644 --- a/lib/hotel_block.rb +++ b/lib/hotel_block.rb @@ -1,23 +1,19 @@ -# require_relative 'room' -# require_relative 'date_range' -# require_relative 'reservations' - - module Hotel class HotelBlock - attr_reader :block_count, :date_range, :discount_cost, :rooms + attr_reader :block_count, :date_range, :discount_cost + attr_accessor :rooms + + def initialize(block_count:, date_range:) + @block_count = block_count + @date_range = date_range + @discount_cost = 180 + @rooms = [] + + raise ArgumentError.new("Block count must be an integer between 2 and 5 inclusive") if @block_count.between?(2,5) == false - def initialize(block_count:, date_range:, discount_cost:) - #raises an exception if you try and add a reservation using FrontDesk's method - #for adding reservations - #takes list of available rooms for the date_range that is passed in that is not already in a block - #if no available rooms/no enough rooms are available to fill block raise the exception that there are none. - #pulls out how many rooms are requested for the block (between 2-5) - #from the block_count that was passed in - # assaigns the discounted cost to the cost of each room - #returns that collection of available rooms w/ new discounted price end + # def add_reservation_to_block(date_range, room) # #allows you to add a reservation for a room by calling out the first room # #from the collection of block rooms @@ -26,4 +22,13 @@ def initialize(block_count:, date_range:, discount_cost:) end -end \ No newline at end of file +end + +#raises an exception if you try and add a reservation using FrontDesk's method + #for adding reservations + #takes list of available rooms for the date_range that is passed in that is not already in a block + #if no available rooms/no enough rooms are available to fill block raise the exception that there are none. + #pulls out how many rooms are requested for the block (between 2-5) + #from the block_count that was passed in + # assaigns the discounted cost to the cost of each room + #returns that collection of available rooms w/ new discounted price \ No newline at end of file diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 69c1d78f2..68aec2086 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -127,4 +127,31 @@ expect(@front_desk.total_cost(@new_reservation)).must_equal 600 end end + + describe "request_block" do + before do + @block_count = 3 + end + + it "reserves the correct number of rooms for the hotel block for given date range" do + @front_desk.request_block( @block_count, @dates) + + expect(@front_desk.hotel_blocks[0].rooms.count).must_equal 3 + # expect(Hotel::HotelBlock.new(block_count: 2, date_range: @dates).rooms.count).must_equal 2 + # expect(Hotel::HotelBlock.new(block_count: 4, date_range: @dates).rooms.count).must_equal 4 + # expect(Hotel::HotelBlock.new(block_count: 5, date_range: @dates).rooms.count).must_equal 5 + + end + + it " raises exception if there aren't enough rooms to fill block for given date range" do + 19.times do + @front_desk.add_reservation(@dates) + end + + expect{@front_desk.request_block(@block_count, @dates)}.must_raise NoAvailableRoomError + + end + + end + end \ No newline at end of file diff --git a/test/hotel_block_test.rb b/test/hotel_block_test.rb index 1cd41ce07..b1488afff 100644 --- a/test/hotel_block_test.rb +++ b/test/hotel_block_test.rb @@ -1,43 +1,40 @@ require_relative 'test_helper' describe "HotelBlock" do - describe "initialize HotelBlock" do + before do + @start_date = Date.today + 2 + @end_date = Date.today + 6 + @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) + end - before do - @start_date = Date.today + 2 - @end_date = Date.today + 6 - @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) - end + describe "initialize HotelBlock" do it "creates a HotelBlock object" do - expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range, discount_cost: 180)).must_be_instance_of Hotel::HotelBlock + expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range)).must_be_instance_of Hotel::HotelBlock end - it "reserves the correct number of rooms" do - - expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range, discount_cost: 180).rooms.count).must_equal 3 - expect(Hotel::HotelBlock.new(block_count: 2, date_range: @date_range, discount_cost: 180).rooms.count).must_equal 2 - expect(Hotel::HotelBlock.new(block_count: 4, date_range: @date_range, discount_cost: 180).rooms.count).must_equal 4 - expect(Hotel::HotelBlock.new(block_count: 5, date_range: @date_range, discount_cost: 180).rooms.count).must_equal 5 - - end - + it "raises exception if block_count is not greater than 1 or less than 6" do - expect{Hotel::HotelBlock.new(block_count: 6, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError - expect{Hotel::HotelBlock.new(block_count: 1, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError - expect{Hotel::HotelBlock.new(block_count: 0, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError - expect{Hotel::HotelBlock.new(block_count: -1, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError - expect{Hotel::HotelBlock.new(block_count: "three", date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: 6, date_range: @date_range).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: 1, date_range: @date_range).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: 0, date_range: @date_range).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: -1, date_range: @date_range).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: "three", date_range: @date_range).rooms.count}.must_raise ArgumentError end - it " raises exception if there aren't enough rooms to fill block" do - - end + - it "sets aside the rooms and doesn't allow someone out of the block to reserve a room in the block" do - - end end + + # describe "change_block_status" do + + # it "changes the block status of the found room" do + # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[0]).block_status).must_equal :in_block + # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[1]).block_status).must_equal :in_block + # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[2]).block_status).must_equal :in_block + # end + + # end # describe "add_reservation_to_block" do # it "reserves the correct number of rooms" do From a43b155d4749fa7e8c3a0fc0caa869d3ce5f1c64 Mon Sep 17 00:00:00 2001 From: Yieni Date: Fri, 6 Mar 2020 15:27:51 -0800 Subject: [PATCH 25/30] write change block status and change block availability methods --- lib/front_desk.rb | 15 +++++++++++--- lib/hotel_block.rb | 14 ++++--------- lib/room.rb | 9 ++++++++ test/front_desk_test.rb | 5 +++-- test/hotel_block_test.rb | 18 ++++++++-------- test/rooms_test.rb | 44 +++++++++++++++++++++++++++++++++++++--- 6 files changed, 78 insertions(+), 27 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 0e86b0c0c..455da5308 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -33,6 +33,10 @@ def available_rooms(date_range) room.reservations.any?{|reservation| reservation.date_range.overlap?(date_range) == true} end return available_rooms + + #"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" + #the above user story was confusing because I was not sure if it's asking to see all available rooms for a specific date range or for one specific day. + #I interpreted it to mean for a specific date range. Because even if you are only booking for one day, hotels make you include a start and end date, even if it's the same date for both. end def find_reservation_with(room: nil, date_range:) @@ -45,21 +49,26 @@ def total_cost(reservation) return total_cost end - def request_block(block_count, date_range) + def request_block(block_count, date_range, discount_cost) available_rooms = available_rooms(date_range) raise NoAvailableRoomError.new("Not enough available rooms to fulfill block") if available_rooms.count < block_count - hotel_block = Hotel::HotelBlock.new(block_count: block_count, date_range: date_range) + hotel_block = Hotel::HotelBlock.new(block_count: block_count, date_range: date_range, discount_cost: discount_cost) x = 0 until x == block_count do - hotel_block.rooms << available_rooms[x] + available_room = available_rooms[x].change_block_status + hotel_block.rooms << available_room x += 1 end @hotel_blocks << hotel_block end + + + + # @start_date = Date.today + 2 # @end_date = Date.today + 6 # @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) diff --git a/lib/hotel_block.rb b/lib/hotel_block.rb index 4a92af6c6..b12cdb667 100644 --- a/lib/hotel_block.rb +++ b/lib/hotel_block.rb @@ -3,23 +3,17 @@ class HotelBlock attr_reader :block_count, :date_range, :discount_cost attr_accessor :rooms - def initialize(block_count:, date_range:) - @block_count = block_count + def initialize(block_count:, date_range:, discount_cost:) + @block_count = block_count # I interpreted the user story "collection of rooms" to mean I can pass it a + #count and the count determines how many rooms to request for the block. @date_range = date_range - @discount_cost = 180 + @discount_cost = discount_cost @rooms = [] raise ArgumentError.new("Block count must be an integer between 2 and 5 inclusive") if @block_count.between?(2,5) == false end - - # def add_reservation_to_block(date_range, room) - # #allows you to add a reservation for a room by calling out the first room - # #from the collection of block rooms - # end - - end end diff --git a/lib/room.rb b/lib/room.rb index a652e71c9..1acdac284 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -20,5 +20,14 @@ def add_room_reservation(reservation) @reservations << reservation end + + def change_block_status + @block_status = :in_block + end + + def change_availability_in_block + @availability_in_block = :unavailable + end + end end diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 68aec2086..9f838c632 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -131,10 +131,11 @@ describe "request_block" do before do @block_count = 3 + @discount_cost = 180 end it "reserves the correct number of rooms for the hotel block for given date range" do - @front_desk.request_block( @block_count, @dates) + @front_desk.request_block( @block_count, @dates, @discount_cost) expect(@front_desk.hotel_blocks[0].rooms.count).must_equal 3 # expect(Hotel::HotelBlock.new(block_count: 2, date_range: @dates).rooms.count).must_equal 2 @@ -148,7 +149,7 @@ @front_desk.add_reservation(@dates) end - expect{@front_desk.request_block(@block_count, @dates)}.must_raise NoAvailableRoomError + expect{@front_desk.request_block(@block_count, @dates, @discount_cost)}.must_raise NoAvailableRoomError end diff --git a/test/hotel_block_test.rb b/test/hotel_block_test.rb index b1488afff..9d0588ae3 100644 --- a/test/hotel_block_test.rb +++ b/test/hotel_block_test.rb @@ -10,15 +10,15 @@ describe "initialize HotelBlock" do it "creates a HotelBlock object" do - expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range)).must_be_instance_of Hotel::HotelBlock + expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range, discount_cost: 180)).must_be_instance_of Hotel::HotelBlock end it "raises exception if block_count is not greater than 1 or less than 6" do - expect{Hotel::HotelBlock.new(block_count: 6, date_range: @date_range).rooms.count}.must_raise ArgumentError - expect{Hotel::HotelBlock.new(block_count: 1, date_range: @date_range).rooms.count}.must_raise ArgumentError - expect{Hotel::HotelBlock.new(block_count: 0, date_range: @date_range).rooms.count}.must_raise ArgumentError - expect{Hotel::HotelBlock.new(block_count: -1, date_range: @date_range).rooms.count}.must_raise ArgumentError - expect{Hotel::HotelBlock.new(block_count: "three", date_range: @date_range).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: 6, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: 1, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: 0, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: -1, date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError + expect{Hotel::HotelBlock.new(block_count: "three", date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError end @@ -29,9 +29,9 @@ # describe "change_block_status" do # it "changes the block status of the found room" do - # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[0]).block_status).must_equal :in_block - # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[1]).block_status).must_equal :in_block - # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[2]).block_status).must_equal :in_block + # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[0], discount_cost: 180).block_status).must_equal :in_block + # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[1], discount_cost: 180).block_status).must_equal :in_block + # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[2], discount_cost: 180).block_status).must_equal :in_block # end # end diff --git a/test/rooms_test.rb b/test/rooms_test.rb index 1293c08f8..77ba857bc 100644 --- a/test/rooms_test.rb +++ b/test/rooms_test.rb @@ -1,11 +1,11 @@ require_relative 'test_helper' describe "rooms" do + before do + @room = Hotel::Room.new(room_number: 1, cost: 200) + end describe "initializing room" do - before do - @room = Hotel::Room.new(room_number: 1, cost: 200) - end it "creates a Room object" do expect(@room).must_be_instance_of Hotel::Room @@ -16,4 +16,42 @@ expect{Hotel::Room.new(room_number: -1, cost: 200)}.must_raise ArgumentError end end + + describe "add_room_reservation" do + # TODO write a let statement of new reservatio and room.add_res + it "adds a reservation to a room object" do + expect(@room.reservations.empty?).must_equal true + + @new_reservation = Hotel::Reservation.new(date_range: Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 6), room: Hotel::Room.new(room_number: 1, cost: 200)) + @room.add_room_reservation(@new_reservation) + expect(@room.reservations.count).must_equal 1 + end + + it "adds and reservation object to the collection of reservations in the room" do + @new_reservation = Hotel::Reservation.new(date_range: Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 6), room: Hotel::Room.new(room_number: 1, cost: 200)) + @room.add_room_reservation(@new_reservation) + expect(@room.reservations.empty?).must_equal false + expect(@room.reservations[0]).must_be_instance_of Hotel::Reservation + end + end + + describe "change_block_status" do + it "changes the block status to in block" do + expect(@room.block_status).must_equal :not_in_block + + @room.change_block_status + expect(@room.block_status).must_equal :in_block + end + + end + + describe "change_availability_in_block" do + it "changes the availabilty of the room in the block to :unavailable" do + expect(@room.availability_in_block).must_equal :available + + @room.change_availability_in_block + expect(@room.availability_in_block).must_equal :unavailable + end + + end end \ No newline at end of file From f7d7db68a7772b9ea7df6a0231edd2eb68aa35bb Mon Sep 17 00:00:00 2001 From: Yieni Date: Sat, 7 Mar 2020 05:15:08 -0800 Subject: [PATCH 26/30] refactor available rooms method to account for rooms in block --- lib/front_desk.rb | 41 ++++++++++++++++++++++++----------------- lib/room.rb | 18 ++++++++++++++---- test/rooms_test.rb | 10 ++++++++++ 3 files changed, 48 insertions(+), 21 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 455da5308..6a0521e7b 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -2,6 +2,7 @@ require_relative 'date_range' require_relative 'reservations' require_relative 'hotel_block' +require_relative 'no_available_room_error' module Hotel class FrontDesk @@ -18,7 +19,7 @@ def initialize @hotel_blocks = [] end - def add_reservation(date_range) + def add_reservation(date_range) #TODO check/rewtire tests available_rooms = available_rooms(date_range) raise NoAvailableRoomError.new("there are no available rooms for that date")if available_rooms.empty? == true @@ -28,9 +29,12 @@ def add_reservation(date_range) chosen_room.add_room_reservation(new_reservation) end - def available_rooms(date_range) + def available_rooms(date_range) #TODO rewrite tests available_rooms = @rooms.reject do |room| - room.reservations.any?{|reservation| reservation.date_range.overlap?(date_range) == true} + room.block_status == :in_block + end + available_rooms = available_rooms.reject do |room| + room.reservations.any?{|reservation| reservation.date_range.overlap?(date_range) == true} end return available_rooms @@ -57,34 +61,37 @@ def request_block(block_count, date_range, discount_cost) x = 0 until x == block_count do - available_room = available_rooms[x].change_block_status + available_room = available_rooms[x].change_cost(discount_cost) + available_room = available_room.change_block_status hotel_block.rooms << available_room x += 1 end - @hotel_blocks << hotel_block + return hotel_block end - - # @start_date = Date.today + 2 - # @end_date = Date.today + 6 + + # @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) # hotel_block = Hotel::HotelBlock.new(block_count: 3, date_range: @date_range) # hotel_block.find_room_4_block(block_count: 3, date_range: @date_range) - # start_date = Date.new(2020,3,1) - # end_date = Date.new(2020,3,4) - # dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) - # front_desk = Hotel::FrontDesk.new - # room = front_desk.rooms[0] + # start_date = Date.today + 2 + # end_date = Date.today + 6 + # dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) + # front_desk = Hotel::FrontDesk.new + # p front_desk.request_block(3,dates, 180) + # puts "\n" + # 17.times do + # p front_desk.add_reservation(dates) + # end + # puts "\n" + # p front_desk.request_block(4,dates, 180) + - # front_desk.add_reservation(dates) - # p front_desk.find_reservation_with( date_range: dates) - # puts "\n" - # p front_desk.find_reservation_with( room: room, date_range: dates) diff --git a/lib/room.rb b/lib/room.rb index 1acdac284..92b324467 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -20,14 +20,24 @@ def add_room_reservation(reservation) @reservations << reservation end + def change_cost(discount_cost) + self.cost = discount_cost + return self + end - def change_block_status - @block_status = :in_block + def change_block_status + self.block_status = :in_block + return self end - def change_availability_in_block - @availability_in_block = :unavailable + def change_availability_in_block + self.availability_in_block = :unavailable + return self end end end + +room = Hotel::Room.new(room_number: 1, cost: 200) +puts room.change_cost(180) +puts room.cost \ No newline at end of file diff --git a/test/rooms_test.rb b/test/rooms_test.rb index 77ba857bc..fd05888e9 100644 --- a/test/rooms_test.rb +++ b/test/rooms_test.rb @@ -54,4 +54,14 @@ end end + + describe "change_cost" do + it "changes the cost of the room" do + expect(@room.cost).must_equal 200 + + @room.change_cost(180) + expect(@room.cost).must_equal 180 + end + + end end \ No newline at end of file From 67e8b5bec44708800788aeeecd5bb7777d700f2d Mon Sep 17 00:00:00 2001 From: Yieni Date: Sat, 7 Mar 2020 21:32:14 -0800 Subject: [PATCH 27/30] write check block status method --- lib/front_desk.rb | 70 +++++++++++++++++++++++------------------ lib/reservations.rb | 2 ++ lib/room.rb | 36 ++++++++++----------- test/front_desk_test.rb | 43 ++++++++++++++++++++++--- test/rooms_test.rb | 42 ++++++++++++------------- 5 files changed, 120 insertions(+), 73 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 6a0521e7b..7c1e50aa9 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -19,8 +19,9 @@ def initialize @hotel_blocks = [] end - def add_reservation(date_range) #TODO check/rewtire tests - available_rooms = available_rooms(date_range) + def add_reservation(date_range) + available_rooms = check_block_status(date_range) + raise NoAvailableRoomError.new("there are no available rooms for that date")if available_rooms.empty? == true chosen_room = available_rooms[0] @@ -31,16 +32,10 @@ def add_reservation(date_range) #TODO check/rewtire tests def available_rooms(date_range) #TODO rewrite tests available_rooms = @rooms.reject do |room| - room.block_status == :in_block - end - available_rooms = available_rooms.reject do |room| room.reservations.any?{|reservation| reservation.date_range.overlap?(date_range) == true} end return available_rooms - #"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" - #the above user story was confusing because I was not sure if it's asking to see all available rooms for a specific date range or for one specific day. - #I interpreted it to mean for a specific date range. Because even if you are only booking for one day, hotels make you include a start and end date, even if it's the same date for both. end def find_reservation_with(room: nil, date_range:) @@ -48,21 +43,37 @@ def find_reservation_with(room: nil, date_range:) return res_w_given_date end - def total_cost(reservation) - total_cost = reservation.date_range.nights * reservation.room.cost + def total_cost(reservation) #TODO rewrite tests + if reservation.block_reservation == false + total_cost = reservation.date_range.nights * reservation.room.cost + else + total_cost = reservation.date_range.nights * (reservation.room.cost * (1-reservation.room.discount_cost)) + end return total_cost end - def request_block(block_count, date_range, discount_cost) + def check_block_status(date_range) available_rooms = available_rooms(date_range) + @hotel_blocks.each do |hotel_block| + if hotel_block.date_range.overlap?(date_range) == true + hotel_block.rooms.each do |block_room| + available_rooms.delete(block_room) + end + end + end + return available_rooms + end + + def request_block(block_count, date_range, discount_cost) + available_rooms = check_block_status(date_range) raise NoAvailableRoomError.new("Not enough available rooms to fulfill block") if available_rooms.count < block_count hotel_block = Hotel::HotelBlock.new(block_count: block_count, date_range: date_range, discount_cost: discount_cost) x = 0 until x == block_count do - available_room = available_rooms[x].change_cost(discount_cost) - available_room = available_room.change_block_status + available_room = available_rooms[x] + available_room.discount_cost = discount_cost hotel_block.rooms << available_room x += 1 end @@ -71,7 +82,10 @@ def request_block(block_count, date_range, discount_cost) end - + # def available_rooms_in_block(hotel_block) + # available_rooms = hotel_block.rooms.select {|room| room.reservations.empty? == true} + + # end @@ -79,21 +93,17 @@ def request_block(block_count, date_range, discount_cost) # hotel_block = Hotel::HotelBlock.new(block_count: 3, date_range: @date_range) # hotel_block.find_room_4_block(block_count: 3, date_range: @date_range) - # start_date = Date.today + 2 - # end_date = Date.today + 6 - # dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) - # front_desk = Hotel::FrontDesk.new - # p front_desk.request_block(3,dates, 180) - # puts "\n" - # 17.times do - # p front_desk.add_reservation(dates) - # end - # puts "\n" - # p front_desk.request_block(4,dates, 180) - - - - - + start_date = Date.today + 2 + end_date = Date.today + 6 + dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) + dates2 = Hotel::DateRange.new(start_date: (start_date - 2), end_date: (end_date - 5)) + front_desk = Hotel::FrontDesk.new + p front_desk.request_block(3,dates, 0.2) + puts "\n" + 2.times do + p front_desk.add_reservation(dates) + end + puts "\n" + p front_desk.request_block(4,dates2, 0.2) end end diff --git a/lib/reservations.rb b/lib/reservations.rb index 2406346d0..b555af7b9 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -2,10 +2,12 @@ module Hotel class Reservation attr_reader :date_range, :room + attr_accessor :block_reservation def initialize(date_range:, room: nil) @date_range = date_range @room = room + @block_reservation = true || false end end diff --git a/lib/room.rb b/lib/room.rb index 92b324467..4b9e78612 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -2,7 +2,7 @@ module Hotel class Room attr_reader :room_number - attr_accessor :cost, :reservations, :block_status, :availability_in_block + attr_accessor :cost, :reservations, :discount_cost def initialize(room_number:, cost:, reservations: nil) @room_number = room_number @@ -11,8 +11,7 @@ def initialize(room_number:, cost:, reservations: nil) @cost = 200 @reservations = reservations || [] - @block_status = :not_in_block || :in_block - @availability_in_block = :available || :unavailable + @discount_cost = 0 end @@ -20,24 +19,25 @@ def add_room_reservation(reservation) @reservations << reservation end - def change_cost(discount_cost) - self.cost = discount_cost - return self - end + # def change_cost(discount_cost) + # self.cost = discount_cost + # return self + # end - def change_block_status - self.block_status = :in_block - return self - end + # def change_block_status + # self.block_status = :in_block #rooms status should only be this for the duration (date_range) of block + # return self + # end - def change_availability_in_block - self.availability_in_block = :unavailable - return self - end + + # def change_availability_in_block + # self.availability_in_block = :unavailable + # return self + # end end end -room = Hotel::Room.new(room_number: 1, cost: 200) -puts room.change_cost(180) -puts room.cost \ No newline at end of file +# room = Hotel::Room.new(room_number: 1, cost: 200) +# puts room.change_cost(180) +# puts room.cost \ No newline at end of file diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 9f838c632..89d8af883 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -45,6 +45,12 @@ expect(@front_desk.reservations[0].room).must_be_instance_of Hotel::Room end + it "does not add a reservation to a room if the room is not in a block" do + @front_desk.request_block(3, @dates, 180) + @front_desk.add_reservation(@dates) + expect(@front_desk.reservations[1].room.room_number).must_equal 5 + end + it "adds a reservation object to collection of reservations" do expect(@front_desk.reservations[0]).must_be_instance_of Hotel::Reservation end @@ -125,22 +131,25 @@ it "calculates total cost of the reservation " do expect(@front_desk.total_cost(@new_reservation)).must_equal 600 + + block_count = 3 + discount_cost = 0.2 + + @front_desk.request_block( block_count, @dates, discount_cost) + end end describe "request_block" do before do @block_count = 3 - @discount_cost = 180 + @discount_cost = 0.2 end it "reserves the correct number of rooms for the hotel block for given date range" do @front_desk.request_block( @block_count, @dates, @discount_cost) expect(@front_desk.hotel_blocks[0].rooms.count).must_equal 3 - # expect(Hotel::HotelBlock.new(block_count: 2, date_range: @dates).rooms.count).must_equal 2 - # expect(Hotel::HotelBlock.new(block_count: 4, date_range: @dates).rooms.count).must_equal 4 - # expect(Hotel::HotelBlock.new(block_count: 5, date_range: @dates).rooms.count).must_equal 5 end @@ -152,7 +161,33 @@ expect{@front_desk.request_block(@block_count, @dates, @discount_cost)}.must_raise NoAvailableRoomError end + + + it "does not add room to a block for a given date range if that room is already in a block" do + @front_desk.request_block( @block_count, @dates, @discount_cost) + + expect(@front_desk.request_block( @block_count, @dates, @discount_cost).rooms[0].room_number).must_equal 4 + expect(@front_desk.request_block( @block_count, @dates, @discount_cost).rooms[0].room_number).must_equal 7 + expect(@front_desk.request_block( @block_count, @dates, @discount_cost).rooms[0].room_number).must_equal 10 + + end end + describe "check_block_status" do + before do + @block_count = 3 + @discount_cost = 0.2 + end + + it "deletes rooms in block from available rooms if there is overlap" do + @front_desk.request_block( @block_count, @dates, @discount_cost) + new_dates = Hotel::DateRange.new(start_date: Date.today + 6, end_date: Date.today + 10) + + expect(@front_desk.check_block_status(@dates).count).must_equal 17 + expect(@front_desk.check_block_status(new_dates).count).must_equal 20 + + end + end + end \ No newline at end of file diff --git a/test/rooms_test.rb b/test/rooms_test.rb index fd05888e9..9ca097008 100644 --- a/test/rooms_test.rb +++ b/test/rooms_test.rb @@ -35,33 +35,33 @@ end end - describe "change_block_status" do - it "changes the block status to in block" do - expect(@room.block_status).must_equal :not_in_block + # describe "change_block_status" do + # it "changes the block status to in block" do + # expect(@room.block_status).must_equal :not_in_block - @room.change_block_status - expect(@room.block_status).must_equal :in_block - end + # @room.change_block_status + # expect(@room.block_status).must_equal :in_block + # end - end + # end - describe "change_availability_in_block" do - it "changes the availabilty of the room in the block to :unavailable" do - expect(@room.availability_in_block).must_equal :available + # describe "change_availability_in_block" do + # it "changes the availabilty of the room in the block to :unavailable" do + # expect(@room.availability_in_block).must_equal :available - @room.change_availability_in_block - expect(@room.availability_in_block).must_equal :unavailable - end + # @room.change_availability_in_block + # expect(@room.availability_in_block).must_equal :unavailable + # end - end + # end - describe "change_cost" do - it "changes the cost of the room" do - expect(@room.cost).must_equal 200 + # describe "change_cost" do + # it "changes the cost of the room" do + # expect(@room.cost).must_equal 200 - @room.change_cost(180) - expect(@room.cost).must_equal 180 - end + # @room.change_cost(180) + # expect(@room.cost).must_equal 180 + # end - end + # end end \ No newline at end of file From c877a9024df4382a2cdfc817287ceb30febfbb46 Mon Sep 17 00:00:00 2001 From: Yieni Date: Sat, 7 Mar 2020 23:28:18 -0800 Subject: [PATCH 28/30] write add reservation to room in block method --- lib/front_desk.rb | 49 +++++++++++++++++++++++++++++---------------- lib/reservations.rb | 2 +- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 7c1e50aa9..9583315c4 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -82,28 +82,43 @@ def request_block(block_count, date_range, discount_cost) end - # def available_rooms_in_block(hotel_block) - # available_rooms = hotel_block.rooms.select {|room| room.reservations.empty? == true} - - # end - + def available_rooms_in_block(hotel_block) #TODO write test + available_rooms = hotel_block.rooms.select{|room| room.reservations.empty? == true || room.reservations.any?{|reservation| reservation.date_range.overlap?(hotel_block.date_range) == false}} + return available_rooms + end + def add_reservation_to_room_in_block(hotel_block) #TODO write test + available_rooms = available_rooms_in_block(hotel_block) + chosen_room = available_rooms[0] + new_reservation = Hotel::Reservation.new(date_range: hotel_block.date_range, room: chosen_room) + new_reservation.block_reservation = true + @reservations << new_reservation + chosen_room.add_room_reservation(new_reservation) + end # @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) # hotel_block = Hotel::HotelBlock.new(block_count: 3, date_range: @date_range) # hotel_block.find_room_4_block(block_count: 3, date_range: @date_range) - start_date = Date.today + 2 - end_date = Date.today + 6 - dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) - dates2 = Hotel::DateRange.new(start_date: (start_date - 2), end_date: (end_date - 5)) - front_desk = Hotel::FrontDesk.new - p front_desk.request_block(3,dates, 0.2) - puts "\n" - 2.times do - p front_desk.add_reservation(dates) - end - puts "\n" - p front_desk.request_block(4,dates2, 0.2) + # start_date = Date.today + 2 + # end_date = Date.today + 6 + # dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) + # dates2 = Hotel::DateRange.new(start_date: (start_date - 2), end_date: (end_date - 5)) + # front_desk = Hotel::FrontDesk.new + # p front_desk.request_block(3,dates, 0.2) + # puts "\n" + # 2.times do + # p front_desk.add_reservation(dates) + # end + # puts "\n" + # p block1 = front_desk.request_block(4,dates2, 0.2) + # puts "\n" + # p front_desk.available_rooms_in_block(block1) + # puts "\n" + # p front_desk.add_reservation_to_room_in_block(block1) + # puts "\n" + # p front_desk.available_rooms_in_block(block1) + # puts "\n" + # p front_desk.reservations end end diff --git a/lib/reservations.rb b/lib/reservations.rb index b555af7b9..9b60dde9a 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -7,7 +7,7 @@ class Reservation def initialize(date_range:, room: nil) @date_range = date_range @room = room - @block_reservation = true || false + @block_reservation = block_reservation end end From 4cacc0bad2fb68f79ccad28d769559657a26b772 Mon Sep 17 00:00:00 2001 From: Yieni Date: Sun, 8 Mar 2020 23:08:13 -0700 Subject: [PATCH 29/30] final working code --- lib/front_desk.rb | 39 +++++++------------------------ lib/hotel_block.rb | 9 -------- lib/room.rb | 23 ++++-------------- test/front_desk_test.rb | 50 ++++++++++++++++++++++++++-------------- test/hotel_block_test.rb | 26 --------------------- test/rooms_test.rb | 36 +++++++---------------------- 6 files changed, 53 insertions(+), 130 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 9583315c4..cc8db5b69 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -28,9 +28,10 @@ def add_reservation(date_range) new_reservation = Hotel::Reservation.new(date_range: date_range, room: chosen_room) @reservations << new_reservation chosen_room.add_room_reservation(new_reservation) + return new_reservation end - def available_rooms(date_range) #TODO rewrite tests + def available_rooms(date_range) available_rooms = @rooms.reject do |room| room.reservations.any?{|reservation| reservation.date_range.overlap?(date_range) == true} end @@ -43,11 +44,11 @@ def find_reservation_with(room: nil, date_range:) return res_w_given_date end - def total_cost(reservation) #TODO rewrite tests + def total_cost(reservation) if reservation.block_reservation == false total_cost = reservation.date_range.nights * reservation.room.cost else - total_cost = reservation.date_range.nights * (reservation.room.cost * (1-reservation.room.discount_cost)) + total_cost = reservation.date_range.nights * reservation.room.cost * (1-reservation.room.discount_cost) end return total_cost end @@ -73,7 +74,7 @@ def request_block(block_count, date_range, discount_cost) x = 0 until x == block_count do available_room = available_rooms[x] - available_room.discount_cost = discount_cost + available_room.change_cost(discount_cost) hotel_block.rooms << available_room x += 1 end @@ -82,43 +83,19 @@ def request_block(block_count, date_range, discount_cost) end - def available_rooms_in_block(hotel_block) #TODO write test + def available_rooms_in_block(hotel_block) available_rooms = hotel_block.rooms.select{|room| room.reservations.empty? == true || room.reservations.any?{|reservation| reservation.date_range.overlap?(hotel_block.date_range) == false}} return available_rooms end - def add_reservation_to_room_in_block(hotel_block) #TODO write test + def add_reservation_to_room_in_block(hotel_block) available_rooms = available_rooms_in_block(hotel_block) chosen_room = available_rooms[0] new_reservation = Hotel::Reservation.new(date_range: hotel_block.date_range, room: chosen_room) new_reservation.block_reservation = true @reservations << new_reservation chosen_room.add_room_reservation(new_reservation) + return new_reservation end - - # @date_range = Hotel::DateRange.new(start_date: @start_date, end_date: @end_date) - # hotel_block = Hotel::HotelBlock.new(block_count: 3, date_range: @date_range) - # hotel_block.find_room_4_block(block_count: 3, date_range: @date_range) - - # start_date = Date.today + 2 - # end_date = Date.today + 6 - # dates = Hotel::DateRange.new(start_date: start_date, end_date: end_date) - # dates2 = Hotel::DateRange.new(start_date: (start_date - 2), end_date: (end_date - 5)) - # front_desk = Hotel::FrontDesk.new - # p front_desk.request_block(3,dates, 0.2) - # puts "\n" - # 2.times do - # p front_desk.add_reservation(dates) - # end - # puts "\n" - # p block1 = front_desk.request_block(4,dates2, 0.2) - # puts "\n" - # p front_desk.available_rooms_in_block(block1) - # puts "\n" - # p front_desk.add_reservation_to_room_in_block(block1) - # puts "\n" - # p front_desk.available_rooms_in_block(block1) - # puts "\n" - # p front_desk.reservations end end diff --git a/lib/hotel_block.rb b/lib/hotel_block.rb index b12cdb667..c655da3e7 100644 --- a/lib/hotel_block.rb +++ b/lib/hotel_block.rb @@ -17,12 +17,3 @@ def initialize(block_count:, date_range:, discount_cost:) end end - -#raises an exception if you try and add a reservation using FrontDesk's method - #for adding reservations - #takes list of available rooms for the date_range that is passed in that is not already in a block - #if no available rooms/no enough rooms are available to fill block raise the exception that there are none. - #pulls out how many rooms are requested for the block (between 2-5) - #from the block_count that was passed in - # assaigns the discounted cost to the cost of each room - #returns that collection of available rooms w/ new discounted price \ No newline at end of file diff --git a/lib/room.rb b/lib/room.rb index 4b9e78612..4a60595ad 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -19,25 +19,10 @@ def add_room_reservation(reservation) @reservations << reservation end - # def change_cost(discount_cost) - # self.cost = discount_cost - # return self - # end - - # def change_block_status - # self.block_status = :in_block #rooms status should only be this for the duration (date_range) of block - # return self - # end - - - # def change_availability_in_block - # self.availability_in_block = :unavailable - # return self - # end + def change_cost(discount_cost) + self.discount_cost = discount_cost + return self + end end end - -# room = Hotel::Room.new(room_number: 1, cost: 200) -# puts room.change_cost(180) -# puts room.cost \ No newline at end of file diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 89d8af883..85b9172fb 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -4,6 +4,8 @@ before do @front_desk = Hotel::FrontDesk.new @dates = Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 6) + @block_count = 3 + @discount_cost = 0.2 end describe "initialize FrontDesk" do @@ -125,26 +127,21 @@ end describe " total_cost" do - before do - @new_reservation = Hotel::Reservation.new(date_range: Hotel::DateRange.new(start_date: Date.today + 2, end_date: Date.today + 5), room: Hotel::Room.new(room_number: 1, cost: 200)) - end - it "calculates total cost of the reservation " do - expect(@front_desk.total_cost(@new_reservation)).must_equal 600 - - block_count = 3 - discount_cost = 0.2 + it "calculates total cost of the reservation not in block " do + new_reservation = @front_desk.add_reservation(@dates) + expect(@front_desk.total_cost(new_reservation)).must_equal 800 + end - @front_desk.request_block( block_count, @dates, discount_cost) + it "calculates total cost of a reservation in a block " do + block1 = @front_desk.request_block( @block_count, @dates, @discount_cost) + block_reservation = @front_desk.add_reservation_to_room_in_block(block1) + expect(@front_desk.total_cost(block_reservation)).must_equal 640 end end describe "request_block" do - before do - @block_count = 3 - @discount_cost = 0.2 - end it "reserves the correct number of rooms for the hotel block for given date range" do @front_desk.request_block( @block_count, @dates, @discount_cost) @@ -175,10 +172,6 @@ end describe "check_block_status" do - before do - @block_count = 3 - @discount_cost = 0.2 - end it "deletes rooms in block from available rooms if there is overlap" do @front_desk.request_block( @block_count, @dates, @discount_cost) @@ -190,4 +183,27 @@ end end + describe "available_rooms_in_block" do + it "returns all rooms that are available for reservations" do + block1 = @front_desk.request_block( @block_count, @dates, @discount_cost) + expect(@front_desk.available_rooms_in_block(block1).count).must_equal 3 + expect(@front_desk.available_rooms_in_block(block1)[0].room_number).must_equal 1 + expect(@front_desk.available_rooms_in_block(block1)[1].room_number).must_equal 2 + expect(@front_desk.available_rooms_in_block(block1)[2].room_number).must_equal 3 + + @front_desk.add_reservation_to_room_in_block(block1) + expect(@front_desk.available_rooms_in_block(block1).count).must_equal 2 + expect(@front_desk.available_rooms_in_block(block1)[0].room_number).must_equal 2 + expect(@front_desk.available_rooms_in_block(block1)[1].room_number).must_equal 3 + end + end + + describe "add_reservation_to_room_in_block" do + it "adds a reservation to the first availavle room in the block" do + block1 = @front_desk.request_block( @block_count, @dates, @discount_cost) + @front_desk.add_reservation_to_room_in_block(block1) + expect(block1.rooms[0].reservations[0].date_range).must_equal @dates + + end + end end \ No newline at end of file diff --git a/test/hotel_block_test.rb b/test/hotel_block_test.rb index 9d0588ae3..e719fb5c6 100644 --- a/test/hotel_block_test.rb +++ b/test/hotel_block_test.rb @@ -21,33 +21,7 @@ expect{Hotel::HotelBlock.new(block_count: "three", date_range: @date_range, discount_cost: 180).rooms.count}.must_raise ArgumentError end - - end - - # describe "change_block_status" do - - # it "changes the block status of the found room" do - # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[0], discount_cost: 180).block_status).must_equal :in_block - # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[1], discount_cost: 180).block_status).must_equal :in_block - # expect(Hotel::HotelBlock.new(block_count: 3, date_range: @date_range.rooms[2], discount_cost: 180).block_status).must_equal :in_block - # end - - # end - # describe "add_reservation_to_block" do - - # it "reserves the correct number of rooms" do - - # end - - # it "raises exception if block_count is not greater than 1 or less than 6" do - - # end - - # it " raises exception if there aren't enough rooms to fill block" do - - # end - # end end diff --git a/test/rooms_test.rb b/test/rooms_test.rb index 9ca097008..c5ab9c633 100644 --- a/test/rooms_test.rb +++ b/test/rooms_test.rb @@ -35,33 +35,13 @@ end end - # describe "change_block_status" do - # it "changes the block status to in block" do - # expect(@room.block_status).must_equal :not_in_block - - # @room.change_block_status - # expect(@room.block_status).must_equal :in_block - # end - - # end - - # describe "change_availability_in_block" do - # it "changes the availabilty of the room in the block to :unavailable" do - # expect(@room.availability_in_block).must_equal :available - - # @room.change_availability_in_block - # expect(@room.availability_in_block).must_equal :unavailable - # end - - # end - - # describe "change_cost" do - # it "changes the cost of the room" do - # expect(@room.cost).must_equal 200 + describe "change_cost" do + it "changes the discount cost rate" do + expect(@room.discount_cost).must_equal 0 - # @room.change_cost(180) - # expect(@room.cost).must_equal 180 - # end - - # end + discount_cost = 0.2 + @room.change_cost(discount_cost) + expect(@room.discount_cost).must_equal discount_cost + end + end end \ No newline at end of file From 585309c7c5cc9737c2f27a821630196171aaa869 Mon Sep 17 00:00:00 2001 From: Yieni Date: Sun, 8 Mar 2020 23:39:02 -0700 Subject: [PATCH 30/30] add refactor text file --- lib/front_desk.rb | 2 +- refactors.txt | 6 ++++++ test/front_desk_test.rb | 8 ++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 refactors.txt diff --git a/lib/front_desk.rb b/lib/front_desk.rb index cc8db5b69..8a9480b4e 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -82,7 +82,6 @@ def request_block(block_count, date_range, discount_cost) return hotel_block end - def available_rooms_in_block(hotel_block) available_rooms = hotel_block.rooms.select{|room| room.reservations.empty? == true || room.reservations.any?{|reservation| reservation.date_range.overlap?(hotel_block.date_range) == false}} return available_rooms @@ -90,6 +89,7 @@ def available_rooms_in_block(hotel_block) def add_reservation_to_room_in_block(hotel_block) available_rooms = available_rooms_in_block(hotel_block) + raise NoAvailableRoomError.new("there are no available rooms left in this block")if available_rooms.empty? == true chosen_room = available_rooms[0] new_reservation = Hotel::Reservation.new(date_range: hotel_block.date_range, room: chosen_room) new_reservation.block_reservation = true diff --git a/refactors.txt b/refactors.txt new file mode 100644 index 000000000..5ab41262f --- /dev/null +++ b/refactors.txt @@ -0,0 +1,6 @@ +Possible Refactors: +1. Only tracking reservation in either my front desk or my rooms, but not both +2. Refactor my block check status so that time and space are not O(n**2) +3. Write more test that cover more edge cases for the methods in my front desk +4. Don't track discount cost in my rooms + a. figure out a better way to account for discount costs for rooms in block \ No newline at end of file diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 85b9172fb..0f5ee4490 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -205,5 +205,13 @@ expect(block1.rooms[0].reservations[0].date_range).must_equal @dates end + + it "raises exception if there are no rooms left to add a reservation to" do + block1 = @front_desk.request_block( @block_count, @dates, @discount_cost) + 3.times do + @front_desk.add_reservation_to_room_in_block(block1) + end + expect{@front_desk.add_reservation_to_room_in_block(block1)}.must_raise NoAvailableRoomError + end end end \ No newline at end of file