From 956b753493932962d1ff5f3cfe168e8aca55cf15 Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 14:57:40 -0800 Subject: [PATCH 01/25] Added coverage directory to .gitignore file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5e1422c9c..c0ac3dc53 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ build-iPhoneSimulator/ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc +coverage From 917ef818a072c1e08d0541973e6ff9c66a34b946 Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 14:58:29 -0800 Subject: [PATCH 02/25] Initial commit- Added Room class & it's test --- lib/room.rb | 9 +++++++++ test/room_test.rb | 10 ++++++++++ test/test_helper.rb | 7 +++++-- 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 lib/room.rb create mode 100644 test/room_test.rb diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..ee063b04c --- /dev/null +++ b/lib/room.rb @@ -0,0 +1,9 @@ +module Hotel + class Room + attr_reader :id + + def initialize(id) + @id = id + end + end +end \ No newline at end of file diff --git a/test/room_test.rb b/test/room_test.rb new file mode 100644 index 000000000..4d0bc1814 --- /dev/null +++ b/test/room_test.rb @@ -0,0 +1,10 @@ +require_relative "test_helper" + +describe "Room" do + describe "Initialize" do + it "Create instance of Room" do + room = Hotel::Room.new(1) + expect(room).must_be_kind_of Hotel::Room + end + end +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index c3a7695cf..7d819cc92 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,8 +1,11 @@ -# Add simplecov +require "simplecov" +SimpleCov.start do + add_filter "test/" +end require "minitest" require "minitest/autorun" require "minitest/reporters" Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new -# require_relative your lib files here! +require_relative "../lib/room" From d8d71ea62b65e6c5a4e833ccbe130c047f6fcf70 Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 15:12:42 -0800 Subject: [PATCH 03/25] Added more tests for Room regarding cost and id --- lib/room.rb | 11 ++++++++++- test/room_test.rb | 29 ++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/lib/room.rb b/lib/room.rb index ee063b04c..b354fe446 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,9 +1,18 @@ + module Hotel class Room - attr_reader :id + ROOMS = 20 + attr_reader :id, :nightly_rate, :reservations def initialize(id) + if id <= 0 || id > 20 + raise ArgumentError.new("Not a real room") + end + @id = id + @nightly_rate = 200 + @reservations = [] end + end end \ No newline at end of file diff --git a/test/room_test.rb b/test/room_test.rb index 4d0bc1814..df6599f19 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -5,6 +5,33 @@ it "Create instance of Room" do room = Hotel::Room.new(1) expect(room).must_be_kind_of Hotel::Room - end + end + + it "Room id tracker" do + room = Hotel::Room.new(1) + expect(room).must_respond_to :id + end + + it "Rooms numbers 1 - 20 only" do + expect(Hotel::Room.new(1).id).must_equal 1 + expect(Hotel::Room.new(20).id).must_equal 20 + end + + it "Raises an ArgumentError if id is outside of 1 - 20" do + expect{Hotel::Room.new(0)}.must_raise ArgumentError + expect{Hotel::Room.new(21)}.must_raise ArgumentError + end + + it "Same nightly cost for all" do + room = Hotel::Room.new(1) + expect(room.nightly_rate).must_equal 200 + end + + it "Reservations is an empty array" do + room = Hotel::Room.new(1) + + expect(room.reservations).must_be_kind_of Array + expect(room.reservations).must_equal [] + end end end \ No newline at end of file From 1a883d10bc88703158c02130f6eea8123d6cd25b Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 18:25:26 -0800 Subject: [PATCH 04/25] Added Room.all with self and it's tests --- lib/room.rb | 8 ++++++++ test/room_test.rb | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/room.rb b/lib/room.rb index b354fe446..2c531895b 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -14,5 +14,13 @@ def initialize(id) @reservations = [] end + def self.all + all_rooms = Array.new + ROOMS.times do |room| + all_rooms << self.new(room + 1) + end + return all_rooms + end + end end \ No newline at end of file diff --git a/test/room_test.rb b/test/room_test.rb index df6599f19..9e599ac08 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -29,9 +29,22 @@ it "Reservations is an empty array" do room = Hotel::Room.new(1) - expect(room.reservations).must_be_kind_of Array expect(room.reservations).must_equal [] end end + describe "self.all" do + it "Returns an array of 20 room objects" do + all_rooms = Hotel::Room.all + expect(all_rooms).must_be_kind_of Array + expect(all_rooms.length).must_equal 20 + + all_rooms.each do |room| + expect(room).must_be_kind_of Hotel::Room + end + + expect(all_rooms.first.id).must_equal 1 + expect(all_rooms.last.id).must_equal 20 + end + end end \ No newline at end of file From 7713aa0f3b8559c4aa8e8cba480c6802e54893bd Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 18:37:05 -0800 Subject: [PATCH 05/25] Add Reservation class & tests Updated test_helper --- lib/reservation.rb | 11 +++++++++++ test/reservation_test.rb | 16 ++++++++++++++++ test/test_helper.rb | 1 + 3 files changed, 28 insertions(+) create mode 100644 lib/reservation.rb create mode 100644 test/reservation_test.rb diff --git a/lib/reservation.rb b/lib/reservation.rb new file mode 100644 index 000000000..2d02a0136 --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,11 @@ + +module Hotel + class Reservation + attr_reader :id + + def initialize(id:, room:, start_date:, end_date:) + @id = id + end + end + +end \ No newline at end of file diff --git a/test/reservation_test.rb b/test/reservation_test.rb new file mode 100644 index 000000000..c7d8de2de --- /dev/null +++ b/test/reservation_test.rb @@ -0,0 +1,16 @@ +require_relative "test_helper" + +describe "Reservation" do + describe "Initialize" do + it "Create an instance of Reservation" do + reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 3, 2020") + expect(reservation).must_be_kind_of Hotel::Reservation + end + + it "Room id tracker" do + reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 3, 2020") + expect(reservation).must_respond_to :id + expect(reservation.id).must_equal 1 + end + end +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 7d819cc92..186ae4c2d 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -9,3 +9,4 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new require_relative "../lib/room" +require_relative "../lib/reservation" From b23bd427bd72e628afa1c9cd14da315c7ad37285 Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 18:48:02 -0800 Subject: [PATCH 06/25] Add StayRange class & tests. Updated test_helper. --- lib/stay_range.rb | 13 +++++++++++++ test/stay_range_test.rb | 22 ++++++++++++++++++++++ test/test_helper.rb | 1 + 3 files changed, 36 insertions(+) create mode 100644 lib/stay_range.rb create mode 100644 test/stay_range_test.rb diff --git a/lib/stay_range.rb b/lib/stay_range.rb new file mode 100644 index 000000000..322a7e64d --- /dev/null +++ b/lib/stay_range.rb @@ -0,0 +1,13 @@ +require 'date' + +module Hotel + + class StayRange + attr_reader :start_date, :end_date + + def initialize(start_date, end_date) + @start_date = Date.parse(start_date) + @end_date = Date.parse(end_date) + end + end +end \ No newline at end of file diff --git a/test/stay_range_test.rb b/test/stay_range_test.rb new file mode 100644 index 000000000..9a52f9c88 --- /dev/null +++ b/test/stay_range_test.rb @@ -0,0 +1,22 @@ +require_relative "test_helper" + +describe "StayRange" do + describe "Initialize" do + it "Create an instance of StayRange" do + range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") + expect(range).must_be_kind_of Hotel::StayRange + end + + it "Keeps track of the first day" do + range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") + expect(range).must_respond_to :start_date + expect(range.start_date).must_equal Date.parse("March 3, 2020") + end + + it "Keeps track of the last day" do + range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") + expect(range).must_respond_to :end_date + expect(range.end_date).must_equal Date.parse("March 5, 2020") + end + end +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 186ae4c2d..e6f119082 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -10,3 +10,4 @@ require_relative "../lib/room" require_relative "../lib/reservation" +require_relative "../lib/stay_range" From 258a8d1cecac64319a7cbda7535e7d642c997b3e Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 19:07:20 -0800 Subject: [PATCH 07/25] Added StayRange info to Reservation with tests --- lib/reservation.rb | 5 ++++- test/reservation_test.rb | 24 ++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 2d02a0136..79a6b955b 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,10 +1,13 @@ module Hotel class Reservation - attr_reader :id + attr_reader :id, :room, :start_date, :end_date def initialize(id:, room:, start_date:, end_date:) @id = id + @room = room + @start_date = Date.parse(start_date) + @end_date = Date.parse(end_date) end end diff --git a/test/reservation_test.rb b/test/reservation_test.rb index c7d8de2de..8b80a1a11 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -3,14 +3,34 @@ describe "Reservation" do describe "Initialize" do it "Create an instance of Reservation" do - reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 3, 2020") + reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") expect(reservation).must_be_kind_of Hotel::Reservation end it "Room id tracker" do - reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 3, 2020") + reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") expect(reservation).must_respond_to :id expect(reservation.id).must_equal 1 end + it "Keeps track of room" do + reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") + + expect(reservation).must_respond_to :room + expect(reservation.room).must_equal 3 + end + + it "Keeps track of the first day" do + reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") + + expect(reservation).must_respond_to :start_date + expect(reservation.start_date).must_equal Date.parse("March 3, 2020") + end + + it "Keeps track of the last day" do + reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") + + expect(reservation).must_respond_to :end_date + expect(reservation.end_date).must_equal Date.parse("March 5, 2020") + end end end \ No newline at end of file From afab58ffd3ae7f2c8600c814da0984f152720afd Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 19:25:53 -0800 Subject: [PATCH 08/25] Add ReservationManager class & tests --- .DS_Store | Bin 0 -> 6148 bytes lib/reservation_manager.rb | 11 +++++++++++ test/reservation_manager_test.rb | 27 +++++++++++++++++++++++++++ test/reservation_test.rb | 8 +++++--- test/room_test.rb | 10 +++++++++- test/stay_range_test.rb | 3 +++ test/test_helper.rb | 1 + 7 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 .DS_Store create mode 100644 lib/reservation_manager.rb create mode 100644 test/reservation_manager_test.rb diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fe0abeeb3940a30df8e7fedc502b22dbc2638b21 GIT binary patch literal 6148 zcmeHK%Wl&^6upxe7^gyHfs`)2L1Gc11}T*ygye=)s0$>75i9_;cI>uRT~8G|jc5q+ zhJS!h;7{1Gc~kcS{#?XTb~t8 ziZe6Tr|2w8i*jr03#-+gD_5^^-r$YvjaR|3m;_~5j*EUcdLe6%!}2&X@lzqPpK%yH zOOwfd^X3DQmtmSGBSlW*1Sv0{r+F+UeKF4CLX8vX4$fWf?l)W0X>Ysjb$Y#7+ne_8 zcH7=|w>z7;ymhN{fA8S*^~Lnf?CpCz35;RwRCdGQ5BPwhenrmw8*`DrOFJ~6N5D02s}?RX94aw-LFJ(cc{sV(dhi3dG?`avR1_3uJ63_*iZ|iP(C5hj=o_pwq6KDu1e6T6unPQD G1-=9K7^lJj literal 0 HcmV?d00001 diff --git a/lib/reservation_manager.rb b/lib/reservation_manager.rb new file mode 100644 index 000000000..b6f70c53f --- /dev/null +++ b/lib/reservation_manager.rb @@ -0,0 +1,11 @@ + +module Hotel + class ReservationManager + attr_reader :all_rooms, :all_reservations + + def initialize + @all_rooms = Hotel::Room.all + @all_reservations = Array.new + end + end +end \ No newline at end of file diff --git a/test/reservation_manager_test.rb b/test/reservation_manager_test.rb new file mode 100644 index 000000000..2aa3b11bd --- /dev/null +++ b/test/reservation_manager_test.rb @@ -0,0 +1,27 @@ +require_relative "test_helper" + +describe "ReservationManager" do + describe "Initialize" do + it "Create an instance of BookingManager" do + manager = Hotel::ReservationManager.new + # Assert + expect(manager).must_be_kind_of Hotel::ReservationManager + end + + it "Respond to all_rooms" do + manager = Hotel::ReservationManager.new + # Assert + expect(manager).must_respond_to :all_rooms + expect(manager.all_rooms).must_be_kind_of Array + expect(manager.all_rooms.length).must_equal 20 + end + + it "Respond to reservations" do + manager = Hotel::ReservationManager.new + # Assert + expect(manager).must_respond_to :all_reservations + expect(manager.all_reservations).must_be_kind_of Array + expect(manager.all_reservations).must_equal [] + end + end +end \ No newline at end of file diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 8b80a1a11..f9bf7a09e 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -4,31 +4,33 @@ describe "Initialize" do it "Create an instance of Reservation" do reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") + # Assert expect(reservation).must_be_kind_of Hotel::Reservation end it "Room id tracker" do reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") + # Assert expect(reservation).must_respond_to :id expect(reservation.id).must_equal 1 end it "Keeps track of room" do reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") - + # Assert expect(reservation).must_respond_to :room expect(reservation.room).must_equal 3 end it "Keeps track of the first day" do reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") - + # Assert expect(reservation).must_respond_to :start_date expect(reservation.start_date).must_equal Date.parse("March 3, 2020") end it "Keeps track of the last day" do reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") - + # Assert expect(reservation).must_respond_to :end_date expect(reservation.end_date).must_equal Date.parse("March 5, 2020") end diff --git a/test/room_test.rb b/test/room_test.rb index 9e599ac08..3ae30afe2 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -4,31 +4,37 @@ describe "Initialize" do it "Create instance of Room" do room = Hotel::Room.new(1) + # Assert expect(room).must_be_kind_of Hotel::Room end it "Room id tracker" do room = Hotel::Room.new(1) + # Assert expect(room).must_respond_to :id end it "Rooms numbers 1 - 20 only" do + # Assert expect(Hotel::Room.new(1).id).must_equal 1 expect(Hotel::Room.new(20).id).must_equal 20 end it "Raises an ArgumentError if id is outside of 1 - 20" do + # Assert expect{Hotel::Room.new(0)}.must_raise ArgumentError expect{Hotel::Room.new(21)}.must_raise ArgumentError end it "Same nightly cost for all" do + # Assert room = Hotel::Room.new(1) expect(room.nightly_rate).must_equal 200 end it "Reservations is an empty array" do room = Hotel::Room.new(1) + # Assert expect(room.reservations).must_be_kind_of Array expect(room.reservations).must_equal [] end @@ -36,13 +42,15 @@ describe "self.all" do it "Returns an array of 20 room objects" do all_rooms = Hotel::Room.all + # Assert expect(all_rooms).must_be_kind_of Array expect(all_rooms.length).must_equal 20 all_rooms.each do |room| + # Assert expect(room).must_be_kind_of Hotel::Room end - + # Assert expect(all_rooms.first.id).must_equal 1 expect(all_rooms.last.id).must_equal 20 end diff --git a/test/stay_range_test.rb b/test/stay_range_test.rb index 9a52f9c88..cfd5d2cbd 100644 --- a/test/stay_range_test.rb +++ b/test/stay_range_test.rb @@ -4,17 +4,20 @@ describe "Initialize" do it "Create an instance of StayRange" do range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") + # Assert expect(range).must_be_kind_of Hotel::StayRange end it "Keeps track of the first day" do range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") + # Assert expect(range).must_respond_to :start_date expect(range.start_date).must_equal Date.parse("March 3, 2020") end it "Keeps track of the last day" do range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") + # Assert expect(range).must_respond_to :end_date expect(range.end_date).must_equal Date.parse("March 5, 2020") end diff --git a/test/test_helper.rb b/test/test_helper.rb index e6f119082..4892fad5a 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -11,3 +11,4 @@ require_relative "../lib/room" require_relative "../lib/reservation" require_relative "../lib/stay_range" +require_relative "../lib/reservation_manager" From 09a94ff0d8512c18fc0b23ae80d8888b34f5c967 Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 19:46:27 -0800 Subject: [PATCH 09/25] Removed keywords in Reservation and it's test file --- lib/reservation.rb | 2 +- lib/reservation_manager.rb | 10 ++++++++++ test/reservation_manager_test.rb | 8 ++++++++ test/reservation_test.rb | 10 +++++----- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 79a6b955b..e2f75b322 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -3,7 +3,7 @@ module Hotel class Reservation attr_reader :id, :room, :start_date, :end_date - def initialize(id:, room:, start_date:, end_date:) + def initialize(id, room, start_date, end_date) @id = id @room = room @start_date = Date.parse(start_date) diff --git a/lib/reservation_manager.rb b/lib/reservation_manager.rb index b6f70c53f..204b11ec3 100644 --- a/lib/reservation_manager.rb +++ b/lib/reservation_manager.rb @@ -7,5 +7,15 @@ def initialize @all_rooms = Hotel::Room.all @all_reservations = Array.new end + + def make_reservation(start_date, end_date) + id = all_reservations.length + 1 + room = all_rooms[0] + reservation = Hotel::Reservation.new(id, room, start_date, end_date) + all_reservations << reservation + room.reservations << reservation + + return reservation + end end end \ No newline at end of file diff --git a/test/reservation_manager_test.rb b/test/reservation_manager_test.rb index 2aa3b11bd..484dcd28b 100644 --- a/test/reservation_manager_test.rb +++ b/test/reservation_manager_test.rb @@ -24,4 +24,12 @@ expect(manager.all_reservations).must_equal [] end end + describe "make_reservation" do + it "Creates a new reservation" do + manager = Hotel::ReservationManager.new + reservation = manager.make_reservation("March 3, 2020", "March 5, 2020") + # Assert + expect(reservation).must_be_kind_of Hotel::Reservation + end + end end \ No newline at end of file diff --git a/test/reservation_test.rb b/test/reservation_test.rb index f9bf7a09e..e03f03f22 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -3,33 +3,33 @@ describe "Reservation" do describe "Initialize" do it "Create an instance of Reservation" do - reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") + reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_be_kind_of Hotel::Reservation end it "Room id tracker" do - reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") + reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :id expect(reservation.id).must_equal 1 end it "Keeps track of room" do - reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") + reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :room expect(reservation.room).must_equal 3 end it "Keeps track of the first day" do - reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") + reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :start_date expect(reservation.start_date).must_equal Date.parse("March 3, 2020") end it "Keeps track of the last day" do - reservation = Hotel::Reservation.new(id: 1, room: 3, start_date: "March 3, 2020", end_date: "March 5, 2020") + reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :end_date expect(reservation.end_date).must_equal Date.parse("March 5, 2020") From 4896f727fdf9d3f636283517cbfc2ebdcd301694 Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 20:43:00 -0800 Subject: [PATCH 10/25] Add find_reservation for ReservationManager & test --- lib/reservation_manager.rb | 11 ++++++++++- test/reservation_manager_test.rb | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/reservation_manager.rb b/lib/reservation_manager.rb index 204b11ec3..80ee6db00 100644 --- a/lib/reservation_manager.rb +++ b/lib/reservation_manager.rb @@ -8,14 +8,23 @@ def initialize @all_reservations = Array.new end + # Make a new reservation def make_reservation(start_date, end_date) id = all_reservations.length + 1 room = all_rooms[0] reservation = Hotel::Reservation.new(id, room, start_date, end_date) all_reservations << reservation room.reservations << reservation - return reservation end + + # Look-up a reservation by date + def find_reservation(date) + day_reservation = all_reservations.select do |reservation| + reservation.start_date == Date.parse(date) + end + return day_reservation + end + end end \ No newline at end of file diff --git a/test/reservation_manager_test.rb b/test/reservation_manager_test.rb index 484dcd28b..4fa759102 100644 --- a/test/reservation_manager_test.rb +++ b/test/reservation_manager_test.rb @@ -32,4 +32,26 @@ expect(reservation).must_be_kind_of Hotel::Reservation end end + describe "find_reservation" do + it "Finds reservations for a specific date" do + manager = Hotel::ReservationManager.new + + manager.make_reservation("March 3, 2020", "March 5, 2020") + manager.make_reservation("March 13, 2020", "March 15, 2020") + manager.make_reservation("March 23, 2020", "March 25, 2020") + manager.make_reservation("March 3, 2020", "March 6, 2020") + + date = "March 3, 2020" + specific_reservation = manager.find_reservation(date) + # Assert + expect(specific_reservation).must_be_kind_of Array + expect(specific_reservation.length).must_equal 2 + + specific_reservation.each do |reservation| + _(reservation).must_be_kind_of Hotel::Reservation + _(reservation.start_date).must_equal Date.parse(date) + end + end + + end end \ No newline at end of file From 209da6088df16d2dfb0c3b2ad073138766005dd8 Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 21:24:26 -0800 Subject: [PATCH 11/25] Add test ReservationManager to include all dates --- lib/reservation_manager.rb | 5 ++++- test/reservation_manager_test.rb | 14 ++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/reservation_manager.rb b/lib/reservation_manager.rb index 80ee6db00..f90f21d97 100644 --- a/lib/reservation_manager.rb +++ b/lib/reservation_manager.rb @@ -21,7 +21,10 @@ def make_reservation(start_date, end_date) # Look-up a reservation by date def find_reservation(date) day_reservation = all_reservations.select do |reservation| - reservation.start_date == Date.parse(date) + #reservation.start_date == Date.parse(date) + start_date = reservation.start_date + end_date = reservation.end_date - 1 + (start_date..end_date).include? (Date.parse(date)) end return day_reservation end diff --git a/test/reservation_manager_test.rb b/test/reservation_manager_test.rb index 4fa759102..f9e3a048e 100644 --- a/test/reservation_manager_test.rb +++ b/test/reservation_manager_test.rb @@ -36,20 +36,22 @@ it "Finds reservations for a specific date" do manager = Hotel::ReservationManager.new - manager.make_reservation("March 3, 2020", "March 5, 2020") - manager.make_reservation("March 13, 2020", "March 15, 2020") - manager.make_reservation("March 23, 2020", "March 25, 2020") - manager.make_reservation("March 3, 2020", "March 6, 2020") + manager.make_reservation("March 1, 2020", "March 3, 2020") + manager.make_reservation("March 3, 2020", "March 12, 2020") + manager.make_reservation("March 2, 2020", "March 6, 2020") + manager.make_reservation("March 3, 2020", "March 5, 2020") + manager.make_reservation("March 15, 2020", "March 18, 2020") + date = "March 3, 2020" specific_reservation = manager.find_reservation(date) # Assert expect(specific_reservation).must_be_kind_of Array - expect(specific_reservation.length).must_equal 2 + expect(specific_reservation.length).must_equal 3 specific_reservation.each do |reservation| _(reservation).must_be_kind_of Hotel::Reservation - _(reservation.start_date).must_equal Date.parse(date) + #_(reservation.start_date).must_equal Date.parse(date) end end From abc7ff89b21662c7ce35d398fad9442c66b56996 Mon Sep 17 00:00:00 2001 From: denisseai Date: Tue, 3 Mar 2020 22:03:44 -0800 Subject: [PATCH 12/25] Add total_cost for Reservation --- lib/reservation.rb | 5 +++++ test/reservation_test.rb | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index e2f75b322..1a783a0ee 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -9,6 +9,11 @@ def initialize(id, room, start_date, end_date) @start_date = Date.parse(start_date) @end_date = Date.parse(end_date) end + + def total_cost + nights = start_date - end_date + return (nights * room.nightly_rate) + end end end \ No newline at end of file diff --git a/test/reservation_test.rb b/test/reservation_test.rb index e03f03f22..15d25c2c1 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -34,5 +34,14 @@ expect(reservation).must_respond_to :end_date expect(reservation.end_date).must_equal Date.parse("March 5, 2020") end - end + end + + describe "total_cost" do + it "Returns total cost for reservation" do + room = Hotel::Room.new(3) + reservation = Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020") + # Assert + expect(reservation.total_cost).must_equal 400 + end + end end \ No newline at end of file From 582fa10b6bbf9f702fa783864b92cfd737d54c06 Mon Sep 17 00:00:00 2001 From: denisseai Date: Wed, 4 Mar 2020 16:39:11 -0800 Subject: [PATCH 13/25] Fix test to find reservation for specific date --- .DS_Store | Bin 6148 -> 6148 bytes lib/reservation.rb | 11 +++++++++-- test/.DS_Store | Bin 0 -> 6148 bytes test/reservation_manager_test.rb | 5 ++--- test/reservation_test.rb | 9 ++++++++- test/test_helper.rb | 1 + 6 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 test/.DS_Store diff --git a/.DS_Store b/.DS_Store index fe0abeeb3940a30df8e7fedc502b22dbc2638b21..67bfd45a2cdd1550b8e3937a860d393628ae5e58 100644 GIT binary patch delta 63 zcmZoMXfc@J&&a(oU^g=(_hudzdnQg6h7yKUhGK@2$yZpei^6$j!9{sF`FZIK3=E7D M3y*JR=lIJH03wVL`~Uy| delta 28 kcmZoMXfc@J&&atkU^g=(=Vl%jd!~(Ldl)yfbNuB80Dl4q(EtDd diff --git a/lib/reservation.rb b/lib/reservation.rb index 1a783a0ee..2bcb723b8 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -8,12 +8,19 @@ def initialize(id, room, start_date, end_date) @room = room @start_date = Date.parse(start_date) @end_date = Date.parse(end_date) + + # Check end date is after start date + #make unit test for edge case of 3/1/2020 - 3/12/2020 + if start_date >= end_date + raise ArgumentError.new("The end date cannot be before the start date") + end end + + # Calculate total reservation cost based on nightly rate def total_cost - nights = start_date - end_date + nights = (end_date - start_date).to_i return (nights * room.nightly_rate) end end - end \ No newline at end of file diff --git a/test/.DS_Store b/test/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..dd46da1344827a66a160df646492ce26c3fac2a9 GIT binary patch literal 6148 zcmeHKO-lno41K9ZDvA_6D0tbUC&9CqrPPCGe?V<(QK9XM)`GXa_+$Ki{s4VRhSF|7 zycLn8WZq0B$#&ihn;ihsdb_^_ngAM9#o8X56{7R1OHxagU7}cy7j*G}!OgJfFL{UI zFEXHe*FYZyrWjyu|9Zos$2mP1pVaej6ZU{J`VH`E{!{Mw1W$|~qk|DgV?P7*>2OB< zCb;0Jr>9~r>s2M|@!G5#vdBp#%K@_#{Eaq0T|O#tNA^FvcxRllFxGSYOOCHfj>Fk{ zJ9uRD5YNWZiq+S;l~@i#f`MQl7}y#Etl27!eaC2nfnXpQm@%O5hm5M2CoCQ9)xpND z0K_`YChY4cqsC+j^Ms`%XDH&KL=Tm8#SjmtJxhLh!qU;hA?flV>B*9AC}K}%{>W`_TK})t-~ShbViXJn1OJKvskd+2EiNh5)}_U1t<9)+R2B6r9cLlz hSShBjmf};Y3GJD7h Date: Wed, 4 Mar 2020 18:10:06 -0800 Subject: [PATCH 14/25] Add available rooms method & test --- lib/reservation_manager.rb | 32 +++++++++++++++++++++++++++++--- test/reservation_manager_test.rb | 21 +++++++++++++++++++-- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/lib/reservation_manager.rb b/lib/reservation_manager.rb index f90f21d97..f84ec5a9a 100644 --- a/lib/reservation_manager.rb +++ b/lib/reservation_manager.rb @@ -8,6 +8,33 @@ def initialize @all_reservations = Array.new end + # Find available room with date + def available?(start_date, end_date, room) + room.reservations.each do |reservation| + + start_date = Date.parse(start_date) + end_date = Date.parse(end_date) + + while start_date != end_date + return false if (reservation.start_date..reservation.end_date - 1).include?(start_date) + start_date += 1 + end + end + return true + end + + # List available rooms + def available_rooms(start_date, end_date) + list_available_rooms = Array.new + all_rooms.each do |room| + result = available?(start_date, end_date, room) + if result + list_available_rooms << room + end + end + return list_available_rooms + end + # Make a new reservation def make_reservation(start_date, end_date) id = all_reservations.length + 1 @@ -20,14 +47,13 @@ def make_reservation(start_date, end_date) # Look-up a reservation by date def find_reservation(date) - day_reservation = all_reservations.select do |reservation| + by_date_reservation = all_reservations.select do |reservation| #reservation.start_date == Date.parse(date) start_date = reservation.start_date end_date = reservation.end_date - 1 (start_date..end_date).include? (Date.parse(date)) end - return day_reservation + return by_date_reservation end - end end \ No newline at end of file diff --git a/test/reservation_manager_test.rb b/test/reservation_manager_test.rb index f72320d4c..9f3fe2fde 100644 --- a/test/reservation_manager_test.rb +++ b/test/reservation_manager_test.rb @@ -24,6 +24,24 @@ expect(manager.all_reservations).must_equal [] end end + + describe "available_rooms method" do + it "When no rooms have been booked return 20 available rooms" do + manager = Hotel::ReservationManager.new + rooms = manager.available_rooms("March 3, 2020", "March 5, 2020") + # Assert + expect(rooms.length).must_equal 20 + end + + it "When one room has been booked return 19 available rooms" do + manager = Hotel::ReservationManager.new + manager.make_reservation("March 3, 2020", "March 5, 2020") + rooms = manager.available_rooms("March 3, 2020", "March 5, 2020") + # Assert + expect(rooms.length).must_equal 19 + end + end + describe "make_reservation" do it "Creates a new reservation" do manager = Hotel::ReservationManager.new @@ -32,10 +50,10 @@ expect(reservation).must_be_kind_of Hotel::Reservation end end + describe "find_reservation" do it "Finds reservations for a specific date" do manager = Hotel::ReservationManager.new - manager.make_reservation("March 1, 2020", "March 3, 2020") manager.make_reservation("March 1, 2020", "March 8, 2020") manager.make_reservation("March 3, 2020", "March 6, 2020") @@ -53,6 +71,5 @@ #_(reservation.start_date).must_equal Date.parse(date) end end - end end \ No newline at end of file From ff8c2c4a344d981ccd4cc38218e6f329b6b06be7 Mon Sep 17 00:00:00 2001 From: denisseai Date: Thu, 5 Mar 2020 17:48:59 -0800 Subject: [PATCH 15/25] Removed date range class --- lib/.DS_Store | Bin 0 -> 6148 bytes lib/reservation.rb | 6 ++--- lib/reservation_manager.rb | 18 ++++++------- lib/room.rb | 2 -- lib/stay_range.rb | 13 --------- test/reservation_manager_test.rb | 30 ++++++++++++++------- test/room_test.rb | 9 +++---- test/stay_range_test.rb | 44 +++++++++++++++---------------- test/test_helper.rb | 2 +- 9 files changed, 58 insertions(+), 66 deletions(-) create mode 100644 lib/.DS_Store delete mode 100644 lib/stay_range.rb diff --git a/lib/.DS_Store b/lib/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b9445a8a8b588d36f8f21a4395adb04df918a7c2 GIT binary patch literal 6148 zcmeHKJxc>Y5PhQo1A?Sd%Pp-0>oiA*g|$CGJ(VCNIY`v{{*J#=-+U-0u7!<=%!HXY zw>vX?_aM7F0A%uXcLt0A45^BuPDOOMI<*tQyF{@XD?H-{k9a^=DfAbI^xY4z!adg1 z&+os)DWBVmd3W2+yOwcE(hK$E)r1~!_)YE=7Gz>comt<?^c^J=W^@ThvyTqpfIN zJtY}P29kkfAQ|{M13a@;hWn0blYwL)8Tep8_lH7NYyx{n+d62h1t1PMY(ihJ$(mCF zo50?YGZgVuqNhr<7~<(1FA>)S_KuzoiRMFM<@e@AY<1Qz77l3~(78= end_date raise ArgumentError.new("The end date cannot be before the start date") end end - # Calculate total reservation cost based on nightly rate def total_cost - nights = (end_date - start_date).to_i - return (nights * room.nightly_rate) + return ((end_date - start_date) * room.nightly_rate) end end end \ No newline at end of file diff --git a/lib/reservation_manager.rb b/lib/reservation_manager.rb index f84ec5a9a..9e40aa2ed 100644 --- a/lib/reservation_manager.rb +++ b/lib/reservation_manager.rb @@ -16,7 +16,7 @@ def available?(start_date, end_date, room) end_date = Date.parse(end_date) while start_date != end_date - return false if (reservation.start_date..reservation.end_date - 1).include?(start_date) + return false if (reservation.start_date...reservation.end_date).include?(start_date) start_date += 1 end end @@ -26,19 +26,20 @@ def available?(start_date, end_date, room) # List available rooms def available_rooms(start_date, end_date) list_available_rooms = Array.new + all_rooms.each do |room| result = available?(start_date, end_date, room) - if result - list_available_rooms << room - end - end + list_available_rooms << room if result + end return list_available_rooms end # Make a new reservation def make_reservation(start_date, end_date) id = all_reservations.length + 1 - room = all_rooms[0] + room = available_rooms(start_date, end_date)[0] + raise StandardError if !room + reservation = Hotel::Reservation.new(id, room, start_date, end_date) all_reservations << reservation room.reservations << reservation @@ -48,10 +49,9 @@ def make_reservation(start_date, end_date) # Look-up a reservation by date def find_reservation(date) by_date_reservation = all_reservations.select do |reservation| - #reservation.start_date == Date.parse(date) start_date = reservation.start_date - end_date = reservation.end_date - 1 - (start_date..end_date).include? (Date.parse(date)) + end_date = reservation.end_date + (start_date...end_date).include? date end return by_date_reservation end diff --git a/lib/room.rb b/lib/room.rb index 2c531895b..a56c76a93 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -8,7 +8,6 @@ def initialize(id) if id <= 0 || id > 20 raise ArgumentError.new("Not a real room") end - @id = id @nightly_rate = 200 @reservations = [] @@ -21,6 +20,5 @@ def self.all end return all_rooms end - end end \ No newline at end of file diff --git a/lib/stay_range.rb b/lib/stay_range.rb deleted file mode 100644 index 322a7e64d..000000000 --- a/lib/stay_range.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'date' - -module Hotel - - class StayRange - attr_reader :start_date, :end_date - - def initialize(start_date, end_date) - @start_date = Date.parse(start_date) - @end_date = Date.parse(end_date) - end - end -end \ No newline at end of file diff --git a/test/reservation_manager_test.rb b/test/reservation_manager_test.rb index 9f3fe2fde..b49e806ec 100644 --- a/test/reservation_manager_test.rb +++ b/test/reservation_manager_test.rb @@ -1,15 +1,15 @@ require_relative "test_helper" describe "ReservationManager" do + let (:manager) { Hotel::ReservationManager.new } + describe "Initialize" do - it "Create an instance of BookingManager" do - manager = Hotel::ReservationManager.new + it "Create an instance of ReservationManager" do # Assert expect(manager).must_be_kind_of Hotel::ReservationManager end it "Respond to all_rooms" do - manager = Hotel::ReservationManager.new # Assert expect(manager).must_respond_to :all_rooms expect(manager.all_rooms).must_be_kind_of Array @@ -17,7 +17,6 @@ end it "Respond to reservations" do - manager = Hotel::ReservationManager.new # Assert expect(manager).must_respond_to :all_reservations expect(manager.all_reservations).must_be_kind_of Array @@ -27,39 +26,51 @@ describe "available_rooms method" do it "When no rooms have been booked return 20 available rooms" do - manager = Hotel::ReservationManager.new rooms = manager.available_rooms("March 3, 2020", "March 5, 2020") # Assert expect(rooms.length).must_equal 20 end it "When one room has been booked return 19 available rooms" do - manager = Hotel::ReservationManager.new manager.make_reservation("March 3, 2020", "March 5, 2020") rooms = manager.available_rooms("March 3, 2020", "March 5, 2020") # Assert expect(rooms.length).must_equal 19 end + + it "Returns the available room" do + manager.available_rooms("March 3, 2020", "March 5, 2020") + rooms = manager.available_rooms("March 13, 2020", "March 15, 2020") + # Assert + expect(rooms.length).must_equal 20 + end end describe "make_reservation" do it "Creates a new reservation" do - manager = Hotel::ReservationManager.new reservation = manager.make_reservation("March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_be_kind_of Hotel::Reservation + expect(manager.all_reservations.include?(reservation)).must_equal true + expect(reservation.room.reservations.include?(reservation)).must_equal true + end + + it "Raises an error if there are no rooms available" do + 20.times do + manager.make_reservation("March 3, 2020", "March 5, 2020") + end + # Assert + expect { manager.make_reservation("March 3, 2020", "March 5, 2020") }.must_raise StandardError end end describe "find_reservation" do it "Finds reservations for a specific date" do - manager = Hotel::ReservationManager.new manager.make_reservation("March 1, 2020", "March 3, 2020") manager.make_reservation("March 1, 2020", "March 8, 2020") manager.make_reservation("March 3, 2020", "March 6, 2020") manager.make_reservation("March 3, 2020", "March 5, 2020") manager.make_reservation("March 15, 2020", "March 18, 2020") - date = "March 3, 2020" specific_reservation = manager.find_reservation(date) # Assert @@ -68,7 +79,6 @@ specific_reservation.each do |reservation| _(reservation).must_be_kind_of Hotel::Reservation - #_(reservation.start_date).must_equal Date.parse(date) end end end diff --git a/test/room_test.rb b/test/room_test.rb index 3ae30afe2..8edd6fcf6 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -1,22 +1,22 @@ require_relative "test_helper" describe "Room" do + let (:room) { Hotel::Room.new(1) } describe "Initialize" do it "Create instance of Room" do - room = Hotel::Room.new(1) # Assert expect(room).must_be_kind_of Hotel::Room end it "Room id tracker" do - room = Hotel::Room.new(1) # Assert expect(room).must_respond_to :id + expect(room.id).must_equal 1 end it "Rooms numbers 1 - 20 only" do # Assert - expect(Hotel::Room.new(1).id).must_equal 1 + expect(room.id).must_equal 1 expect(Hotel::Room.new(20).id).must_equal 20 end @@ -28,17 +28,16 @@ it "Same nightly cost for all" do # Assert - room = Hotel::Room.new(1) expect(room.nightly_rate).must_equal 200 end it "Reservations is an empty array" do - room = Hotel::Room.new(1) # Assert expect(room.reservations).must_be_kind_of Array expect(room.reservations).must_equal [] end end + describe "self.all" do it "Returns an array of 20 room objects" do all_rooms = Hotel::Room.all diff --git a/test/stay_range_test.rb b/test/stay_range_test.rb index cfd5d2cbd..b1dd74c56 100644 --- a/test/stay_range_test.rb +++ b/test/stay_range_test.rb @@ -1,25 +1,25 @@ -require_relative "test_helper" +# require_relative "test_helper" -describe "StayRange" do - describe "Initialize" do - it "Create an instance of StayRange" do - range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") - # Assert - expect(range).must_be_kind_of Hotel::StayRange - end +# describe "StayRange" do +# describe "Initialize" do +# it "Create an instance of StayRange" do +# range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") +# # Assert +# expect(range).must_be_kind_of Hotel::StayRange +# end - it "Keeps track of the first day" do - range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") - # Assert - expect(range).must_respond_to :start_date - expect(range.start_date).must_equal Date.parse("March 3, 2020") - end +# it "Keeps track of the first day" do +# range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") +# # Assert +# expect(range).must_respond_to :start_date +# expect(range.start_date).must_equal Date.parse("March 3, 2020") +# end - it "Keeps track of the last day" do - range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") - # Assert - expect(range).must_respond_to :end_date - expect(range.end_date).must_equal Date.parse("March 5, 2020") - end - end -end \ No newline at end of file +# it "Keeps track of the last day" do +# range = Hotel::StayRange.new("March 3, 2020", "March 5, 2020") +# # Assert +# expect(range).must_respond_to :end_date +# expect(range.end_date).must_equal Date.parse("March 5, 2020") +# end +# end +# end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 928bbf2f3..28052cf1d 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -2,6 +2,7 @@ SimpleCov.start do add_filter "test/" end + require "minitest" require "minitest/autorun" require "minitest/reporters" @@ -11,5 +12,4 @@ require_relative "../lib/room" require_relative "../lib/reservation" -require_relative "../lib/stay_range" require_relative "../lib/reservation_manager" From 6f3d2d1f013c498bb271db621ce0afd75c944e4a Mon Sep 17 00:00:00 2001 From: denisseai Date: Thu, 5 Mar 2020 21:47:46 -0800 Subject: [PATCH 16/25] Added comments to reservation_manager_test --- lib/reservation.rb | 2 +- lib/reservation_manager.rb | 22 +++++++++++----------- test/reservation_manager_test.rb | 2 +- test/test_helper.rb | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 78fc12734..4abf3f58d 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -11,7 +11,7 @@ def initialize(id, room, start_date, end_date) # Check end date is after start date ##make unit test for edge case of 3/1/2020 - 3/12/2020 - if start_date >= end_date + if @start_date >= @end_date raise ArgumentError.new("The end date cannot be before the start date") end end diff --git a/lib/reservation_manager.rb b/lib/reservation_manager.rb index 9e40aa2ed..001c9e227 100644 --- a/lib/reservation_manager.rb +++ b/lib/reservation_manager.rb @@ -12,12 +12,12 @@ def initialize def available?(start_date, end_date, room) room.reservations.each do |reservation| - start_date = Date.parse(start_date) - end_date = Date.parse(end_date) + first_day = Date.parse(start_date) + last_day = Date.parse(end_date) - while start_date != end_date - return false if (reservation.start_date...reservation.end_date).include?(start_date) - start_date += 1 + while first_day != last_day + return false if (reservation.start_date...reservation.end_date).include?(first_day) + first_day += 1 end end return true @@ -25,13 +25,13 @@ def available?(start_date, end_date, room) # List available rooms def available_rooms(start_date, end_date) - list_available_rooms = Array.new + available_rooms = Array.new all_rooms.each do |room| result = available?(start_date, end_date, room) - list_available_rooms << room if result + available_rooms << room if result end - return list_available_rooms + return available_rooms end # Make a new reservation @@ -49,9 +49,9 @@ def make_reservation(start_date, end_date) # Look-up a reservation by date def find_reservation(date) by_date_reservation = all_reservations.select do |reservation| - start_date = reservation.start_date - end_date = reservation.end_date - (start_date...end_date).include? date + first_day = reservation.start_date + last_day = reservation.end_date + (first_day...last_day).include? Date.parse(date) end return by_date_reservation end diff --git a/test/reservation_manager_test.rb b/test/reservation_manager_test.rb index b49e806ec..ff4086642 100644 --- a/test/reservation_manager_test.rb +++ b/test/reservation_manager_test.rb @@ -24,7 +24,7 @@ end end - describe "available_rooms method" do + describe "available_rooms" do it "When no rooms have been booked return 20 available rooms" do rooms = manager.available_rooms("March 3, 2020", "March 5, 2020") # Assert diff --git a/test/test_helper.rb b/test/test_helper.rb index 28052cf1d..a18f844f7 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -6,7 +6,7 @@ require "minitest" require "minitest/autorun" require "minitest/reporters" -require 'date' +require "date" Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From 69ee1f6d241cccb203adaacc5deb6a8b911e87f3 Mon Sep 17 00:00:00 2001 From: denisseai Date: Sun, 8 Mar 2020 15:17:47 -0700 Subject: [PATCH 17/25] Practicing single responsability --- lib/reservation.rb | 6 +----- lib/reservation_manager.rb | 12 ++---------- lib/room.rb | 13 +++++++------ 3 files changed, 10 insertions(+), 21 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 4abf3f58d..8cf1fe3ea 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -9,11 +9,7 @@ def initialize(id, room, start_date, end_date) @start_date = Date.parse(start_date) @end_date = Date.parse(end_date) - # Check end date is after start date - ##make unit test for edge case of 3/1/2020 - 3/12/2020 - if @start_date >= @end_date - raise ArgumentError.new("The end date cannot be before the start date") - end + raise ArgumentError.new("The end date cannot be before the start date") if @start_date >= @end_date end # Calculate total reservation cost based on nightly rate diff --git a/lib/reservation_manager.rb b/lib/reservation_manager.rb index 001c9e227..447801d10 100644 --- a/lib/reservation_manager.rb +++ b/lib/reservation_manager.rb @@ -1,4 +1,3 @@ - module Hotel class ReservationManager attr_reader :all_rooms, :all_reservations @@ -25,13 +24,7 @@ def available?(start_date, end_date, room) # List available rooms def available_rooms(start_date, end_date) - available_rooms = Array.new - - all_rooms.each do |room| - result = available?(start_date, end_date, room) - available_rooms << room if result - end - return available_rooms + all_rooms.select { |room| available?(start_date, end_date, room) } end # Make a new reservation @@ -48,12 +41,11 @@ def make_reservation(start_date, end_date) # Look-up a reservation by date def find_reservation(date) - by_date_reservation = all_reservations.select do |reservation| + all_reservations.select do |reservation| first_day = reservation.start_date last_day = reservation.end_date (first_day...last_day).include? Date.parse(date) end - return by_date_reservation end end end \ No newline at end of file diff --git a/lib/room.rb b/lib/room.rb index a56c76a93..ad3d93f07 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,16 +1,17 @@ - module Hotel class Room ROOMS = 20 - attr_reader :id, :nightly_rate, :reservations + attr_reader :id, :nightly_rate def initialize(id) - if id <= 0 || id > 20 - raise ArgumentError.new("Not a real room") - end + raise ArgumentError.new("Not a real room") if id <= 0 || id > 20 + @id = id @nightly_rate = 200 - @reservations = [] + end + + def reservations + @reservations ||= [] end def self.all From 22e774c04cdfa1796bbdaf08162b74ab6eb2eff0 Mon Sep 17 00:00:00 2001 From: denisseai Date: Sun, 8 Mar 2020 16:57:09 -0700 Subject: [PATCH 18/25] Added a few comments --- lib/reservation.rb | 3 ++- lib/reservation_manager.rb | 9 +++++---- lib/room.rb | 6 +++--- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 8cf1fe3ea..383892611 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -8,7 +8,8 @@ def initialize(id, room, start_date, end_date) @room = room @start_date = Date.parse(start_date) @end_date = Date.parse(end_date) - + + # Check for requirementsand raise error if not met raise ArgumentError.new("The end date cannot be before the start date") if @start_date >= @end_date end diff --git a/lib/reservation_manager.rb b/lib/reservation_manager.rb index 447801d10..be8b0c714 100644 --- a/lib/reservation_manager.rb +++ b/lib/reservation_manager.rb @@ -7,13 +7,14 @@ def initialize @all_reservations = Array.new end - # Find available room with date + # Check and find available room by date def available?(start_date, end_date, room) room.reservations.each do |reservation| first_day = Date.parse(start_date) last_day = Date.parse(end_date) + # Check that there is no overlap in date while first_day != last_day return false if (reservation.start_date...reservation.end_date).include?(first_day) first_day += 1 @@ -22,12 +23,12 @@ def available?(start_date, end_date, room) return true end - # List available rooms + # List available rooms that meet requirement def available_rooms(start_date, end_date) all_rooms.select { |room| available?(start_date, end_date, room) } end - # Make a new reservation + # Make a new reservation or raise error if room is unavailable def make_reservation(start_date, end_date) id = all_reservations.length + 1 room = available_rooms(start_date, end_date)[0] @@ -39,7 +40,7 @@ def make_reservation(start_date, end_date) return reservation end - # Look-up a reservation by date + # Look-up a reservation that meet requirement def find_reservation(date) all_reservations.select do |reservation| first_day = reservation.start_date diff --git a/lib/room.rb b/lib/room.rb index ad3d93f07..085ad60ae 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -4,21 +4,21 @@ class Room attr_reader :id, :nightly_rate def initialize(id) + # (Guard clause) raise error if requirement not met raise ArgumentError.new("Not a real room") if id <= 0 || id > 20 @id = id @nightly_rate = 200 end + # Set as empty array if no instance variable was instantiated def reservations @reservations ||= [] end def self.all all_rooms = Array.new - ROOMS.times do |room| - all_rooms << self.new(room + 1) - end + ROOMS.times { |room| all_rooms << self.new(room + 1) } return all_rooms end end From e16149d0019f23e432b89bb307190d067a89e207 Mon Sep 17 00:00:00 2001 From: denisseai Date: Sun, 8 Mar 2020 18:39:13 -0700 Subject: [PATCH 19/25] Added room_block, tests wave 3 discount --- lib/reservation.rb | 14 ++++++++------ lib/room_block.rb | 15 +++++++++++++++ test/reservation_test.rb | 34 ++++++++++++++++++++++++++++----- test/room_block_test.rb | 41 ++++++++++++++++++++++++++++++++++++++++ test/test_helper.rb | 1 + 5 files changed, 94 insertions(+), 11 deletions(-) create mode 100644 lib/room_block.rb create mode 100644 test/room_block_test.rb diff --git a/lib/reservation.rb b/lib/reservation.rb index 383892611..cb35e05b0 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,21 +1,23 @@ module Hotel class Reservation - attr_reader :id, :room, :start_date, :end_date + attr_reader :id, :room, :start_date, :end_date, :discount - def initialize(id, room, start_date, end_date) + def initialize(id, room, start_date, end_date, discount = nil) @id = id @room = room @start_date = Date.parse(start_date) @end_date = Date.parse(end_date) - + @discount = discount + # Check for requirementsand raise error if not met raise ArgumentError.new("The end date cannot be before the start date") if @start_date >= @end_date end - - # Calculate total reservation cost based on nightly rate + + # Calculate total reservation cost based on nightly rate with discount if applied def total_cost - return ((end_date - start_date) * room.nightly_rate) + nights_cost = ((end_date - start_date) * room.nightly_rate) + discount ? nights_cost - (nights_cost * discount) : nights_cost end end end \ No newline at end of file diff --git a/lib/room_block.rb b/lib/room_block.rb new file mode 100644 index 000000000..85cfc1640 --- /dev/null +++ b/lib/room_block.rb @@ -0,0 +1,15 @@ +module Hotel + class RoomBlock + attr_reader :name, :start_date, :end_date, :discount + + def initialize(name, start_date, end_date, discount) + @name = name + @start_date = Date.parse(start_date) + @end_date = Date.parse(end_date) + @discount = discount / 100.0 + + # Check for requirementsand raise error if not met + raise ArgumentError.new("The end date cannot be before the start date") if @start_date >= @end_date + end + end +end \ No newline at end of file diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 9a94c7a33..8b9cc2c87 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -1,54 +1,78 @@ require_relative "test_helper" describe "Reservation" do + # Arrange describe "initialize" do + #Act it "Create an instance of Reservation" do reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_be_kind_of Hotel::Reservation end - + #Act it "Room id tracker" do reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :id expect(reservation.id).must_equal 1 end + # Act it "Keeps track of room" do reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :room expect(reservation.room).must_equal 3 end - + # Act it "Keeps track of the first day" do reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :start_date expect(reservation.start_date).must_equal Date.parse("March 3, 2020") end - + # Act it "Keeps track of the last day" do reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :end_date expect(reservation.end_date).must_equal Date.parse("March 5, 2020") end - + # Act it "Throws error if end date is before start date" do start_date = "March 5, 2020" end_date = "March 3, 2020" # Assert expect{ Hotel::Reservation.new(1, 3, start_date, end_date) }.must_raise ArgumentError end + # Act + it "Keep track of discount" do + reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020", 0.50) + # Assert + expect(reservation).must_respond_to :discount + expect(reservation.discount).must_equal 0.50 + end + # Act + it "Set discount to a default of nil" do + reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") + assert_nil(reservation.discount) + end end - + # Arrange describe "total_cost" do + # Act it "Returns total cost for reservation" do room = Hotel::Room.new(3) reservation = Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020") # Assert expect(reservation.total_cost).must_equal 400 end + # Act + it "Returns total_cost with discount if processed" do + room = Hotel::Room.new(3) + reservation = Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020", 50) + reservation = Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020", 0.50) + # Assert + expect(reservation.total_cost).must_equal 200 + end end end \ No newline at end of file diff --git a/test/room_block_test.rb b/test/room_block_test.rb new file mode 100644 index 000000000..b4c156242 --- /dev/null +++ b/test/room_block_test.rb @@ -0,0 +1,41 @@ +require_relative "test_helper" + +describe "RoomBlock" do + # Arrange + describe "initialize" do + # Act + it "Create instance of RoomBlock" do + block = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50) + # Assert + expect(block).must_be_kind_of Hotel::RoomBlock + end + # Act + it "Name tracker" do + block = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50) + # Assert + expect(block).must_respond_to :name + expect(block.name).must_equal "Anaya" + end + # Act + it "start_date tracker" do + block = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50) + # Assert + expect(block).must_respond_to :start_date + expect(block.start_date).must_equal Date.parse("March 3, 2020") + end + # Act + it "end_date tracker" do + block = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50) + # Assert + expect(block).must_respond_to :end_date + expect(block.end_date).must_equal Date.parse("March 5, 2020") + end + # Act + it "Keep track of discount" do + block = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50) + # Assert + expect(block).must_respond_to :discount + expect(block.discount).must_equal 0.50 + end + end +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index a18f844f7..388a21390 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -13,3 +13,4 @@ require_relative "../lib/room" require_relative "../lib/reservation" require_relative "../lib/reservation_manager" +require_relative "../lib/room_block" From a9be9c600d2d5d6359bddb9fb521c7bcf081d8b3 Mon Sep 17 00:00:00 2001 From: denisseai Date: Sun, 8 Mar 2020 20:04:43 -0700 Subject: [PATCH 20/25] Add block_id and tests with "lazy" let --- lib/room_block.rb | 9 ++++++--- test/room_block_test.rb | 35 ++++++++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/lib/room_block.rb b/lib/room_block.rb index 85cfc1640..4b077bbb3 100644 --- a/lib/room_block.rb +++ b/lib/room_block.rb @@ -1,15 +1,18 @@ module Hotel class RoomBlock - attr_reader :name, :start_date, :end_date, :discount + attr_reader :name, :start_date, :end_date, :discount, :block_id - def initialize(name, start_date, end_date, discount) + def initialize(name, start_date, end_date, discount, block_id) @name = name @start_date = Date.parse(start_date) @end_date = Date.parse(end_date) @discount = discount / 100.0 + @block_id = block_id - # Check for requirementsand raise error if not met + # Check for requirements and raise error if not met for dates raise ArgumentError.new("The end date cannot be before the start date") if @start_date >= @end_date + # Check for requirements and raise error if not met for room's block + raise ArgumentError.new("Invalid amount of rooms for block") if block_id <= 0 || block_id > 5 end end end \ No newline at end of file diff --git a/test/room_block_test.rb b/test/room_block_test.rb index b4c156242..014ac9174 100644 --- a/test/room_block_test.rb +++ b/test/room_block_test.rb @@ -1,41 +1,62 @@ require_relative "test_helper" describe "RoomBlock" do + let (:room1) { Hotel::Room.new(1) } + let (:room2) { Hotel::Room.new(2) } + let (:room3) { Hotel::Room.new(3) } + let (:room4) { Hotel::Room.new(4) } + let (:room5) { Hotel::Room.new(5) } + let (:block) { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 3) } # Arrange - describe "initialize" do - # Act + describe "initialize" do + # Act it "Create instance of RoomBlock" do - block = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50) # Assert expect(block).must_be_kind_of Hotel::RoomBlock end # Act it "Name tracker" do - block = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50) # Assert expect(block).must_respond_to :name expect(block.name).must_equal "Anaya" end # Act it "start_date tracker" do - block = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50) # Assert expect(block).must_respond_to :start_date expect(block.start_date).must_equal Date.parse("March 3, 2020") end # Act it "end_date tracker" do - block = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50) # Assert expect(block).must_respond_to :end_date expect(block.end_date).must_equal Date.parse("March 5, 2020") end # Act it "Keep track of discount" do - block = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50) # Assert expect(block).must_respond_to :discount expect(block.discount).must_equal 0.50 end + # Act + it "Keep track of block_id" do + # Assert + expect(block).must_respond_to :block_id + expect(block.block_id).must_equal 3 + end + # Act + it "1 - 5 rooms allowed per block" do + block_a = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 1) + block_b = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 5) + # Assert + expect(block_a.block_id).must_equal 1 + expect(block_b.block_id).must_equal 5 + end + # Act + it "Raise error for blocks of rooms that don't meet requirements" do + # Assert + expect { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 0) }.must_raise ArgumentError + expect { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 6) }.must_raise ArgumentError + end end end \ No newline at end of file From 6a8aea3ee5370bab022e55138885cd2d08357769 Mon Sep 17 00:00:00 2001 From: denisseai Date: Sun, 8 Mar 2020 20:54:59 -0700 Subject: [PATCH 21/25] Added reservations, list_rooms as arrays and tests --- lib/room_block.rb | 18 ++++++++++------ test/room_block_test.rb | 47 +++++++++++++++++++++++++++-------------- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/lib/room_block.rb b/lib/room_block.rb index 4b077bbb3..27ae1aea8 100644 --- a/lib/room_block.rb +++ b/lib/room_block.rb @@ -1,18 +1,24 @@ module Hotel class RoomBlock - attr_reader :name, :start_date, :end_date, :discount, :block_id + attr_reader :name, :start_date, :end_date, :discount, :how_many_rooms, :list_rooms - def initialize(name, start_date, end_date, discount, block_id) + def initialize(name, start_date, end_date, discount, how_many_rooms, list_rooms) @name = name @start_date = Date.parse(start_date) @end_date = Date.parse(end_date) @discount = discount / 100.0 - @block_id = block_id - + @how_many_rooms = how_many_rooms + @list_rooms = list_rooms + # Check for requirements and raise error if not met for dates raise ArgumentError.new("The end date cannot be before the start date") if @start_date >= @end_date - # Check for requirements and raise error if not met for room's block - raise ArgumentError.new("Invalid amount of rooms for block") if block_id <= 0 || block_id > 5 + # Check for requirements and raise error if block of rooms does not pass + raise ArgumentError.new("Invalid amount of rooms for block") if how_many_rooms <= 0 || how_many_rooms > 5 + end + + # Set as empty array if no instance variable was instantiated + def reservations + @reservations ||= [] end end end \ No newline at end of file diff --git a/test/room_block_test.rb b/test/room_block_test.rb index 014ac9174..581ea0b59 100644 --- a/test/room_block_test.rb +++ b/test/room_block_test.rb @@ -1,12 +1,12 @@ require_relative "test_helper" describe "RoomBlock" do - let (:room1) { Hotel::Room.new(1) } - let (:room2) { Hotel::Room.new(2) } - let (:room3) { Hotel::Room.new(3) } - let (:room4) { Hotel::Room.new(4) } - let (:room5) { Hotel::Room.new(5) } - let (:block) { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 3) } + let (:block_room_1) { Hotel::Room.new(1) } + let (:block_room_2) { Hotel::Room.new(2) } + let (:block_room_3) { Hotel::Room.new(3) } + let (:block_room_4) { Hotel::Room.new(4) } + let (:block_room_5) { Hotel::Room.new(5) } + let (:block) { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 3,[block_room_1, block_room_2, block_room_3]) } # Arrange describe "initialize" do # Act @@ -33,30 +33,45 @@ expect(block.end_date).must_equal Date.parse("March 5, 2020") end # Act - it "Keep track of discount" do + it "discount tracker" do # Assert expect(block).must_respond_to :discount expect(block.discount).must_equal 0.50 end # Act - it "Keep track of block_id" do + it "how_many_rooms' tracker" do # Assert - expect(block).must_respond_to :block_id - expect(block.block_id).must_equal 3 + expect(block).must_respond_to :how_many_rooms + expect(block.how_many_rooms).must_equal 3 end # Act it "1 - 5 rooms allowed per block" do - block_a = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 1) - block_b = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 5) + block_a = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 1, [block_room_1]) + block_b = Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 5, [block_room_1, block_room_2, block_room_3, block_room_4, block_room_5]) # Assert - expect(block_a.block_id).must_equal 1 - expect(block_b.block_id).must_equal 5 + expect(block_a.how_many_rooms).must_equal 1 + expect(block_b.how_many_rooms).must_equal 5 end # Act it "Raise error for blocks of rooms that don't meet requirements" do # Assert - expect { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 0) }.must_raise ArgumentError - expect { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 6) }.must_raise ArgumentError + expect { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 0, [block_room_1]) }.must_raise ArgumentError + expect { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 6, [block_room_1]) }.must_raise ArgumentError + end + # Act + it "list_rooms' tracker" do + # Assert + expect(block).must_respond_to :list_rooms + expect(block.list_rooms).must_be_kind_of Array + expect(block.list_rooms.include?(block_room_1)).must_equal true + expect(block.list_rooms.include?(block_room_2)).must_equal true + expect(block.list_rooms.include?(block_room_3)).must_equal true + end + # Act + it "reservations' tracker" do + # Assert + expect(block).must_respond_to :reservations + expect(block.reservations).must_be_kind_of Array end end end \ No newline at end of file From 084d6d55f685193f86073c4d5df9fefa5ca53d15 Mon Sep 17 00:00:00 2001 From: denisseai Date: Sun, 8 Mar 2020 21:22:49 -0700 Subject: [PATCH 22/25] reservation now has default status and passes test --- lib/reservation.rb | 5 +++-- lib/room_block.rb | 2 ++ test/reservation_test.rb | 32 +++++++++++++++++++------------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index cb35e05b0..08799b1aa 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,14 +1,15 @@ module Hotel class Reservation - attr_reader :id, :room, :start_date, :end_date, :discount + attr_reader :id, :room, :start_date, :end_date, :discount, :status - def initialize(id, room, start_date, end_date, discount = nil) + def initialize(id, room, start_date, end_date, discount = nil, status = :CONFIRMED) @id = id @room = room @start_date = Date.parse(start_date) @end_date = Date.parse(end_date) @discount = discount + @status = status # Check for requirementsand raise error if not met raise ArgumentError.new("The end date cannot be before the start date") if @start_date >= @end_date diff --git a/lib/room_block.rb b/lib/room_block.rb index 27ae1aea8..cb84a49e7 100644 --- a/lib/room_block.rb +++ b/lib/room_block.rb @@ -14,6 +14,8 @@ def initialize(name, start_date, end_date, discount, how_many_rooms, list_rooms) raise ArgumentError.new("The end date cannot be before the start date") if @start_date >= @end_date # Check for requirements and raise error if block of rooms does not pass raise ArgumentError.new("Invalid amount of rooms for block") if how_many_rooms <= 0 || how_many_rooms > 5 + # Check that requested rooms match block + raise ArgumentError.new("Room amount is invalid") if list_rooms.length != how_many_rooms end # Set as empty array if no instance variable was instantiated diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 8b9cc2c87..95027b5c9 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -1,38 +1,35 @@ require_relative "test_helper" describe "Reservation" do + let (:block_room_3) { Hotel::Room.new(3) } + let (:reservation) { Hotel::Reservation.new(1, block_room_3, "March 3, 2020", "March 5, 2020")} # Arrange describe "initialize" do #Act it "Create an instance of Reservation" do - reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_be_kind_of Hotel::Reservation end #Act it "Room id tracker" do - reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :id expect(reservation.id).must_equal 1 end # Act it "Keeps track of room" do - reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :room - expect(reservation.room).must_equal 3 + expect(reservation.room).must_equal block_room_3 end # Act it "Keeps track of the first day" do - reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :start_date expect(reservation.start_date).must_equal Date.parse("March 3, 2020") end # Act it "Keeps track of the last day" do - reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") # Assert expect(reservation).must_respond_to :end_date expect(reservation.end_date).must_equal Date.parse("March 5, 2020") @@ -42,35 +39,44 @@ start_date = "March 5, 2020" end_date = "March 3, 2020" # Assert - expect{ Hotel::Reservation.new(1, 3, start_date, end_date) }.must_raise ArgumentError + expect{ Hotel::Reservation.new(1, block_room_3, start_date, end_date) }.must_raise ArgumentError end # Act - it "Keep track of discount" do - reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020", 0.50) + it "Discount tracker" do + reservation = Hotel::Reservation.new(1, block_room_3, "March 3, 2020", "March 5, 2020", 0.50, :HOLD) # Assert expect(reservation).must_respond_to :discount expect(reservation.discount).must_equal 0.50 end # Act it "Set discount to a default of nil" do - reservation = Hotel::Reservation.new(1, 3, "March 3, 2020", "March 5, 2020") + # Assert assert_nil(reservation.discount) end + # Act + it "Status tracker" do + # Assert + expect(reservation).must_respond_to :status + end + # Act + it "Status default set to 'confirmed' " do + # Assert + expect(reservation.status).must_equal :CONFIRMED + end end + # Arrange describe "total_cost" do # Act it "Returns total cost for reservation" do room = Hotel::Room.new(3) - reservation = Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020") # Assert expect(reservation.total_cost).must_equal 400 end # Act it "Returns total_cost with discount if processed" do room = Hotel::Room.new(3) - reservation = Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020", 50) - reservation = Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020", 0.50) + reservation = Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020", 0.50, :HOLD) # Assert expect(reservation.total_cost).must_equal 200 end From ad7c815d665c25244cc6f79032c3fe2192e490f8 Mon Sep 17 00:00:00 2001 From: denisseai Date: Sun, 8 Mar 2020 21:28:41 -0700 Subject: [PATCH 23/25] Changed error type --- lib/reservation.rb | 2 +- lib/room.rb | 2 +- lib/room_block.rb | 6 +++--- test/reservation_test.rb | 2 +- test/room_block_test.rb | 4 ++-- test/room_test.rb | 6 +++--- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 08799b1aa..8b43f6e3d 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -12,7 +12,7 @@ def initialize(id, room, start_date, end_date, discount = nil, status = :CONFIRM @status = status # Check for requirementsand raise error if not met - raise ArgumentError.new("The end date cannot be before the start date") if @start_date >= @end_date + raise StandardError.new("The end date cannot be before the start date") if @start_date >= @end_date end # Calculate total reservation cost based on nightly rate with discount if applied diff --git a/lib/room.rb b/lib/room.rb index 085ad60ae..5c0df70f0 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -5,7 +5,7 @@ class Room def initialize(id) # (Guard clause) raise error if requirement not met - raise ArgumentError.new("Not a real room") if id <= 0 || id > 20 + raise StandardError.new("Not a real room") if id <= 0 || id > 20 @id = id @nightly_rate = 200 diff --git a/lib/room_block.rb b/lib/room_block.rb index cb84a49e7..e61864d83 100644 --- a/lib/room_block.rb +++ b/lib/room_block.rb @@ -11,11 +11,11 @@ def initialize(name, start_date, end_date, discount, how_many_rooms, list_rooms) @list_rooms = list_rooms # Check for requirements and raise error if not met for dates - raise ArgumentError.new("The end date cannot be before the start date") if @start_date >= @end_date + raise StandardError.new("The end date cannot be before the start date") if @start_date >= @end_date # Check for requirements and raise error if block of rooms does not pass - raise ArgumentError.new("Invalid amount of rooms for block") if how_many_rooms <= 0 || how_many_rooms > 5 + raise StandardError.new("Invalid amount of rooms for block") if how_many_rooms <= 0 || how_many_rooms > 5 # Check that requested rooms match block - raise ArgumentError.new("Room amount is invalid") if list_rooms.length != how_many_rooms + raise StandardError.new("Room amount is invalid") if list_rooms.length != how_many_rooms end # Set as empty array if no instance variable was instantiated diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 95027b5c9..5b99fdcfe 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -39,7 +39,7 @@ start_date = "March 5, 2020" end_date = "March 3, 2020" # Assert - expect{ Hotel::Reservation.new(1, block_room_3, start_date, end_date) }.must_raise ArgumentError + expect{ Hotel::Reservation.new(1, block_room_3, start_date, end_date) }.must_raise StandardError end # Act it "Discount tracker" do diff --git a/test/room_block_test.rb b/test/room_block_test.rb index 581ea0b59..ae94df91b 100644 --- a/test/room_block_test.rb +++ b/test/room_block_test.rb @@ -55,8 +55,8 @@ # Act it "Raise error for blocks of rooms that don't meet requirements" do # Assert - expect { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 0, [block_room_1]) }.must_raise ArgumentError - expect { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 6, [block_room_1]) }.must_raise ArgumentError + expect { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 0, [block_room_1]) }.must_raise StandardError + expect { Hotel::RoomBlock.new("Anaya", "March 3, 2020", "March 5, 2020", 50, 6, [block_room_1]) }.must_raise StandardError end # Act it "list_rooms' tracker" do diff --git a/test/room_test.rb b/test/room_test.rb index 8edd6fcf6..f9d2becf7 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -20,10 +20,10 @@ expect(Hotel::Room.new(20).id).must_equal 20 end - it "Raises an ArgumentError if id is outside of 1 - 20" do + it "Raises an StandardError if id is outside of 1 - 20" do # Assert - expect{Hotel::Room.new(0)}.must_raise ArgumentError - expect{Hotel::Room.new(21)}.must_raise ArgumentError + expect{Hotel::Room.new(0)}.must_raise StandardError + expect{Hotel::Room.new(21)}.must_raise StandardError end it "Same nightly cost for all" do From 2a2642654ccb714e9ed0294c73403db62ac612c4 Mon Sep 17 00:00:00 2001 From: denisseai Date: Sun, 8 Mar 2020 23:02:11 -0700 Subject: [PATCH 24/25] reservation_test arguments changed --- test/reservation_test.rb | 12 ++++++------ test/room_block_test.rb | 3 +++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 5b99fdcfe..a1dce205f 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -1,8 +1,8 @@ require_relative "test_helper" describe "Reservation" do - let (:block_room_3) { Hotel::Room.new(3) } - let (:reservation) { Hotel::Reservation.new(1, block_room_3, "March 3, 2020", "March 5, 2020")} + let (:room) { Hotel::Room.new(3) } + let (:reservation) { Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020")} # Arrange describe "initialize" do #Act @@ -20,7 +20,7 @@ it "Keeps track of room" do # Assert expect(reservation).must_respond_to :room - expect(reservation.room).must_equal block_room_3 + expect(reservation.room).must_equal room end # Act it "Keeps track of the first day" do @@ -39,11 +39,11 @@ start_date = "March 5, 2020" end_date = "March 3, 2020" # Assert - expect{ Hotel::Reservation.new(1, block_room_3, start_date, end_date) }.must_raise StandardError + expect{ Hotel::Reservation.new(1, room, start_date, end_date) }.must_raise StandardError end # Act it "Discount tracker" do - reservation = Hotel::Reservation.new(1, block_room_3, "March 3, 2020", "March 5, 2020", 0.50, :HOLD) + reservation = Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020", 0.50, :CONFIRMED) # Assert expect(reservation).must_respond_to :discount expect(reservation.discount).must_equal 0.50 @@ -76,7 +76,7 @@ # Act it "Returns total_cost with discount if processed" do room = Hotel::Room.new(3) - reservation = Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020", 0.50, :HOLD) + reservation = Hotel::Reservation.new(1, room, "March 3, 2020", "March 5, 2020", 0.50, :CONFIRMED) # Assert expect(reservation.total_cost).must_equal 200 end diff --git a/test/room_block_test.rb b/test/room_block_test.rb index ae94df91b..a86aef79b 100644 --- a/test/room_block_test.rb +++ b/test/room_block_test.rb @@ -72,6 +72,9 @@ # Assert expect(block).must_respond_to :reservations expect(block.reservations).must_be_kind_of Array + block.reservations.each do |reservation| + expect(reservation).must_be_kind_of Hotel::Reservation + end end end end \ No newline at end of file From 1dd09e25e41ee3e14409b68ddb6835db0b2861dd Mon Sep 17 00:00:00 2001 From: denisseai Date: Sun, 8 Mar 2020 23:03:49 -0700 Subject: [PATCH 25/25] Next steps for next time --- refactors.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 refactors.txt diff --git a/refactors.txt b/refactors.txt new file mode 100644 index 000000000..fd0311160 --- /dev/null +++ b/refactors.txt @@ -0,0 +1,23 @@ +# Current thoughts + +- review variable names +- use more S in all waves +- make more classes and method +- read/ask update error types +- let on test files +- keyword arguments vs positional +- make long rows more readable +- Code: ++ reservation_manager.rb: +- add status & discount to defaults +- make method to make a block & it's tests ++ room_block.rb +- remove list_rooms once method above is created +- update the test file for above ++ booking_manager.rb +- update for blocks +- make method to find reservations ++ booking_manager_test.rb +- clean w/let +- add tests for blocks +