From e890f84800a4d59e4c1ef849c2d5c1f6a2361b00 Mon Sep 17 00:00:00 2001 From: dee <30602862+tildeee@users.noreply.github.com> Date: Mon, 2 Mar 2020 08:54:53 -0800 Subject: [PATCH 01/15] remove default checks on ryg --- feedback.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/feedback.md b/feedback.md index 4893f181e..05dd3c165 100644 --- a/feedback.md +++ b/feedback.md @@ -67,9 +67,9 @@ reserves a room from a block | ✔️ | Overall Feedback | Criteria | yes/no | | --- | --- | --- | -| Green (Meets/Exceeds Standards) | 14+ total in all sections | ✔️ -| Yellow (Approaches Standards) | 9-13 total in all sections | ✔️ -| Red (Not at Standard) | 0-8 total in all sections, or assignment is breaking/doesn’t run with less than 5 minutes of debugging | ✔️ +| Green (Meets/Exceeds Standards) | 14+ total in all sections | +| Yellow (Approaches Standards) | 9-13 total in all sections | +| Red (Not at Standard) | 0-8 total in all sections, or assignment is breaking/doesn’t run with less than 5 minutes of debugging | ### Additional Feedback From dd1c8f0aeea33809fac4d7bddcb461616c117ee1 Mon Sep 17 00:00:00 2001 From: dee <30602862+tildeee@users.noreply.github.com> Date: Mon, 2 Mar 2020 09:17:13 -0800 Subject: [PATCH 02/15] Update README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 0036110d9..b6ba3cb5e 100644 --- a/README.md +++ b/README.md @@ -35,10 +35,6 @@ This project is both a culmination of our Intro to Ruby unit and our first stage **It is expected that you will not be able to complete all requirements.** The three waves are organized by difficulty and relevance to the learning goals, and should be tackled in order. -### Hints - -We have included some [optional design scaffolding](https://github.com/AdaGold/hotel/blob/design-scaffolding/design-scaffolding-notes.md) for this project, to help you get started if you don't know where to start, or to provide inspiration if you're a little stuck. Any student should feel free to use this scaffolding in whatever way is most helpful to them. However, **we recommend that you spend at least 1 full day thinking about design before reaching for this scaffolding**, to get practice thinking about this type of problem independently. - ## Getting Started We will use the same project structure we used for the previous project. Library code (such as classes) should be in files in the `lib` folder, and tests should be in files in the `test` folder. From dde5574534e4a6eedd8c2f3eeb30592d0c8c6714 Mon Sep 17 00:00:00 2001 From: dee <30602862+tildeee@users.noreply.github.com> Date: Mon, 2 Mar 2020 09:49:53 -0800 Subject: [PATCH 03/15] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b6ba3cb5e..e76f80e9e 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ Spend **no more than 1 hour** answering those questions and adjusting your proje ## Functional Requirements -### Wave One: Tracking Reservations +### Wave 1: Tracking Reservations In this wave, write the functionality for the system to track valid reservations, so that a user of the hotel system can make and find valid bookings for their hotel. @@ -141,7 +141,7 @@ Remember: Your job is to only build the classes that store information and handl -### Wave Two: Room Availability +### Wave 2: Room Availability #### User Stories @@ -154,7 +154,7 @@ Remember: Your job is to only build the classes that store information and handl - A reservation is allowed start on the same day that another reservation for the same room ends -### Wave Three: Hotel Blocks +### Wave 3: Hotel Blocks If you are not familiar with what a block of hotel rooms, here is a brief description: From 07392cef20e074408ea72b8c9a5038267f96198f Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Mon, 2 Mar 2020 19:48:17 -0800 Subject: [PATCH 04/15] hotel reservation cost --- .DS_Store | Bin 0 -> 6148 bytes lib/date_range.rb | 28 ++++++++++++ lib/hotel_controller.rb | 30 +++++++++++++ lib/reservation.rb | 21 +++++++++ test/date_range.rb | 78 ++++++++++++++++++++++++++++++++++ test/hotel_controller_test.rb | 50 ++++++++++++++++++++++ test/reservation_test.rb | 18 ++++++++ test/test_helper.rb | 12 ++++++ 8 files changed, 237 insertions(+) create mode 100644 .DS_Store create mode 100644 lib/date_range.rb create mode 100644 lib/hotel_controller.rb create mode 100644 lib/reservation.rb create mode 100644 test/date_range.rb create mode 100644 test/hotel_controller_test.rb create mode 100644 test/reservation_test.rb diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..13575b80e9a99a19e29194b93ff92ea4147a08e2 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O0ZYyFBf<5Nqt%nx-a}q+W2X8_|4=Qa!f(^u^G^s^vB(I@wcU~wO8=G4~ltp=`d}9yeshv9MBCn~oc^roe+i@=ff7-9?9mi4X1d%_M$${rX$n|9qdGWLxPa-do^Vn)Yh>|Gv zE7jSo*=p6yX1kfy%vq;X2m7#{WhJqH&^S6B+&w(bp0ei`#VUs%P|B{xIlO|g*x0&)1>Zb=9!E$F5Cg=(8Zn@cK(W0>d#0@t1H{137{K$v1Vywo<_hJ}0S#Usaoj*e z0UO^Eh^9tMW3CWJK)6Z;RH3s9uT?+NE)ai27Z-+50Vv7+W-In literal 0 HcmV?d00001 diff --git a/lib/date_range.rb b/lib/date_range.rb new file mode 100644 index 000000000..b54bb17c8 --- /dev/null +++ b/lib/date_range.rb @@ -0,0 +1,28 @@ +require_relative 'hotel_controller' +require 'date' + +#date range is checking if start date +#overlap if 20 rooms are booked for the start date - if + +module Hotel + class DateRange + attr_accessor :start_date, :end_date + + def initialize(start_date, end_date) + @start_date = Date.new(start_date) + @end_date = Date.new(end_date) + end + + def overlap?(other) + return false + end + + def include?(date) #find + return false + end + + def nights + return 3 + end + end +end \ No newline at end of file diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb new file mode 100644 index 000000000..174786905 --- /dev/null +++ b/lib/hotel_controller.rb @@ -0,0 +1,30 @@ +require_relative 'reservation' +module Hotel + class HotelController + + #Hotel controller makes the reservation using the attributes of reservation class + attr_reader :rooms, :reserve_room, :reservations, :available_rooms + + # Wave 1 + def rooms + rooms = Array.new(20) { |i| i += 1 } + return rooms + end + # You might want to replace this method with an attr_reader + + def reserve_room(start_date, end_date) + # start_date and end_date should be instances of class Date + return Reservation.new(start_date, end_date, nil) + end + + def reservations(date) #list of reserved rooms when given a date + return [] + end + + # Wave 2 + def available_rooms(start_date, end_date) + # start_date and end_date should be instances of class Date + return [] + end + end +end diff --git a/lib/reservation.rb b/lib/reservation.rb new file mode 100644 index 000000000..dd02710a8 --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,21 @@ +require 'date' + +module Hotel + class Reservation + # Feel free to change this method signature as needed. Make sure to update the tests! + def initialize(start_date, end_date, room: nil) + @start_date = start_date + @end_date = end_date + @room = room + end + + def cost + days = (@end_date - @start_date).to_i + price = 200 + total_cost = days * price + return total_cost + end + + end +end + diff --git a/test/date_range.rb b/test/date_range.rb new file mode 100644 index 000000000..554f0f5c7 --- /dev/null +++ b/test/date_range.rb @@ -0,0 +1,78 @@ +require_relative "test_helper" + +describe Hotel::DateRange do + describe "consructor" do + it "Can be initialized with two dates" do + start_date = Date.new(2017, 01, 01) + end_date = start_date + 3 + + range = Hotel::DateRange.new(start_date, end_date) + + expect(range.start_date).must_equal start_date + expect(range.end_date).must_equal end_date + end + + xit "is an an error for negative-lenght ranges" do + end + + xit "is an error to create a 0-length range" do + end + end + + describe "overlap?" do + before do + start_date = Date.new(2017, 01, 01) + end_date = start_date + 3 + + @range = Hotel::DateRange.new(start_date, end_date) + end + + it "returns true for the same range" do + start_date = @range.start_date + end_date = @range.end_date + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_range)).must_equal true + end + + xit "returns true for a contained range" do + end + + xit "returns true for a range that overlaps in front" do + end + + xit "returns true for a range that overlaps in the back" do + end + + xit "returns true for a containing range" do + end + + xit "returns false for a range starting on the end_date date" do + end + + xit "returns false for a range ending on the start_date date" do + end + + xit "returns false for a range completely before" do + end + + xit "returns false for a date completely after" do + end + end + + xdescribe "include?" do + it "reutrns false if the date is clearly out" do + end + + it "returns true for dates in the range" do + end + + it "returns false for the end_date date" do + end + end + + xdescribe "nights" do + it "returns the correct number of nights" do + end + end +end \ No newline at end of file diff --git a/test/hotel_controller_test.rb b/test/hotel_controller_test.rb new file mode 100644 index 000000000..a9d615f55 --- /dev/null +++ b/test/hotel_controller_test.rb @@ -0,0 +1,50 @@ +require_relative "test_helper" + +describe Hotel::HotelController do + before do + @hotel_controller = Hotel::HotelController.new + @date = Date.parse("2020-08-04") + end + describe "wave 1" do + describe "rooms" do + it "returns a list" do + rooms = @hotel_controller.rooms + expect(rooms).must_be_kind_of Array + end + end + describe "reserve_room" do + it "takes two Date objects and returns a Reservation" do + start_date = @date + end_date = start_date + 3 + + reservation = @hotel_controller.reserve_room(start_date, end_date) + + expect(reservation).must_be_kind_of Hotel::Reservation + end + end + + describe "reservations" do + it "takes a Date and returns a list of Reservations" do + reservation_list = @hotel_controller.reservations(@date) + + expect(reservation_list).must_be_kind_of Array + reservation_list.each do |res| + res.must_be_kind_of Reservation + end + end + end + end + + describe "wave 2" do + describe "available_rooms" do + it "takes two dates and returns a list" do + start_date = @date + end_date = start_date + 3 + + room_list = @hotel_controller.available_rooms(start_date, end_date) + + expect(room_list).must_be_kind_of Array + end + 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..98ce4625d --- /dev/null +++ b/test/reservation_test.rb @@ -0,0 +1,18 @@ +require_relative "test_helper" + +describe Hotel::Reservation do + describe "cost" do + it "returns a number" do + start_date = Date.new(2017, 01, 01) + end_date = start_date + 3 + reservation = Hotel::Reservation.new(start_date, end_date) + expect(reservation.cost).must_be_kind_of Numeric + end + it "returns the total cost for the hotel" do + start_date = Date.new(2017, 01, 01) + end_date = Date.new(2017, 01, 04) + reservation = Hotel::Reservation.new(start_date, end_date) + expect(reservation.cost).must_equal 600 + end + end +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index c3a7695cf..2c2b3d037 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -2,7 +2,19 @@ require "minitest" require "minitest/autorun" require "minitest/reporters" +require "minitest/skip_dsl" + +require 'simplecov' +SimpleCov.start do + add_filter 'test/' # Tests should not be checked for coverage. +end Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # require_relative your lib files here! + +require_relative "../lib/hotel_controller.rb" +require_relative "../lib/reservation.rb" +require_relative "../lib/date_range.rb" + + From 3449e7dbf7e7b4a5b3160db110e33d836b00f275 Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Mon, 2 Mar 2020 21:27:45 -0800 Subject: [PATCH 05/15] new class room --- test/room_test.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 test/room_test.rb diff --git a/test/room_test.rb b/test/room_test.rb new file mode 100644 index 000000000..abee0cca1 --- /dev/null +++ b/test/room_test.rb @@ -0,0 +1,10 @@ +require_relative "test_helper" + +describe Hotel::Room do + describe "Room class" do + it "can be created" do + room = Hotel::Room.new(2) + expect(room).must_be_kind_of Hotel::Room + end + end +end \ No newline at end of file From 5b0b0e38a36e70b10927261092a08ecd2db6f8ca Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Tue, 3 Mar 2020 11:29:24 -0800 Subject: [PATCH 06/15] hotel_controller instance of rooms --- lib/hotel_controller.rb | 24 ++++++++++++++---------- lib/reservation.rb | 10 ++++++++-- lib/room.rb | 25 +++++++++++++++++++++++++ test/hotel_controller_test.rb | 10 +++++++--- test/reservation_test.rb | 6 ++++-- test/room_test.rb | 18 ++++++++++++++++-- 6 files changed, 74 insertions(+), 19 deletions(-) create mode 100644 lib/room.rb diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index 174786905..7edc28a6e 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -1,24 +1,26 @@ require_relative 'reservation' +require_relative 'room' +require_relative 'date_range' module Hotel class HotelController #Hotel controller makes the reservation using the attributes of reservation class attr_reader :rooms, :reserve_room, :reservations, :available_rooms - - # Wave 1 - def rooms - rooms = Array.new(20) { |i| i += 1 } - return rooms - end + def initialize + @rooms = Array.new(20) { |i| Room.new(i) } + + @reservations = [] + end # You might want to replace this method with an attr_reader - def reserve_room(start_date, end_date) + def reserve_room(start_date, end_date, room_number) # start_date and end_date should be instances of class Date - return Reservation.new(start_date, end_date, nil) + #return Reservation.new(start_date, end_date, nil) + # @rooms[0].add_reservation(Reservation.new(start_date, end_date, @rooms[0])) end - def reservations(date) #list of reserved rooms when given a date - return [] + def reservation_by_date(date) #list of reserved rooms when given a date + @reservations end # Wave 2 @@ -28,3 +30,5 @@ def available_rooms(start_date, end_date) end end end + +#HotelController.reserve_room("jan 7", "jan 10", 1) \ No newline at end of file diff --git a/lib/reservation.rb b/lib/reservation.rb index dd02710a8..214eb4c93 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,12 +1,14 @@ require 'date' +require_relative 'room' module Hotel class Reservation # Feel free to change this method signature as needed. Make sure to update the tests! - def initialize(start_date, end_date, room: nil) + def initialize(start_date, end_date, room) #room @start_date = start_date @end_date = end_date - @room = room + @room = room #each time that makes a reservation, creates an instance that is added in hotel controller reservations + end def cost @@ -16,6 +18,10 @@ def cost return total_cost end + # def lookup_all_reservations_for_this_room + # @room.lookup_reservations + # end + end end diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..bedf89f12 --- /dev/null +++ b/lib/room.rb @@ -0,0 +1,25 @@ +require_relative 'reservation' + +module Hotel + class Room + attr_reader :id + + def initialize(id) + @id = id + end + + + + end +end + + + +# x = Room.new(2) +# x.add_reservation(start, end) + +# class Room +# def add_reservation +# self.reservations.push(Reservation.new(start,end, self)) +# end +# end \ No newline at end of file diff --git a/test/hotel_controller_test.rb b/test/hotel_controller_test.rb index a9d615f55..749808b2e 100644 --- a/test/hotel_controller_test.rb +++ b/test/hotel_controller_test.rb @@ -11,8 +11,12 @@ rooms = @hotel_controller.rooms expect(rooms).must_be_kind_of Array end + it "value is an instance of room" do + room_one = @hotel_controller.rooms[1] + expect(room_one).must_be_kind_of Hotel::Room + end end - describe "reserve_room" do + xdescribe "reserve_room" do it "takes two Date objects and returns a Reservation" do start_date = @date end_date = start_date + 3 @@ -23,7 +27,7 @@ end end - describe "reservations" do + xdescribe "reservations" do it "takes a Date and returns a list of Reservations" do reservation_list = @hotel_controller.reservations(@date) @@ -35,7 +39,7 @@ end end - describe "wave 2" do + xdescribe "wave 2" do describe "available_rooms" do it "takes two dates and returns a list" do start_date = @date diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 98ce4625d..778e74c0e 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -5,13 +5,15 @@ it "returns a number" do start_date = Date.new(2017, 01, 01) end_date = start_date + 3 - reservation = Hotel::Reservation.new(start_date, end_date) + room = 1 + reservation = Hotel::Reservation.new(start_date, end_date, room) expect(reservation.cost).must_be_kind_of Numeric end it "returns the total cost for the hotel" do start_date = Date.new(2017, 01, 01) end_date = Date.new(2017, 01, 04) - reservation = Hotel::Reservation.new(start_date, end_date) + room = 1 + reservation = Hotel::Reservation.new(start_date, end_date, room) expect(reservation.cost).must_equal 600 end end diff --git a/test/room_test.rb b/test/room_test.rb index abee0cca1..b20dea51a 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -1,10 +1,24 @@ require_relative "test_helper" describe Hotel::Room do + before do + @room = Hotel::Room.new(2) + end describe "Room class" do it "can be created" do - room = Hotel::Room.new(2) - expect(room).must_be_kind_of Hotel::Room + expect(@room).must_be_kind_of Hotel::Room + end + + it "has an Intenger ID" do + expect(@room.id).must_be_kind_of Integer + end + + it "id should be positive" do + room_negative_id = Hotel::Room.new(-2) + expect(room_negative_id).must_raise ArgumentError end + + + end end \ No newline at end of file From 8d3fdb2d4d47f0e06deb609fc6d80eb370a16102 Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Tue, 3 Mar 2020 19:21:27 -0800 Subject: [PATCH 07/15] added date_range to reservation class --- lib/date_range.rb | 9 +++--- lib/hotel_controller.rb | 21 ++++++------- lib/reservation.rb | 23 +++++++------- lib/room.rb | 15 ++-------- test/hotel_controller_test.rb | 56 ++++++++++++++++++++++------------- test/reservation_test.rb | 20 ++++++------- test/room_test.rb | 10 +------ test/test_helper.rb | 7 +++-- 8 files changed, 79 insertions(+), 82 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index b54bb17c8..883bc1085 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -9,20 +9,21 @@ class DateRange attr_accessor :start_date, :end_date def initialize(start_date, end_date) - @start_date = Date.new(start_date) - @end_date = Date.new(end_date) + @start_date = start_date + @end_date = end_date end def overlap?(other) + return false end - def include?(date) #find + def include?(date) return false end def nights - return 3 + return (@end_date - @start_date).to_i end end end \ No newline at end of file diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index 7edc28a6e..a51a875a4 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -7,22 +7,19 @@ class HotelController #Hotel controller makes the reservation using the attributes of reservation class attr_reader :rooms, :reserve_room, :reservations, :available_rooms def initialize - @rooms = Array.new(20) { |i| Room.new(i) } - + @rooms = Array.new(20) { |i| Room.new(i + 1) } @reservations = [] end - # You might want to replace this method with an attr_reader - - def reserve_room(start_date, end_date, room_number) - # start_date and end_date should be instances of class Date - #return Reservation.new(start_date, end_date, nil) - # @rooms[0].add_reservation(Reservation.new(start_date, end_date, @rooms[0])) - end - def reservation_by_date(date) #list of reserved rooms when given a date - @reservations + def reserve_room(start_date, end_date) + new_reservation = Reservation.new(DateRange.new(start_date, end_date), @rooms[0]) + return new_reservation end + # def reservation_by_date(date) #list of reserved rooms when given a date + + # end + # Wave 2 def available_rooms(start_date, end_date) # start_date and end_date should be instances of class Date @@ -31,4 +28,4 @@ def available_rooms(start_date, end_date) end end -#HotelController.reserve_room("jan 7", "jan 10", 1) \ No newline at end of file + # @rooms[0].add_reservation(Reservation.new(start_date, end_date, @rooms[0])) \ No newline at end of file diff --git a/lib/reservation.rb b/lib/reservation.rb index 214eb4c93..a9ff3e5d1 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,27 +1,28 @@ require 'date' -require_relative 'room' +require_relative 'date_range' module Hotel class Reservation - # Feel free to change this method signature as needed. Make sure to update the tests! - def initialize(start_date, end_date, room) #room - @start_date = start_date - @end_date = end_date + attr_reader :id, :date_range, :room, :cost + def initialize(date_range, room) #room + @date_range = date_range @room = room #each time that makes a reservation, creates an instance that is added in hotel controller reservations end def cost - days = (@end_date - @start_date).to_i price = 200 - total_cost = days * price - return total_cost + total_cost = @date_range.nights * price + return total_cost end - # def lookup_all_reservations_for_this_room + end +end + + + # def lookup_all_reservations_for_this_room # @room.lookup_reservations # end - end -end + \ No newline at end of file diff --git a/lib/room.rb b/lib/room.rb index bedf89f12..0e58cd689 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -5,21 +5,10 @@ class Room attr_reader :id def initialize(id) - @id = id + @id = id end - - + end end - - -# x = Room.new(2) -# x.add_reservation(start, end) - -# class Room -# def add_reservation -# self.reservations.push(Reservation.new(start,end, self)) -# end -# end \ No newline at end of file diff --git a/test/hotel_controller_test.rb b/test/hotel_controller_test.rb index 749808b2e..68333437f 100644 --- a/test/hotel_controller_test.rb +++ b/test/hotel_controller_test.rb @@ -15,8 +15,24 @@ room_one = @hotel_controller.rooms[1] expect(room_one).must_be_kind_of Hotel::Room end + + it "array is size 20 rooms" do + length_rooms = @hotel_controller.rooms.length + expect(length_rooms).must_equal 20 + end + + it "first number of hotel id is 1" do + first_room = @hotel_controller.rooms[0].id + expect(first_room).must_equal 1 + end + + it "last number of the hotel id is 20" do + last_room = @hotel_controller.rooms[-1].id + expect(last_room).must_equal 20 + end end - xdescribe "reserve_room" do + + describe "reserve_room" do it "takes two Date objects and returns a Reservation" do start_date = @date end_date = start_date + 3 @@ -27,28 +43,28 @@ end end - xdescribe "reservations" do - it "takes a Date and returns a list of Reservations" do - reservation_list = @hotel_controller.reservations(@date) + # xdescribe "reservations" do + # it "takes a Date and returns a list of Reservations" do + # reservation_list = @hotel_controller.reservations(@date) - expect(reservation_list).must_be_kind_of Array - reservation_list.each do |res| - res.must_be_kind_of Reservation - end - end - end - end + # expect(reservation_list).must_be_kind_of Array + # reservation_list.each do |res| + # res.must_be_kind_of Reservation + # end + # end + # end + # end - xdescribe "wave 2" do - describe "available_rooms" do - it "takes two dates and returns a list" do - start_date = @date - end_date = start_date + 3 + # xdescribe "wave 2" do + # describe "available_rooms" do + # it "takes two dates and returns a list" do + # start_date = @date + # end_date = start_date + 3 - room_list = @hotel_controller.available_rooms(start_date, end_date) + # room_list = @hotel_controller.available_rooms(start_date, end_date) - expect(room_list).must_be_kind_of Array - end - end + # expect(room_list).must_be_kind_of Array + # end + # end end end \ No newline at end of file diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 778e74c0e..998126af5 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -1,20 +1,20 @@ require_relative "test_helper" describe Hotel::Reservation do + before do + start_date = Date.new(2017, 01, 01) + end_date = start_date + 3 + @date_range = Hotel::DateRange.new(start_date, end_date) + @room = 1 + @reservation = Hotel::Reservation.new(@date_range, @room) + end + describe "cost" do it "returns a number" do - start_date = Date.new(2017, 01, 01) - end_date = start_date + 3 - room = 1 - reservation = Hotel::Reservation.new(start_date, end_date, room) - expect(reservation.cost).must_be_kind_of Numeric + expect(@reservation.cost).must_be_kind_of Numeric end it "returns the total cost for the hotel" do - start_date = Date.new(2017, 01, 01) - end_date = Date.new(2017, 01, 04) - room = 1 - reservation = Hotel::Reservation.new(start_date, end_date, room) - expect(reservation.cost).must_equal 600 + expect(@reservation.cost).must_equal 600 end end end \ No newline at end of file diff --git a/test/room_test.rb b/test/room_test.rb index b20dea51a..99d6c63b0 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -11,14 +11,6 @@ it "has an Intenger ID" do expect(@room.id).must_be_kind_of Integer - end - - it "id should be positive" do - room_negative_id = Hotel::Room.new(-2) - expect(room_negative_id).must_raise ArgumentError - end - - - + end end end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 2c2b3d037..fe99c1cda 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -13,8 +13,9 @@ # require_relative your lib files here! -require_relative "../lib/hotel_controller.rb" -require_relative "../lib/reservation.rb" -require_relative "../lib/date_range.rb" +require_relative "../lib/hotel_controller" +require_relative "../lib/reservation" +require_relative "../lib/date_range" +require_relative "../lib/room" From 94f9a055218cbb299ae01793656f1494ad84657e Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Wed, 4 Mar 2020 10:50:15 -0800 Subject: [PATCH 08/15] updated tests in date range, 0-length and negative length --- test/{date_range.rb => date_range_test.rb} | 33 +++++++++++++++------- test/hotel_controller_test.rb | 2 +- test/room_test.rb | 8 ++++++ 3 files changed, 32 insertions(+), 11 deletions(-) rename test/{date_range.rb => date_range_test.rb} (64%) diff --git a/test/date_range.rb b/test/date_range_test.rb similarity index 64% rename from test/date_range.rb rename to test/date_range_test.rb index 554f0f5c7..e81a0843e 100644 --- a/test/date_range.rb +++ b/test/date_range_test.rb @@ -2,24 +2,37 @@ describe Hotel::DateRange do describe "consructor" do - it "Can be initialized with two dates" do - start_date = Date.new(2017, 01, 01) - end_date = start_date + 3 + before do + @start_date = Date.new(2017, 01, 01) + @end_date = @start_date + 3 - range = Hotel::DateRange.new(start_date, end_date) + @range = Hotel::DateRange.new(@start_date, @end_date) + end - expect(range.start_date).must_equal start_date - expect(range.end_date).must_equal end_date + it "Can be initialized with two dates" do + + expect(@range.start_date).must_equal @start_date + expect(@range.end_date).must_equal @end_date end - xit "is an an error for negative-lenght ranges" do + it "is an an error for negative-lenght ranges" do + @start_date = Date.today + @end_date = @start_date - 3 + + expect { Hotel::DateRange.new(@start_date, @end_date) }.must_raise ArgumentError + end - xit "is an error to create a 0-length range" do + it "is an error to create a 0-length range" do + + @start_date = Date.today + @end_date = @start_date + expect { Hotel::DateRange.new(@start_date, @end_date) }.must_raise ArgumentError + end end - describe "overlap?" do + xdescribe "overlap?" do before do start_date = Date.new(2017, 01, 01) end_date = start_date + 3 @@ -27,7 +40,7 @@ @range = Hotel::DateRange.new(start_date, end_date) end - it "returns true for the same range" do + xit "returns true for the same range" do start_date = @range.start_date end_date = @range.end_date test_range = Hotel::DateRange.new(start_date, end_date) diff --git a/test/hotel_controller_test.rb b/test/hotel_controller_test.rb index 68333437f..7b04ec7dc 100644 --- a/test/hotel_controller_test.rb +++ b/test/hotel_controller_test.rb @@ -37,7 +37,7 @@ start_date = @date end_date = start_date + 3 - reservation = @hotel_controller.reserve_room(start_date, end_date) + reservation = @hotel_controller.reserve_room(DateRange.new(start_date, end_date)) expect(reservation).must_be_kind_of Hotel::Reservation end diff --git a/test/room_test.rb b/test/room_test.rb index 99d6c63b0..d4a9bfed8 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -12,5 +12,13 @@ it "has an Intenger ID" do expect(@room.id).must_be_kind_of Integer end + describe "Room reservations" + + it "is an array" do + end + + end + + end end \ No newline at end of file From 174d05106451c3d34847ec068eccecb73fbc5ee8 Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Wed, 4 Mar 2020 20:46:02 -0800 Subject: [PATCH 09/15] date_range overlap tests --- lib/date_range.rb | 22 ++++++---- lib/hotel_controller.rb | 33 ++++++++++----- lib/reservation.rb | 6 +-- lib/room.rb | 16 ++++++- test/date_range_test.rb | 92 ++++++++++++++++++++++++++++------------- 5 files changed, 116 insertions(+), 53 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 883bc1085..5f8ca4e96 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -6,24 +6,30 @@ module Hotel class DateRange - attr_accessor :start_date, :end_date + attr_accessor :start_date, :end_date def initialize(start_date, end_date) @start_date = start_date @end_date = end_date - end - def overlap?(other) - - return false + raise ArgumentError.new("date range is incorrect") if @start_date > @end_date || @start_date == @end_date end - - def include?(date) - return false + + def overlap?(second_date_range) + if second_date_range.start_date >= @end_date || second_date_range.end_date <= @start_date + return false + else + return true + end end + # def include?(date) + # return false + # end + def nights return (@end_date - @start_date).to_i end + end end \ No newline at end of file diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index a51a875a4..7e92158ad 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -5,27 +5,38 @@ module Hotel class HotelController #Hotel controller makes the reservation using the attributes of reservation class - attr_reader :rooms, :reserve_room, :reservations, :available_rooms + attr_reader :rooms, :reserve_room, :reservations, :get_available_rooms def initialize @rooms = Array.new(20) { |i| Room.new(i + 1) } - @reservations = [] + @reservations = [] end - def reserve_room(start_date, end_date) - new_reservation = Reservation.new(DateRange.new(start_date, end_date), @rooms[0]) + def reserve_room(date_range) + available_rooms = get_available_room(date_range) + available_room = available_rooms[0] + + new_reservation = Reservation.new(date_range, available_room) #find the available room + @reservations << new_reservation + return new_reservation end - # def reservation_by_date(date) #list of reserved rooms when given a date + # def lookup_reservation_by_date(date_range) + # return + # end + # def get_available_rooms(date_range) #list of rooms + # rooms_available = [] + # @rooms.each do |room| + # if room.check_availability(date_range) + + # end + # return rooms_available # end - # Wave 2 - def available_rooms(start_date, end_date) - # start_date and end_date should be instances of class Date - return [] - end + end end - # @rooms[0].add_reservation(Reservation.new(start_date, end_date, @rooms[0])) \ No newline at end of file + + diff --git a/lib/reservation.rb b/lib/reservation.rb index a9ff3e5d1..459964f59 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -4,10 +4,9 @@ module Hotel class Reservation attr_reader :id, :date_range, :room, :cost - def initialize(date_range, room) #room + def initialize(date_range, room) @date_range = date_range - @room = room #each time that makes a reservation, creates an instance that is added in hotel controller reservations - + @room = room #instance of room end def cost @@ -19,7 +18,6 @@ def cost end end - # def lookup_all_reservations_for_this_room # @room.lookup_reservations # end diff --git a/lib/room.rb b/lib/room.rb index 0e58cd689..9f47b28a9 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,14 +1,26 @@ require_relative 'reservation' +require_relative 'date_range' module Hotel class Room - attr_reader :id + attr_reader :id, :reservations def initialize(id) @id = id + @reservations = [] + end + + def check_availability(date_range) # is available? #giving a date range to room and check if room is available for that day + @reservations.each do |r| + if r.date_range.overlap?(date_range) + return false + end + end + return true end - end end + + diff --git a/test/date_range_test.rb b/test/date_range_test.rb index e81a0843e..e2cb38eb7 100644 --- a/test/date_range_test.rb +++ b/test/date_range_test.rb @@ -3,44 +3,41 @@ describe Hotel::DateRange do describe "consructor" do before do - @start_date = Date.new(2017, 01, 01) - @end_date = @start_date + 3 + start_date = Date.new(2017, 01, 01) + end_date = start_date + 3 - @range = Hotel::DateRange.new(@start_date, @end_date) + @range = Hotel::DateRange.new(start_date, end_date) end it "Can be initialized with two dates" do - - expect(@range.start_date).must_equal @start_date - expect(@range.end_date).must_equal @end_date + start_date = Date.new(2017, 01, 01) + end_date = start_date + 3 + expect(@range.start_date).must_equal start_date + expect(@range.end_date).must_equal end_date end it "is an an error for negative-lenght ranges" do - @start_date = Date.today - @end_date = @start_date - 3 - - expect { Hotel::DateRange.new(@start_date, @end_date) }.must_raise ArgumentError - + start_date = Date.today + end_date = start_date - 3 + expect { Hotel::DateRange.new(start_date, end_date) }.must_raise ArgumentError end it "is an error to create a 0-length range" do - - @start_date = Date.today - @end_date = @start_date - expect { Hotel::DateRange.new(@start_date, @end_date) }.must_raise ArgumentError - + start_date = Date.today + end_date = @start_date + expect { Hotel::DateRange.new(start_date, end_date) }.must_raise ArgumentError end end - xdescribe "overlap?" do + describe "overlap?" do before do start_date = Date.new(2017, 01, 01) - end_date = start_date + 3 + end_date = start_date + 10 @range = Hotel::DateRange.new(start_date, end_date) end - xit "returns true for the same range" do + it "returns true for the same range" do start_date = @range.start_date end_date = @range.end_date test_range = Hotel::DateRange.new(start_date, end_date) @@ -48,28 +45,61 @@ expect(@range.overlap?(test_range)).must_equal true end - xit "returns true for a contained range" do + it "returns true for a contained range" do + start_date = Date.new(2017, 01, 03) + end_date = start_date + 3 + second_range = Hotel::DateRange.new(start_date, end_date) + expect(@range.overlap?(second_range)).must_equal true + end - xit "returns true for a range that overlaps in front" do + it "returns true for a range that overlaps in front" do + start_date = Date.new(2016, 12, 27) + end_date = @range.start_date + 1 #end of the first range should be available for second_range night + second_range = Hotel::DateRange.new(start_date, end_date) + expect(@range.overlap?(second_range)).must_equal true end - xit "returns true for a range that overlaps in the back" do + it "returns true for a range that overlaps in the back" do + start_date = @range.start_date + end_date = start_date + 4 + second_range = Hotel::DateRange.new(start_date, end_date) + expect(@range.overlap?(second_range)).must_equal true end - xit "returns true for a containing range" do + it "returns true for a containing range" do + start_date = @range.start_date - 4 + end_date = @range.end_date + 3 + second_range = Hotel::DateRange.new(start_date, end_date) + expect(@range.overlap?(second_range)).must_equal true end - xit "returns false for a range starting on the end_date date" do + it "returns false for a range starting on the end_date date" do + start_date = @range.end_date + end_date = start_date + 3 + second_range = Hotel::DateRange.new(start_date, end_date) + expect(@range.overlap?(second_range)).must_equal false end - xit "returns false for a range ending on the start_date date" do + it "returns false for a range ending on the start_date date" do + start_date = Date.new(2016, 12, 27) + end_date = @range.start_date + second_range = Hotel::DateRange.new(start_date, end_date) + expect(@range.overlap?(second_range)).must_equal false end - xit "returns false for a range completely before" do + it "returns false for a range completely before" do + start_date = Date.new(2016, 12, 20) + end_date = start_date + 5 + second_range = Hotel::DateRange.new(start_date, end_date) + expect(@range.overlap?(second_range)).must_equal false end - xit "returns false for a date completely after" do + it "returns false for a date completely after" do + start_date = Date.new(2017, 02, 03) + end_date = start_date + 5 + second_range = Hotel::DateRange.new(start_date, end_date) + expect(@range.overlap?(second_range)).must_equal false end end @@ -84,8 +114,14 @@ end end - xdescribe "nights" do + describe "nights" do it "returns the correct number of nights" do + start_date = Date.new(2017, 02, 03) + end_date = start_date + 3 + range = Hotel::DateRange.new(start_date, end_date) + expect(range.nights).must_equal 3 + end end + end \ No newline at end of file From deca557a00be7026c29a6f1a7411b548c2026999 Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Fri, 6 Mar 2020 16:11:22 -0800 Subject: [PATCH 10/15] new tests for room_test related to instances --- lib/hotel_controller.rb | 1 + lib/room.rb | 11 +++++++---- test/room_test.rb | 33 +++++++++++++++++++++++---------- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index 7e92158ad..3a191395d 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -18,6 +18,7 @@ def reserve_room(date_range) new_reservation = Reservation.new(date_range, available_room) #find the available room @reservations << new_reservation + return new_reservation end diff --git a/lib/room.rb b/lib/room.rb index 9f47b28a9..07fb8c3c6 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -4,12 +4,12 @@ module Hotel class Room attr_reader :id, :reservations - - def initialize(id) + + def initialize(id, reservations = []) @id = id @reservations = [] end - + def check_availability(date_range) # is available? #giving a date range to room and check if room is available for that day @reservations.each do |r| if r.date_range.overlap?(date_range) @@ -18,7 +18,10 @@ def check_availability(date_range) # is available? #giving a date range to room end return true end - + + def add_reservation(reservation) + @reservations << reservation + end end end diff --git a/test/room_test.rb b/test/room_test.rb index d4a9bfed8..7832b1a5e 100644 --- a/test/room_test.rb +++ b/test/room_test.rb @@ -1,24 +1,37 @@ require_relative "test_helper" describe Hotel::Room do + before do - @room = Hotel::Room.new(2) + start_date = Date.new(2020, 03, 01) + end_date = start_date + 3 + date_range = Hotel::DateRange.new(start_date, end_date) + @room = Hotel::Room.new(1) + reservation = Hotel::Reservation.new(date_range, @room) + @room.add_reservation(reservation) + end describe "Room class" do + it "can be created" do expect(@room).must_be_kind_of Hotel::Room end - it "has an Intenger ID" do expect(@room.id).must_be_kind_of Integer - end - describe "Room reservations" - - it "is an array" do end - - end - - end + describe "Room reservations" do + it "is an array" do + expect(@room.reservations).must_be_kind_of Array + end + it "is an array of instances of reservation" do + expect(@room.reservations[0]).must_be_kind_of Hotel::Reservation + end + it "date_range is an instance of DateRange" do + expect(@room.reservations[0].date_range).must_be_kind_of Hotel::DateRange + end + it "room is an instance of room" do + expect(@room.reservations[0].room).must_be_kind_of Hotel::Room + end + end end \ No newline at end of file From 8a205c08403797b5401728d4cdcc1cfc257981aa Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Sat, 7 Mar 2020 14:06:16 -0800 Subject: [PATCH 11/15] hotel controller test updates --- lib/hotel_controller.rb | 31 +++++++++----------- test/date_range_test.rb | 2 +- test/hotel_controller_test.rb | 53 +++++++++++++++-------------------- 3 files changed, 38 insertions(+), 48 deletions(-) diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index 3a191395d..bd7987781 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -1,24 +1,20 @@ require_relative 'reservation' require_relative 'room' require_relative 'date_range' + module Hotel class HotelController #Hotel controller makes the reservation using the attributes of reservation class - attr_reader :rooms, :reserve_room, :reservations, :get_available_rooms + attr_reader :rooms, :reserve_room, :get_available_rooms def initialize @rooms = Array.new(20) { |i| Room.new(i + 1) } - @reservations = [] end def reserve_room(date_range) - available_rooms = get_available_room(date_range) - available_room = available_rooms[0] - - new_reservation = Reservation.new(date_range, available_room) #find the available room - @reservations << new_reservation - - + room_to_reserve = get_available_rooms(date_range)[0] #getting the first instance of room available of the array for the reservation + new_reservation = Reservation.new(date_range, room_to_reserve) + room_to_reserve.add_reservation(new_reservation) return new_reservation end @@ -26,14 +22,15 @@ def reserve_room(date_range) # return # end - # def get_available_rooms(date_range) #list of rooms - # rooms_available = [] - # @rooms.each do |room| - # if room.check_availability(date_range) - - # end - # return rooms_available - # end + def get_available_rooms(date_range) #list of rooms + rooms_available = [] + @rooms.each do |room| + if room.check_availability(date_range) + rooms_available << room + end + end + return rooms_available + end end diff --git a/test/date_range_test.rb b/test/date_range_test.rb index e2cb38eb7..2fd867753 100644 --- a/test/date_range_test.rb +++ b/test/date_range_test.rb @@ -117,7 +117,7 @@ describe "nights" do it "returns the correct number of nights" do start_date = Date.new(2017, 02, 03) - end_date = start_date + 3 + end_date = start_date + 3 range = Hotel::DateRange.new(start_date, end_date) expect(range.nights).must_equal 3 diff --git a/test/hotel_controller_test.rb b/test/hotel_controller_test.rb index 7b04ec7dc..14b8e00c0 100644 --- a/test/hotel_controller_test.rb +++ b/test/hotel_controller_test.rb @@ -2,8 +2,12 @@ describe Hotel::HotelController do before do + start_date = Date.new(2020, 01, 04) + end_date = start_date + 3 @hotel_controller = Hotel::HotelController.new - @date = Date.parse("2020-08-04") + @date_range = Hotel::DateRange.new(start_date, end_date) + @reservation = @hotel_controller.reserve_room(@date_range) + @room_list = @hotel_controller.get_available_rooms(@date_range) end describe "wave 1" do describe "rooms" do @@ -32,39 +36,28 @@ end end - describe "reserve_room" do - it "takes two Date objects and returns a Reservation" do - start_date = @date - end_date = start_date + 3 - - reservation = @hotel_controller.reserve_room(DateRange.new(start_date, end_date)) - - expect(reservation).must_be_kind_of Hotel::Reservation + describe "reserve a room" do + it "takes date_range object and returns a Reservation" do + expect(@reservation).must_be_kind_of Hotel::Reservation end - end - - # xdescribe "reservations" do - # it "takes a Date and returns a list of Reservations" do - # reservation_list = @hotel_controller.reservations(@date) - # expect(reservation_list).must_be_kind_of Array - # reservation_list.each do |res| - # res.must_be_kind_of Reservation - # end - # end - # end - # end + it "date range is an instance of the class DateRange" do + expect(@reservation.date_range).must_be_kind_of Hotel::DateRange + end - # xdescribe "wave 2" do - # describe "available_rooms" do - # it "takes two dates and returns a list" do - # start_date = @date - # end_date = start_date + 3 + end - # room_list = @hotel_controller.available_rooms(start_date, end_date) + describe "wave 2" do + describe "get_available_rooms" do + it "takes a date_range and returns a list" do - # expect(room_list).must_be_kind_of Array - # end - # end + + expect(@room_list).must_be_kind_of Array + end + it "returns a list of instances of rooms" do + expect(@room_list[0]).must_be_kind_of Hotel::Room + end + end + end end end \ No newline at end of file From 59a2f61df29206e065532eee5a6d1743e42c0387 Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Sat, 7 Mar 2020 15:39:14 -0800 Subject: [PATCH 12/15] if rooms all reserved, no available rooms message is raised --- lib/date_range.rb | 8 -------- lib/hotel_controller.rb | 18 +++++++++++------- test/date_range_test.rb | 11 ----------- test/hotel_controller_test.rb | 7 +++---- 4 files changed, 14 insertions(+), 30 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 5f8ca4e96..ad5ade378 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -1,9 +1,6 @@ require_relative 'hotel_controller' require 'date' -#date range is checking if start date -#overlap if 20 rooms are booked for the start date - if - module Hotel class DateRange attr_accessor :start_date, :end_date @@ -11,7 +8,6 @@ class DateRange def initialize(start_date, end_date) @start_date = start_date @end_date = end_date - raise ArgumentError.new("date range is incorrect") if @start_date > @end_date || @start_date == @end_date end @@ -23,10 +19,6 @@ def overlap?(second_date_range) end end - # def include?(date) - # return false - # end - def nights return (@end_date - @start_date).to_i end diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index bd7987781..2d292163e 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -13,15 +13,15 @@ def initialize def reserve_room(date_range) room_to_reserve = get_available_rooms(date_range)[0] #getting the first instance of room available of the array for the reservation - new_reservation = Reservation.new(date_range, room_to_reserve) - room_to_reserve.add_reservation(new_reservation) - return new_reservation + if room_to_reserve == nil + raise ArgumentError.new("No available rooms for date range") + else + new_reservation = Reservation.new(date_range, room_to_reserve) + room_to_reserve.add_reservation(new_reservation) + return new_reservation + end end - # def lookup_reservation_by_date(date_range) - # return - # end - def get_available_rooms(date_range) #list of rooms rooms_available = [] @rooms.each do |room| @@ -32,6 +32,10 @@ def get_available_rooms(date_range) #list of rooms return rooms_available end + def reservations_by_date(date_range) + + end + end end diff --git a/test/date_range_test.rb b/test/date_range_test.rb index 2fd867753..caeec8466 100644 --- a/test/date_range_test.rb +++ b/test/date_range_test.rb @@ -103,17 +103,6 @@ end end - xdescribe "include?" do - it "reutrns false if the date is clearly out" do - end - - it "returns true for dates in the range" do - end - - it "returns false for the end_date date" do - end - end - describe "nights" do it "returns the correct number of nights" do start_date = Date.new(2017, 02, 03) diff --git a/test/hotel_controller_test.rb b/test/hotel_controller_test.rb index 14b8e00c0..e422cd61f 100644 --- a/test/hotel_controller_test.rb +++ b/test/hotel_controller_test.rb @@ -40,23 +40,22 @@ it "takes date_range object and returns a Reservation" do expect(@reservation).must_be_kind_of Hotel::Reservation end - it "date range is an instance of the class DateRange" do expect(@reservation.date_range).must_be_kind_of Hotel::DateRange end - end describe "wave 2" do describe "get_available_rooms" do it "takes a date_range and returns a list" do - - expect(@room_list).must_be_kind_of Array end it "returns a list of instances of rooms" do expect(@room_list[0]).must_be_kind_of Hotel::Room end + it "return an array with all the available rooms" do + expect(@room_list.length).must_equal 19 + end end end end From 87491a911506766f69fa740f81bf6c1aa9e67a14 Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Sat, 7 Mar 2020 19:30:16 -0800 Subject: [PATCH 13/15] include_date_range? method --- lib/date_range.rb | 5 +++++ lib/hotel_controller.rb | 11 +++++++++-- lib/reservation.rb | 7 +------ test/date_range_test.rb | 22 +++++++++++++++++++++- test/hotel_controller_test.rb | 34 ++++++++++++++++++++++++---------- 5 files changed, 60 insertions(+), 19 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index ad5ade378..c5fb11a2c 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -19,6 +19,11 @@ def overlap?(second_date_range) end end + + def include_date_range?(date_range) + date_range.start_date.between?(@start_date, @end_date) || date_range.end_date.between?(@start_date, @end_date) + end + def nights return (@end_date - @start_date).to_i end diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index 2d292163e..ae7eb07a5 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -32,8 +32,15 @@ def get_available_rooms(date_range) #list of rooms return rooms_available end - def reservations_by_date(date_range) - + def access_reservations(date_range) ##give me the rooms reserved for date range + list_reservations = [] + @rooms.each do |room| + room.reservations.each do |r| + if r.date_range.include_date_range?(date_range) + list_reservations << r + end + end + return list_reservations end diff --git a/lib/reservation.rb b/lib/reservation.rb index 459964f59..65bbeba70 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -6,7 +6,7 @@ class Reservation attr_reader :id, :date_range, :room, :cost def initialize(date_range, room) @date_range = date_range - @room = room #instance of room + @room = room end def cost @@ -18,9 +18,4 @@ def cost end end - # def lookup_all_reservations_for_this_room - # @room.lookup_reservations - # end - - \ No newline at end of file diff --git a/test/date_range_test.rb b/test/date_range_test.rb index caeec8466..dbf49760c 100644 --- a/test/date_range_test.rb +++ b/test/date_range_test.rb @@ -43,7 +43,7 @@ test_range = Hotel::DateRange.new(start_date, end_date) expect(@range.overlap?(test_range)).must_equal true - end + end it "returns true for a contained range" do start_date = Date.new(2017, 01, 03) @@ -112,5 +112,25 @@ end end + describe "include_date_range?" do + before do + start_date = Date.new(2017, 01, 01) + end_date = start_date + 3 + @range = Hotel::DateRange.new(start_date, end_date) + end + it "is included in the range" do + second_start_date = Date.new(2017, 01, 01) + second_end_date = second_start_date + 1 + second_range= Hotel::DateRange.new(second_start_date, second_end_date) + expect(@range.include_date_range?(second_range)).must_equal true + end + it "is not included in the range" do + start_date = Date.new(2016, 12, 27) + end_date = start_date + 2 + second_range = Hotel::DateRange.new(start_date, end_date) + expect(@range.include_date_range?(second_range)).must_equal false + end + end + end \ No newline at end of file diff --git a/test/hotel_controller_test.rb b/test/hotel_controller_test.rb index e422cd61f..1247df0ea 100644 --- a/test/hotel_controller_test.rb +++ b/test/hotel_controller_test.rb @@ -45,18 +45,32 @@ end end - describe "wave 2" do - describe "get_available_rooms" do - it "takes a date_range and returns a list" do - expect(@room_list).must_be_kind_of Array - end - it "returns a list of instances of rooms" do - expect(@room_list[0]).must_be_kind_of Hotel::Room + describe "get_available_rooms" do + it "takes a date_range and returns a list" do + expect(@room_list).must_be_kind_of Array + end + it "returns a list of instances of rooms" do + expect(@room_list[0]).must_be_kind_of Hotel::Room + end + it "return an array with all the available rooms" do + expect(@room_list.length).must_equal 19 + end + + describe "access reservations" do + it "returns an array" do + array = @hotel_controller.access_reservations(@date_range) + expect(array).must_be_kind_of Array end - it "return an array with all the available rooms" do - expect(@room_list.length).must_equal 19 + it "returns an array of reservations for the date range" do + reservations = @hotel_controller.access_reservations(@date_range)[0] + expect(reservations).must_be_kind_of Hotel::Reservation end - end + it "returns only reservations within the date range" do + reservations = @hotel_controller.access_reservations(@date_range) + expect() + end + + end end end end \ No newline at end of file From 81815566f0daaecc40383ff5f29802ea040cfc21 Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Sun, 8 Mar 2020 22:13:56 -0700 Subject: [PATCH 14/15] final changes in the hotel controller for reserving a block --- .DS_Store | Bin 6148 -> 6148 bytes .vscode/launch.json | 16 ++++ lib/date_range.rb | 1 - lib/hotel_controller.rb | 52 ++++++----- lib/reservation.rb | 16 +++- test/date_range_test.rb | 2 +- test/hotel_controller_test.rb | 157 ++++++++++++++++++++-------------- test/test_helper.rb | 12 ++- 8 files changed, 163 insertions(+), 93 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.DS_Store b/.DS_Store index 13575b80e9a99a19e29194b93ff92ea4147a08e2..6e8273414c117d6152da48f28d1b89261a03ab59 100644 GIT binary patch delta 77 zcmZoMXfc@JFUrioz`)4BAi%&-#E{64&X8IbT$Hz2ka; exception + puts "Unable to reserve block: #{exception}" + end + end + end + end -end - - - +end \ No newline at end of file diff --git a/lib/reservation.rb b/lib/reservation.rb index 65bbeba70..8262ab673 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -3,15 +3,23 @@ module Hotel class Reservation - attr_reader :id, :date_range, :room, :cost - def initialize(date_range, room) + attr_reader :date_range, :room, :price, :cost, :hotel_block + def initialize(date_range, room, price = 200, hotel_block = :no) @date_range = date_range @room = room + @price = price + @hotel_block = hotel_block + + if @hotel_block == :yes + @price = 180 + end + + valid_block = [:yes, :no] + raise ArgumentError if !valid_block.include?(@hotel_block) end def cost - price = 200 - total_cost = @date_range.nights * price + total_cost = @date_range.nights * @price return total_cost end diff --git a/test/date_range_test.rb b/test/date_range_test.rb index dbf49760c..42d2e2798 100644 --- a/test/date_range_test.rb +++ b/test/date_range_test.rb @@ -1,7 +1,7 @@ require_relative "test_helper" describe Hotel::DateRange do - describe "consructor" do + describe "constructor" do before do start_date = Date.new(2017, 01, 01) end_date = start_date + 3 diff --git a/test/hotel_controller_test.rb b/test/hotel_controller_test.rb index 1247df0ea..1ecef538b 100644 --- a/test/hotel_controller_test.rb +++ b/test/hotel_controller_test.rb @@ -4,73 +4,106 @@ before do start_date = Date.new(2020, 01, 04) end_date = start_date + 3 - @hotel_controller = Hotel::HotelController.new @date_range = Hotel::DateRange.new(start_date, end_date) - @reservation = @hotel_controller.reserve_room(@date_range) - @room_list = @hotel_controller.get_available_rooms(@date_range) - end - describe "wave 1" do - describe "rooms" do - it "returns a list" do - rooms = @hotel_controller.rooms - expect(rooms).must_be_kind_of Array - end - it "value is an instance of room" do - room_one = @hotel_controller.rooms[1] - expect(room_one).must_be_kind_of Hotel::Room - end - - it "array is size 20 rooms" do - length_rooms = @hotel_controller.rooms.length - expect(length_rooms).must_equal 20 - end - - it "first number of hotel id is 1" do - first_room = @hotel_controller.rooms[0].id - expect(first_room).must_equal 1 - end + @hotel_controller = Hotel::HotelController.new + + + @room_list = @hotel_controller.get_available_rooms(@date_range) + @available_room = @room_list[0] + @get_room = @hotel_controller.reserve_room(@available_room, @date_range) - it "last number of the hotel id is 20" do - last_room = @hotel_controller.rooms[-1].id - expect(last_room).must_equal 20 - end + @room_list = @hotel_controller.get_available_rooms(@date_range) + end + + describe "rooms" do + it "returns a list" do + rooms = @hotel_controller.rooms + expect(rooms).must_be_kind_of Array end + it "value is an instance of room" do + room_one = @hotel_controller.rooms[1] + expect(room_one).must_be_kind_of Hotel::Room + end - describe "reserve a room" do - it "takes date_range object and returns a Reservation" do - expect(@reservation).must_be_kind_of Hotel::Reservation - end - it "date range is an instance of the class DateRange" do - expect(@reservation.date_range).must_be_kind_of Hotel::DateRange - end + it "array is size 20 rooms" do + length_rooms = @hotel_controller.rooms.length + expect(length_rooms).must_equal 20 + end + + it "first number of hotel id is 1" do + first_room = @hotel_controller.rooms[0].id + expect(first_room).must_equal 1 + end + + it "last number of the hotel id is 20" do + last_room = @hotel_controller.rooms[-1].id + expect(last_room).must_equal 20 + end + end + + describe "reserve a room" do + it "takes date_range object and returns a Reservation" do + expect(@get_room).must_be_kind_of Hotel::Reservation end - - describe "get_available_rooms" do - it "takes a date_range and returns a list" do - expect(@room_list).must_be_kind_of Array - end - it "returns a list of instances of rooms" do - expect(@room_list[0]).must_be_kind_of Hotel::Room - end - it "return an array with all the available rooms" do - expect(@room_list.length).must_equal 19 - end + it "date range is an instance of the class DateRange" do + expect(@get_room.date_range).must_be_kind_of Hotel::DateRange + end + it "raises an argument error if room is not available" do + expect { @hotel_controller.reserve_room(@available_room, @date_range) }.must_raise ArgumentError + end + end + + describe "get_available_rooms" do + it "takes a date_range and returns a list" do + expect(@room_list).must_be_kind_of Array + end + it "returns a list of instances of rooms" do + expect(@room_list[0]).must_be_kind_of Hotel::Room + end + it "return an array with all the available rooms" do + expect(@room_list.length).must_equal 19 + end + end + + describe "access reservations" do + it "returns an array" do + array = @hotel_controller.access_reservations(@date_range) + expect(array).must_be_kind_of Array + end + + it "returns an array of reservations for the date range" do + reservations = @hotel_controller.access_reservations(@date_range)[0] + expect(reservations).must_be_kind_of Hotel::Reservation + end + + it "returns only reservations within the date range" do + second_date = Date.new(2021, 01, 04) + @hotel_controller.reserve_room(@room_list[0], Hotel::DateRange.new(second_date, second_date + 3)) - describe "access reservations" do - it "returns an array" do - array = @hotel_controller.access_reservations(@date_range) - expect(array).must_be_kind_of Array - end - it "returns an array of reservations for the date range" do - reservations = @hotel_controller.access_reservations(@date_range)[0] - expect(reservations).must_be_kind_of Hotel::Reservation - end - it "returns only reservations within the date range" do - reservations = @hotel_controller.access_reservations(@date_range) - expect() - end - - end + start_date = Date.new(2020, 01, 04) + end_date = start_date + 1 + date_range = Hotel::DateRange.new(start_date, end_date) + + reservations = @hotel_controller.access_reservations(date_range) + dates_valid = true + reservations.each do |r| + if !r.date_range.include_date_range?(date_range) + dates_valid = false + end + end + expect(dates_valid).must_equal true end - end + end + describe "reserve a block" do + before do + start_date = Date.new(2020, 10, 21) + end_date = start_date + 4 + @date_range_block = Hotel::DateRange.new(start_date, end_date) + rooms = [@room_list[1], @room_list[2], @room_list[3]] + @reserving_block = @hotel_controller.reserve_block(@date_range_block, rooms) + end + it "returns an array" do + expect(@reserving_block).must_be_kind_of Array + end + end end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index fe99c1cda..84732927b 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,13 +1,16 @@ # Add simplecov +require 'simplecov' +SimpleCov.start do + add_filter 'test/' # Tests should not be checked for coverage. +end + require "minitest" require "minitest/autorun" require "minitest/reporters" require "minitest/skip_dsl" +require 'date' + -require 'simplecov' -SimpleCov.start do - add_filter 'test/' # Tests should not be checked for coverage. -end Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new @@ -19,3 +22,4 @@ require_relative "../lib/room" + From 33451833045bf4c145cfdb9b539d48ac2693313e Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Sun, 8 Mar 2020 22:23:33 -0700 Subject: [PATCH 15/15] details about refactors.txt --- lib/hotel_controller.rb | 2 -- refactors.txt | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 refactors.txt diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index ca948c6de..d8d328c43 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -4,8 +4,6 @@ module Hotel class HotelController - - #Hotel controller makes the reservation using the attributes of reservation class attr_reader :rooms, :get_available_rooms, :access_reservations attr_accessor :reserve_room def initialize diff --git a/refactors.txt b/refactors.txt new file mode 100644 index 000000000..6a2c9ff88 --- /dev/null +++ b/refactors.txt @@ -0,0 +1,4 @@ +One thing i would do differently would be to create a class for hotel blocks. +I found myself lost multiple times for not having a specific space for creating the blocks. +I would want to find a better method name for access_reservations, could not come up with a more clear name that +indicate the function.