From a2c2c4de7b1568d68c3bf16d814357854df1be93 Mon Sep 17 00:00:00 2001 From: Dan Roberts Date: Thu, 25 Jul 2019 15:57:31 -0700 Subject: [PATCH 01/32] Build design scaffolding --- README.md | 1 - lib/date_range.rb | 20 +++++++++ lib/hotel_controller.rb | 24 +++++++++++ lib/reservation.rb | 11 +++++ spec/date_range_spec.rb | 78 +++++++++++++++++++++++++++++++++++ spec/hotel_controller_spec.rb | 42 +++++++++++++++++++ spec/reservation_spec.rb | 12 ++++++ spec/spec_helper.rb | 13 ++++-- 8 files changed, 197 insertions(+), 4 deletions(-) create mode 100644 lib/date_range.rb create mode 100644 lib/hotel_controller.rb create mode 100644 lib/reservation.rb create mode 100644 spec/date_range_spec.rb create mode 100644 spec/hotel_controller_spec.rb create mode 100644 spec/reservation_spec.rb diff --git a/README.md b/README.md index 07dc42bcf..db6077382 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ Reinforce and practice all of the Ruby and programming concepts we've covered in This is a [stage 3](https://github.com/Ada-Developers-Academy/pedagogy/blob/master/rule-of-three.md), individual project. - ## Introduction Your company has been contracted to build a booking system for a small hotel. This system will be used by employees working at the front desk, and will not be available to the general public. diff --git a/lib/date_range.rb b/lib/date_range.rb new file mode 100644 index 000000000..da2197f22 --- /dev/null +++ b/lib/date_range.rb @@ -0,0 +1,20 @@ +module Hotel + class DateRange + attr_accessor :start_date, :end_date + + def initialize(start_date, end_date) + end + + def overlap?(other) + return false + end + + def include?(date) + return false + end + + def nights + return 3 + end + end +end diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb new file mode 100644 index 000000000..accca6de4 --- /dev/null +++ b/lib/hotel_controller.rb @@ -0,0 +1,24 @@ +module Hotel + class HotelController + # Wave 1 + def rooms + # You might want to replace this method with an attr_reader + return [] + end + + 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) + 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..7587837e7 --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,11 @@ +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) + end + + def cost + return 3 + end + end +end diff --git a/spec/date_range_spec.rb b/spec/date_range_spec.rb new file mode 100644 index 000000000..7c155a0b1 --- /dev/null +++ b/spec/date_range_spec.rb @@ -0,0 +1,78 @@ +require_relative "spec_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 diff --git a/spec/hotel_controller_spec.rb b/spec/hotel_controller_spec.rb new file mode 100644 index 000000000..5f6cbe264 --- /dev/null +++ b/spec/hotel_controller_spec.rb @@ -0,0 +1,42 @@ +require_relative "spec_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 + end + end +end diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb new file mode 100644 index 000000000..a3be669c0 --- /dev/null +++ b/spec/reservation_spec.rb @@ -0,0 +1,12 @@ +require_relative "spec_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, nil) + expect(reservation.cost).must_be_kind_of Numeric + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 4d1e3fdc8..f4a246774 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,8 +1,15 @@ -require 'minitest' -require 'minitest/autorun' -require 'minitest/reporters' # Add simplecov +require "date" + +require "minitest" +require "minitest/autorun" +require "minitest/reporters" +require "minitest/skip_dsl" + Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # Require_relative your lib files here! +require_relative "../lib/hotel_controller.rb" +require_relative "../lib/reservation.rb" +require_relative "../lib/date_range.rb" From df7c9b8a5ef7ed5ad1668f131c9a12502b7346e0 Mon Sep 17 00:00:00 2001 From: Dan Roberts Date: Thu, 25 Jul 2019 16:12:22 -0700 Subject: [PATCH 02/32] Update notes about design scaffolding --- design-scaffolding-notes.md | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 design-scaffolding-notes.md diff --git a/design-scaffolding-notes.md b/design-scaffolding-notes.md new file mode 100644 index 000000000..250bacd3b --- /dev/null +++ b/design-scaffolding-notes.md @@ -0,0 +1,38 @@ +# Hotel Design Scaffolding + +## Purpose + +This scaffolding is intended for students who are feeling overwhelmed by the open-ended nature of the Hotel project. Its goal is to answer some of the initial questions about how project files should be laid out, so that students can focus on designing the object interactions and complex Ruby logic that are the core learning goals of the project. The hope is to do so without removing too much of the interesting design work. + +This document and the associated code is intended to be student-facing - if you have a student you think would benefit from this, send them a link! + +### What it includes + +- Three class stubs, `HotelController`, `Reservation` and `DateRange` +- Stubs for public methods of each class from waves 1 and 2, as described in the user stories +- "Interface" tests for each class method that invoke it with the right parameters and verify the return type +- Full test stubs for the `DateRange` class + +### What it does not include + +- Opinions about how classes should interact or data should be stored +- Opinions about whether there should be a `Room` class, or whether it should know about `Reservation`s +- Private helper methods to keep code organized + +Students should feel free to modify any code as they see fit, including changing method signatures, adding new classes and methods, reordering things, not looking at the `DateRange` tests because they want to give it a shot on their own, etc. + +## How to use this code + +Design scaffolding code lives on the `design-scaffolding` branch. + +You can use this code either as inspiration, or as a starting point. If using it as an inspiration, it follows our standard project layout, with product code under `lib/` and tests under `spec/`. + +If you choose to use the code on this branch as a starting point, follow these steps to start your project: + +``` +$ git clone +$ cd hotel +$ git merge design-scaffolding +``` + +You can try to merge in the design scaffolding after you've started, but you'll probably end up with merge conflicts. See an instructor if you're not able to resolve them yourself. \ No newline at end of file From a673135ffa12e9d39db8e0dbd8a3f7c32307ab49 Mon Sep 17 00:00:00 2001 From: Dan Roberts Date: Thu, 25 Jul 2019 16:25:51 -0700 Subject: [PATCH 03/32] Add interface test for HotelController#available_rooms --- spec/hotel_controller_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spec/hotel_controller_spec.rb b/spec/hotel_controller_spec.rb index 5f6cbe264..daf78c0b3 100644 --- a/spec/hotel_controller_spec.rb +++ b/spec/hotel_controller_spec.rb @@ -37,6 +37,14 @@ 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 From d5489c477d86ced2d300979fe4d76bcf94ca1fb9 Mon Sep 17 00:00:00 2001 From: Dan Roberts Date: Mon, 29 Jul 2019 12:36:36 -0700 Subject: [PATCH 04/32] Correct branch name for merge instructions --- design-scaffolding-notes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/design-scaffolding-notes.md b/design-scaffolding-notes.md index 250bacd3b..141f71585 100644 --- a/design-scaffolding-notes.md +++ b/design-scaffolding-notes.md @@ -32,7 +32,7 @@ If you choose to use the code on this branch as a starting point, follow these s ``` $ git clone $ cd hotel -$ git merge design-scaffolding +$ git merge origin/design-scaffolding ``` -You can try to merge in the design scaffolding after you've started, but you'll probably end up with merge conflicts. See an instructor if you're not able to resolve them yourself. \ No newline at end of file +You can try to merge in the design scaffolding after you've started, but you'll probably end up with merge conflicts. See an instructor if you're not able to resolve them yourself. From eaa813b8afc43a25d6333e81601a950e70a28985 Mon Sep 17 00:00:00 2001 From: emaust Date: Fri, 6 Sep 2019 19:07:44 -0700 Subject: [PATCH 05/32] Instance of time: pass, duration calculated correctly: pass --- lib/time.rb | 18 ++++++++++++++++++ test/test_helper.rb | 6 +++++- test/time_test.rb | 26 ++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 lib/time.rb create mode 100644 test/time_test.rb diff --git a/lib/time.rb b/lib/time.rb new file mode 100644 index 000000000..187578ed8 --- /dev/null +++ b/lib/time.rb @@ -0,0 +1,18 @@ +require 'date' + +class Time + attr_accessor :check_in, :check_out, :duration, :stay + + def initialize + @check_in = check_in + @check_out = check_out + @duration = duration + end + + def reserve_time(date1, date2) + check_in = Date._parse(date1) + check_out = Date._parse(date2) + @duration = check_out - check_in + end + +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index c3a7695cf..60e5dfb7b 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -3,6 +3,10 @@ require "minitest/autorun" require "minitest/reporters" + Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new -# require_relative your lib files here! + +require_relative "../lib/time.rb" +require_relative "../lib/reservation.rb" +require_relative "../lib/service.rb" diff --git a/test/time_test.rb b/test/time_test.rb new file mode 100644 index 000000000..8ba68c8e4 --- /dev/null +++ b/test/time_test.rb @@ -0,0 +1,26 @@ +require 'date' +require_relative 'test_helper' +require_relative '../lib/time' + +require 'pry' + +describe "Date" do + it "is an instance of Date" do + # Arrange (conditions and inputs) + # Act (act on the object or method under test) + @stay = Date.new(1940/12/21) + # Assert that the expected results have occurred) + expect(@stay).must_be_kind_of Date + end + + it "accurately calculates duration" do + + check_in = Date.parse("1940/12/21") + check_out = Date.parse("1940/12/29") + duration = (check_out - check_in) + duration = duration.to_i + + expect(duration).must_equal 8 + end + +end From 461934c150571f0f37d5862206d5288f136d6c14 Mon Sep 17 00:00:00 2001 From: emaust Date: Sat, 7 Sep 2019 12:54:53 -0700 Subject: [PATCH 06/32] Rooms populated correctly in array --- lib/service.rb | 26 ++++++++++++++++++++++++++ test/service_test.rb | 29 +++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 lib/service.rb create mode 100644 test/service_test.rb diff --git a/lib/service.rb b/lib/service.rb new file mode 100644 index 000000000..6380e4e1d --- /dev/null +++ b/lib/service.rb @@ -0,0 +1,26 @@ +require 'date' +require_relative '../lib/reservation' +require_relative '../lib/time' + +class Service + + attr_reader :rooms + + def initialize(rooms:[]) + @rooms = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] + # @cost = cost + # @reservation = reservation + + end + + # def cost(duration) + # @cost = duration * price + # end + + + + # def reserve_room(stay_length) + # reserved = + # end + +end \ No newline at end of file diff --git a/test/service_test.rb b/test/service_test.rb new file mode 100644 index 000000000..75584fc8b --- /dev/null +++ b/test/service_test.rb @@ -0,0 +1,29 @@ +require_relative 'test_helper' +require_relative '../lib/service' +require_relative '../lib/time' + +describe "Room functions" do + it "lists the rooms within the hotel" do + + list = Service.new + expect(list.rooms).must_be_kind_of Array + end + + it "accurately returns a room number from array" do + list = Service.new + expect(list.rooms[4]).must_equal 5 + end + +end +# describe "Service class" do +# it "creates a new passenger instance" do +# # # Arrange (conditions and inputs) +# # # Act (act on the object or method under test) +# # @reservation = Service.new(2018/10/10, 2018/10/20, 10, 2000) + +# Service.new(2010/10/10, 2010/10/14, ) + +# # expect(Service.price).must_equal 200 +# end + +# end \ No newline at end of file From b3ccd7643c566a4675a4d4736453e6ea1ea0acec Mon Sep 17 00:00:00 2001 From: emaust Date: Sat, 7 Sep 2019 14:09:26 -0700 Subject: [PATCH 07/32] Calculates cost correctly --- lib/reservation.rb | 16 ++++++++++++++++ lib/service.rb | 15 ++++++++------- lib/time.rb | 5 +++-- test/reservation_test.rb | 13 +++++++++++++ test/service_test.rb | 17 ++++++++++------- 5 files changed, 50 insertions(+), 16 deletions(-) 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..8ae4fb7dd --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,16 @@ + +class Reservation + attr_reader :rooms, :price + attr_writer :reservation + + def initialize + @reservation = reservation + + end + + # def total_days(date_in, date_out) + # stay_length = date_in - date_out + # end + + +end diff --git a/lib/service.rb b/lib/service.rb index 6380e4e1d..cc6199a21 100644 --- a/lib/service.rb +++ b/lib/service.rb @@ -4,19 +4,20 @@ class Service - attr_reader :rooms + attr_reader :rooms, :price + attr_accessor :reservation, :cost def initialize(rooms:[]) @rooms = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] - # @cost = cost - # @reservation = reservation + @cost = cost + @reservation = reservation + @price = 200 end - # def cost(duration) - # @cost = duration * price - # end - + def reserve_room(duration) + @cost = duration * price + end # def reserve_room(stay_length) diff --git a/lib/time.rb b/lib/time.rb index 187578ed8..7a7a523e2 100644 --- a/lib/time.rb +++ b/lib/time.rb @@ -1,7 +1,7 @@ require 'date' class Time - attr_accessor :check_in, :check_out, :duration, :stay + attr_reader :check_in, :check_out, :duration def initialize @check_in = check_in @@ -12,7 +12,8 @@ def initialize def reserve_time(date1, date2) check_in = Date._parse(date1) check_out = Date._parse(date2) - @duration = check_out - check_in + duration = check_out - check_in + @duration = duration.to_i 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..b63ba0426 --- /dev/null +++ b/test/reservation_test.rb @@ -0,0 +1,13 @@ + +require_relative 'test_helper' +require_relative '../lib/time' +require_relative '../lib/service' +require_relative '../lib/reservation' + + +# describe "Reservation class" do +# it "itializes a reservation" do + +# expect(@reservation).must_be_kind_of Reservation +# end +# end \ No newline at end of file diff --git a/test/service_test.rb b/test/service_test.rb index 75584fc8b..32fbf2366 100644 --- a/test/service_test.rb +++ b/test/service_test.rb @@ -5,16 +5,22 @@ describe "Room functions" do it "lists the rooms within the hotel" do - list = Service.new - expect(list.rooms).must_be_kind_of Array + reservation = Service.new + expect(reservation.rooms).must_be_kind_of Array end it "accurately returns a room number from array" do - list = Service.new - expect(list.rooms[4]).must_equal 5 + reservation = Service.new + expect(reservation.rooms[4]).must_equal 5 end end + +describe "makes reservation" do + it "accurately calculates cost" do + expect(Service.new.reserve_room(6)).must_equal 1200 + end +end # describe "Service class" do # it "creates a new passenger instance" do # # # Arrange (conditions and inputs) @@ -24,6 +30,3 @@ # Service.new(2010/10/10, 2010/10/14, ) # # expect(Service.price).must_equal 200 -# end - -# end \ No newline at end of file From f4407a1373e0fd63afa5c396eb3a20e663dd1aef Mon Sep 17 00:00:00 2001 From: emaust Date: Sat, 7 Sep 2019 15:20:50 -0700 Subject: [PATCH 08/32] Generates room number: pass --- lib/reservation.rb | 21 +++++++++++++++------ lib/service.rb | 10 ++-------- test/reservation_test.rb | 19 +++++++++++++------ test/service_test.rb | 12 ++++++++---- 4 files changed, 38 insertions(+), 24 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 8ae4fb7dd..e3638e96c 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,16 +1,25 @@ +require_relative '../lib/time' +require_relative '../lib/service' + + class Reservation - attr_reader :rooms, :price + attr_reader :room, :price, :duration, :cost, :check_in, :check_out attr_writer :reservation - def initialize - @reservation = reservation + + def initialize(check_in, check_out) + @duration = duration + @cost = cost + @room = room + @check_in = check_in + @check_out = check_out + @room = rand(1..20) end - # def total_days(date_in, date_out) - # stay_length = date_in - date_out - # end + + end diff --git a/lib/service.rb b/lib/service.rb index cc6199a21..875a1bc0c 100644 --- a/lib/service.rb +++ b/lib/service.rb @@ -7,21 +7,15 @@ class Service attr_reader :rooms, :price attr_accessor :reservation, :cost - def initialize(rooms:[]) + def initialize @rooms = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] @cost = cost - @reservation = reservation @price = 200 - end - def reserve_room(duration) + def room_cost(duration) @cost = duration * price end - # def reserve_room(stay_length) - # reserved = - # end - end \ No newline at end of file diff --git a/test/reservation_test.rb b/test/reservation_test.rb index b63ba0426..efc809c1e 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -5,9 +5,16 @@ require_relative '../lib/reservation' -# describe "Reservation class" do -# it "itializes a reservation" do - -# expect(@reservation).must_be_kind_of Reservation -# end -# end \ No newline at end of file +describe "Reservation class" do + it "creates instance of reservation" do + @reservation = Reservation.new(2018/12/20, 2018/12/25) + expect(@reservation).must_be_kind_of Reservation + end + + it "returns room for reservation" do + expect(Reservation.new(2018/12/20, 2018/12/25).room).must_be_kind_of Integer + end + + # it "returns list of reservations for given date" + # expect(Reservation.find(2018/12/20) +end \ No newline at end of file diff --git a/test/service_test.rb b/test/service_test.rb index 32fbf2366..dc637916d 100644 --- a/test/service_test.rb +++ b/test/service_test.rb @@ -18,13 +18,17 @@ describe "makes reservation" do it "accurately calculates cost" do - expect(Service.new.reserve_room(6)).must_equal 1200 + expect(Service.new.room_cost(6)).must_equal 1200 end + + # @reservation = Service.new + # it "creates instance of reservation" do + # expect(@cost).must_equal 1200 + # end end + # describe "Service class" do -# it "creates a new passenger instance" do -# # # Arrange (conditions and inputs) -# # # Act (act on the object or method under test) +# it "creates a new instance of reservation" # # @reservation = Service.new(2018/10/10, 2018/10/20, 10, 2000) # Service.new(2010/10/10, 2010/10/14, ) From 5a2572be0093caad6b98f56b356effb6a259c455 Mon Sep 17 00:00:00 2001 From: emaust Date: Sat, 7 Sep 2019 19:23:12 -0700 Subject: [PATCH 09/32] Changed reservation class - initalize includes dates --- lib/reservation.rb | 4 +--- lib/time.rb | 7 ++++--- test/reservation_test.rb | 16 ++++++++++------ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index e3638e96c..b68f55319 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -5,7 +5,7 @@ class Reservation attr_reader :room, :price, :duration, :cost, :check_in, :check_out - attr_writer :reservation + attr_writer :reservations def initialize(check_in, check_out) @@ -14,12 +14,10 @@ def initialize(check_in, check_out) @room = room @check_in = check_in @check_out = check_out - @room = rand(1..20) end - end diff --git a/lib/time.rb b/lib/time.rb index 7a7a523e2..2ca34a255 100644 --- a/lib/time.rb +++ b/lib/time.rb @@ -1,4 +1,6 @@ require 'date' +require_relative '../lib/reservation' +require_relative '../lib/service' class Time attr_reader :check_in, :check_out, :duration @@ -10,10 +12,9 @@ def initialize end def reserve_time(date1, date2) - check_in = Date._parse(date1) - check_out = Date._parse(date2) + check_in = Date.parse(date1) + check_out = Date.parse(date2) duration = check_out - check_in - @duration = duration.to_i end end \ No newline at end of file diff --git a/test/reservation_test.rb b/test/reservation_test.rb index efc809c1e..8a17a8bf6 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -6,15 +6,19 @@ describe "Reservation class" do - it "creates instance of reservation" do - @reservation = Reservation.new(2018/12/20, 2018/12/25) + it "returns an instance of Reservation" do + @reservation = Reservation.new(2018/12/20, 2018/12/26) expect(@reservation).must_be_kind_of Reservation end - it "returns room for reservation" do - expect(Reservation.new(2018/12/20, 2018/12/25).room).must_be_kind_of Integer + it "creates an instance of room number between 1..20" do + @reservation = Reservation.new(2018/12/20, 2018/12/26) + expect(@reservation.room).must_be_kind_of Integer end - # it "returns list of reservations for given date" - # expect(Reservation.find(2018/12/20) + it "creates an instance of check_in and _out" do + @reservation = Reservation.new(2018/12/20, 2018/12/26) + expect(@reservation.check_in).must_equal 2018/12/20 + expect(@reservation.check_out).must_equal 2018/12/26 + end end \ No newline at end of file From aa59da5cf4280b4f3eabc115e2d6277ddb9cdcb3 Mon Sep 17 00:00:00 2001 From: emaust Date: Sat, 7 Sep 2019 21:42:04 -0700 Subject: [PATCH 10/32] Corrections to duration - 53% coverage --- lib/reservation.rb | 3 +-- lib/service.rb | 15 +++++++++------ lib/time.rb | 3 ++- test/service_test.rb | 29 ++++++++++++++++------------- test/test_helper.rb | 4 ++++ test/time_test.rb | 18 +++++++++--------- 6 files changed, 41 insertions(+), 31 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index b68f55319..9b41e4278 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -9,11 +9,10 @@ class Reservation def initialize(check_in, check_out) - @duration = duration - @cost = cost @room = room @check_in = check_in @check_out = check_out + @price = 200 @room = rand(1..20) end diff --git a/lib/service.rb b/lib/service.rb index 875a1bc0c..050df5ef4 100644 --- a/lib/service.rb +++ b/lib/service.rb @@ -4,18 +4,21 @@ class Service - attr_reader :rooms, :price - attr_accessor :reservation, :cost + attr_reader :rooms, :price, :check_in, :check_out + attr_accessor :reservation, :cost, :passenger - def initialize + def initialize(check_in, check_out) @rooms = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] @cost = cost @price = 200 + @check_in = check_in + @check_out = check_out end + + def room_cost(duration) @cost = duration * price end - - -end \ No newline at end of file +end + diff --git a/lib/time.rb b/lib/time.rb index 2ca34a255..08647ecb4 100644 --- a/lib/time.rb +++ b/lib/time.rb @@ -2,7 +2,7 @@ require_relative '../lib/reservation' require_relative '../lib/service' -class Time +class Dates attr_reader :check_in, :check_out, :duration def initialize @@ -15,6 +15,7 @@ def reserve_time(date1, date2) check_in = Date.parse(date1) check_out = Date.parse(date2) duration = check_out - check_in + @duration = duration.to_i end end \ No newline at end of file diff --git a/test/service_test.rb b/test/service_test.rb index dc637916d..4e943cfb2 100644 --- a/test/service_test.rb +++ b/test/service_test.rb @@ -5,27 +5,30 @@ describe "Room functions" do it "lists the rooms within the hotel" do - reservation = Service.new + reservation = Service.new(2010/12/20, 2010/12/26) expect(reservation.rooms).must_be_kind_of Array end it "accurately returns a room number from array" do - reservation = Service.new + reservation = Service.new(2010/12/20, 2010/12/26) expect(reservation.rooms[4]).must_equal 5 end -end - -describe "makes reservation" do - it "accurately calculates cost" do - expect(Service.new.room_cost(6)).must_equal 1200 + it "creates an instance of duration" do + @duration = Dates.new.reserve_time("2010/12/20", "2010/12/26") + expect(@duration).must_equal 6 end - - # @reservation = Service.new - # it "creates instance of reservation" do - # expect(@cost).must_equal 1200 - # end -end +end +# describe "makes reservation" do +# it "accurately calculates cost" do +# expect(Service.new.room_cost(6)).must_equal 1200 +# end + +# # @reservation = Service.new +# # it "creates instance of reservation" do +# # expect(@cost).must_equal 1200 +# # end +# end # describe "Service class" do # it "creates a new instance of reservation" diff --git a/test/test_helper.rb b/test/test_helper.rb index 60e5dfb7b..5c8a848bd 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -2,7 +2,11 @@ require "minitest" require "minitest/autorun" require "minitest/reporters" +require 'simplecov' +SimpleCov.start do + add_filter 'test/' +end Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new diff --git a/test/time_test.rb b/test/time_test.rb index 8ba68c8e4..3308f9016 100644 --- a/test/time_test.rb +++ b/test/time_test.rb @@ -4,22 +4,22 @@ require 'pry' -describe "Date" do - it "is an instance of Date" do +describe "Dates" do + it "is an instance of Dates" do # Arrange (conditions and inputs) # Act (act on the object or method under test) - @stay = Date.new(1940/12/21) + @stay = Dates.new # Assert that the expected results have occurred) - expect(@stay).must_be_kind_of Date + expect(@stay).must_be_kind_of Dates end it "accurately calculates duration" do - check_in = Date.parse("1940/12/21") - check_out = Date.parse("1940/12/29") - duration = (check_out - check_in) - duration = duration.to_i - + # check_in = Date.parse("1940/12/21") + # check_out = Date.parse("1940/12/29") + # duration = (check_out - check_in) + # duration = duration.to_i + duration = Dates.new.reserve_time("2010/11/10", "2010/11/18") expect(duration).must_equal 8 end From 9a7b81fe41a827ac0ca22461f6931babde096e26 Mon Sep 17 00:00:00 2001 From: emaust Date: Sat, 7 Sep 2019 23:59:48 -0700 Subject: [PATCH 11/32] Creates accurate instance of cost: passed --- lib/service.rb | 5 ++--- test/service_test.rb | 12 +++++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/service.rb b/lib/service.rb index 050df5ef4..ff1921e10 100644 --- a/lib/service.rb +++ b/lib/service.rb @@ -7,7 +7,7 @@ class Service attr_reader :rooms, :price, :check_in, :check_out attr_accessor :reservation, :cost, :passenger - def initialize(check_in, check_out) + def initialize @rooms = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] @cost = cost @price = 200 @@ -16,9 +16,8 @@ def initialize(check_in, check_out) end - def room_cost(duration) - @cost = duration * price + @cost = (duration - 1) * price end end diff --git a/test/service_test.rb b/test/service_test.rb index 4e943cfb2..ac2446a3c 100644 --- a/test/service_test.rb +++ b/test/service_test.rb @@ -5,19 +5,25 @@ describe "Room functions" do it "lists the rooms within the hotel" do - reservation = Service.new(2010/12/20, 2010/12/26) + reservation = Service.new expect(reservation.rooms).must_be_kind_of Array end it "accurately returns a room number from array" do - reservation = Service.new(2010/12/20, 2010/12/26) + reservation = Service.new expect(reservation.rooms[4]).must_equal 5 end - it "creates an instance of duration" do + it "creates an accurate instance of duration" do @duration = Dates.new.reserve_time("2010/12/20", "2010/12/26") expect(@duration).must_equal 6 end + + it "creates an accurate instance of cost" do + @duration = Dates.new.reserve_time("2010/12/20", "2010/12/26") + @cost = Service.new.room_cost(@duration) + expect(@cost).must_equal 1000 + end end # describe "makes reservation" do # it "accurately calculates cost" do From 0a26738d03f5e259cfaf5eec915509c01ea04328 Mon Sep 17 00:00:00 2001 From: emaust Date: Sun, 8 Sep 2019 00:58:02 -0700 Subject: [PATCH 12/32] Creates reservation (assigns room, check_in/out, duration, price) --- lib/reservation.rb | 4 ++-- lib/service.rb | 6 ++++-- test/reservation_test.rb | 30 ++++++++++++++++++++++-------- test/service_test.rb | 22 +++------------------- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 9b41e4278..b5fb66e77 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -9,10 +9,10 @@ class Reservation def initialize(check_in, check_out) - @room = room @check_in = check_in @check_out = check_out - @price = 200 + @duration = Dates.new.reserve_time(check_in, check_out) + @cost = Service.new.room_cost(@duration) @room = rand(1..20) end diff --git a/lib/service.rb b/lib/service.rb index ff1921e10..d4f33e373 100644 --- a/lib/service.rb +++ b/lib/service.rb @@ -5,7 +5,7 @@ class Service attr_reader :rooms, :price, :check_in, :check_out - attr_accessor :reservation, :cost, :passenger + attr_accessor :reservation, :cost, :room def initialize @rooms = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] @@ -13,11 +13,13 @@ def initialize @price = 200 @check_in = check_in @check_out = check_out + @room = room end def room_cost(duration) @cost = (duration - 1) * price end + + end - diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 8a17a8bf6..80f63e735 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -7,18 +7,32 @@ describe "Reservation class" do it "returns an instance of Reservation" do - @reservation = Reservation.new(2018/12/20, 2018/12/26) + @reservation = Reservation.new("2018/12/20", "2018/12/26") expect(@reservation).must_be_kind_of Reservation end - it "creates an instance of room number between 1..20" do - @reservation = Reservation.new(2018/12/20, 2018/12/26) - expect(@reservation.room).must_be_kind_of Integer + it "creates an instance of check_in" do + @reservation = Reservation.new("2018/12/20", "2018/12/26") + expect(@reservation.check_in).must_equal "2018/12/20" end - it "creates an instance of check_in and _out" do - @reservation = Reservation.new(2018/12/20, 2018/12/26) - expect(@reservation.check_in).must_equal 2018/12/20 - expect(@reservation.check_out).must_equal 2018/12/26 + it "creates an instance of check_out" do + @reservation = Reservation.new("2018/12/20", "2018/12/26") + expect(@reservation.check_out).must_equal "2018/12/26" + end + + it "creates a reservation with correct duration" do + reservation = Reservation.new("2000/10/10","2000/10/15") + expect(reservation.duration).must_equal 5 + end + + it "creates a reservation with correct cost" do + reservation = Reservation.new("2000/10/10","2000/10/15") + expect(reservation.cost).must_equal 800 + end + + it "assignes a room number" do + reservation = Reservation.new("2000/10/10","2000/10/15") + expect(reservation.room).must_be_kind_of Integer end end \ No newline at end of file diff --git a/test/service_test.rb b/test/service_test.rb index ac2446a3c..91a881e84 100644 --- a/test/service_test.rb +++ b/test/service_test.rb @@ -24,22 +24,6 @@ @cost = Service.new.room_cost(@duration) expect(@cost).must_equal 1000 end -end -# describe "makes reservation" do -# it "accurately calculates cost" do -# expect(Service.new.room_cost(6)).must_equal 1200 -# end - -# # @reservation = Service.new -# # it "creates instance of reservation" do -# # expect(@cost).must_equal 1200 -# # end -# end - -# describe "Service class" do -# it "creates a new instance of reservation" -# # @reservation = Service.new(2018/10/10, 2018/10/20, 10, 2000) - -# Service.new(2010/10/10, 2010/10/14, ) - -# # expect(Service.price).must_equal 200 + + +end \ No newline at end of file From 25dfa881f86098b1aff5677a059cacf19626d26b Mon Sep 17 00:00:00 2001 From: emaust Date: Wed, 11 Sep 2019 21:20:10 -0700 Subject: [PATCH 13/32] Current state --- lib/reservation.rb | 5 +---- lib/service.rb | 19 +++++++++++++------ test/reservation_test.rb | 13 +++++++++++-- test/service_test.rb | 26 ++++++++++++++------------ test/time_test.rb | 5 ----- 5 files changed, 39 insertions(+), 29 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index b5fb66e77..45f9c325c 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -4,8 +4,7 @@ class Reservation - attr_reader :room, :price, :duration, :cost, :check_in, :check_out - attr_writer :reservations + attr_accessor :room, :price, :duration, :cost, :check_in, :check_out, :reservations def initialize(check_in, check_out) @@ -17,6 +16,4 @@ def initialize(check_in, check_out) end - - end diff --git a/lib/service.rb b/lib/service.rb index d4f33e373..442a45b9a 100644 --- a/lib/service.rb +++ b/lib/service.rb @@ -4,16 +4,13 @@ class Service - attr_reader :rooms, :price, :check_in, :check_out - attr_accessor :reservation, :cost, :room + attr_accessor :reservation, :cost, :reservations, :rooms, :price, :duration def initialize - @rooms = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] + @rooms = (1..20).to_a @cost = cost @price = 200 - @check_in = check_in - @check_out = check_out - @room = room + @reservations = [] end @@ -21,5 +18,15 @@ def room_cost(duration) @cost = (duration - 1) * price end + def add_reservation(reservation) + @reservations << reservation + end + + + # make new instance of reservation + # store that instance of reservation in an array + # access the information in the array by calling the instance variable at that index + + end diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 80f63e735..3dda95af6 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -6,7 +6,7 @@ describe "Reservation class" do - it "returns an instance of Reservation" do + it "initializes Reservation" do @reservation = Reservation.new("2018/12/20", "2018/12/26") expect(@reservation).must_be_kind_of Reservation end @@ -35,4 +35,13 @@ reservation = Reservation.new("2000/10/10","2000/10/15") expect(reservation.room).must_be_kind_of Integer end -end \ No newline at end of file + + + + +end +# describe "populates reservation array" do +# it "adds a reservation to reservations" do +# Service.new.make_reservation("2010/12/20", "2010/12/26") +# expect(@reservations.length).must_equal 1 +# end diff --git a/test/service_test.rb b/test/service_test.rb index 91a881e84..872f49cfe 100644 --- a/test/service_test.rb +++ b/test/service_test.rb @@ -2,21 +2,17 @@ require_relative '../lib/service' require_relative '../lib/time' -describe "Room functions" do +describe "Room system" do it "lists the rooms within the hotel" do - - reservation = Service.new - expect(reservation.rooms).must_be_kind_of Array + expect(Service.new.rooms).must_be_kind_of Array end - it "accurately returns a room number from array" do - reservation = Service.new - expect(reservation.rooms[4]).must_equal 5 + it "accurately returns a room number from room array" do + expect(Service.new.rooms[4]).must_equal 5 end - it "creates an accurate instance of duration" do - @duration = Dates.new.reserve_time("2010/12/20", "2010/12/26") - expect(@duration).must_equal 6 + it "creates reservations array" do + expect(Service.new.reservations).must_be_kind_of Array end it "creates an accurate instance of cost" do @@ -25,5 +21,11 @@ expect(@cost).must_equal 1000 end - -end \ No newline at end of file + it "pushes a reservation into array" do + reservation = Reservation.new("2000/10/10","2000/10/15") + Service.new.add_reservation(reservation) + expect(@reservations.length).must_equal 1 + end +end + +# end \ No newline at end of file diff --git a/test/time_test.rb b/test/time_test.rb index 3308f9016..ea5469568 100644 --- a/test/time_test.rb +++ b/test/time_test.rb @@ -14,11 +14,6 @@ end it "accurately calculates duration" do - - # check_in = Date.parse("1940/12/21") - # check_out = Date.parse("1940/12/29") - # duration = (check_out - check_in) - # duration = duration.to_i duration = Dates.new.reserve_time("2010/11/10", "2010/11/18") expect(duration).must_equal 8 end From aa7343ab61a389691bdef2a2df6b6fb6d9c2aa5c Mon Sep 17 00:00:00 2001 From: emaust Date: Mon, 23 Sep 2019 13:55:09 -0700 Subject: [PATCH 14/32] Room list created, HotelController test created --- lib/hotel_controller.rb | 15 +++++++++------ test/controller_test.rb | 12 ++++++++++++ test/service_test.rb | 31 ------------------------------- test/test_helper.rb | 12 ++++++------ 4 files changed, 27 insertions(+), 43 deletions(-) create mode 100644 test/controller_test.rb delete mode 100644 test/service_test.rb diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index accca6de4..ca63c39c3 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -1,20 +1,23 @@ + + module Hotel - class HotelController + class HotelController + + attr_reader :rooms # Wave 1 def rooms - # You might want to replace this method with an attr_reader - return [] + @rooms = 1..20 end - + 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) return [] end - + # Wave 2 def available_rooms(start_date, end_date) # start_date and end_date should be instances of class Date diff --git a/test/controller_test.rb b/test/controller_test.rb new file mode 100644 index 000000000..fb602665e --- /dev/null +++ b/test/controller_test.rb @@ -0,0 +1,12 @@ +require_relative '../lib/hotel_controller' +require_relative '../date_range' +require_relative 'test_helper' + + + +describe "Hotel Controller" do + it "creates a list of rooms" do + hotel = Hotel::HotelController.new + expect(hotel.rooms).must_equal 1..20 + end +end diff --git a/test/service_test.rb b/test/service_test.rb deleted file mode 100644 index 872f49cfe..000000000 --- a/test/service_test.rb +++ /dev/null @@ -1,31 +0,0 @@ -require_relative 'test_helper' -require_relative '../lib/service' -require_relative '../lib/time' - -describe "Room system" do - it "lists the rooms within the hotel" do - expect(Service.new.rooms).must_be_kind_of Array - end - - it "accurately returns a room number from room array" do - expect(Service.new.rooms[4]).must_equal 5 - end - - it "creates reservations array" do - expect(Service.new.reservations).must_be_kind_of Array - end - - it "creates an accurate instance of cost" do - @duration = Dates.new.reserve_time("2010/12/20", "2010/12/26") - @cost = Service.new.room_cost(@duration) - expect(@cost).must_equal 1000 - end - - it "pushes a reservation into array" do - reservation = Reservation.new("2000/10/10","2000/10/15") - Service.new.add_reservation(reservation) - expect(@reservations.length).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 5c8a848bd..414965447 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -4,13 +4,13 @@ require "minitest/reporters" require 'simplecov' -SimpleCov.start do - add_filter 'test/' -end +# SimpleCov.start do +# add_filter 'test/' +# end Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new -require_relative "../lib/time.rb" -require_relative "../lib/reservation.rb" -require_relative "../lib/service.rb" +require_relative '../lib/hotel_controller' +require_relative '../lib/reservation' +require_relative '../lib/date_range' From bb3a694089bbebdaace7fa2ac641dfecd831d0df Mon Sep 17 00:00:00 2001 From: emaust Date: Mon, 23 Sep 2019 14:15:08 -0700 Subject: [PATCH 15/32] Constructor for DateRange written, DateRange test file created --- lib/date_range.rb | 10 ++++++---- test/date_range_test.rb | 12 ++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 test/date_range_test.rb diff --git a/lib/date_range.rb b/lib/date_range.rb index da2197f22..ed18f3aba 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -1,18 +1,20 @@ module Hotel class DateRange attr_accessor :start_date, :end_date - + def initialize(start_date, end_date) + check_in = Date.parse(start_date) + check_out = Date.parse(end_date) end - + def overlap?(other) return false end - + def include?(date) return false end - + def nights return 3 end diff --git a/test/date_range_test.rb b/test/date_range_test.rb new file mode 100644 index 000000000..1143e4d91 --- /dev/null +++ b/test/date_range_test.rb @@ -0,0 +1,12 @@ +require_relative 'test_helper' +require_relative '../lib/date_range' +require_relative 'test_helper' + +describe "intialize DateRange" do + it "creates an instance of start_date and end date" do + hotel = Hotel::DateRange.new("2007/12/20", "2007/12/26") + expect(hotel.start_date).must_be_instance_of Date + expect(hotel.end_date).must_be_instance_of Date + end + +end \ No newline at end of file From 213f5ca0b15b6c260c444c2f88f1673c28e73cfb Mon Sep 17 00:00:00 2001 From: emaust Date: Mon, 23 Sep 2019 18:13:38 -0700 Subject: [PATCH 16/32] Updated all tests w/ copy/paste from specs folder --- test/controller_test.rb | 56 ++++++++++++++++++++++----- test/date_range_test.rb | 84 +++++++++++++++++++++++++++++++++++----- test/reservation_test.rb | 53 +++++-------------------- test/test_helper.rb | 14 +++---- 4 files changed, 137 insertions(+), 70 deletions(-) diff --git a/test/controller_test.rb b/test/controller_test.rb index fb602665e..053c24d4b 100644 --- a/test/controller_test.rb +++ b/test/controller_test.rb @@ -1,12 +1,50 @@ -require_relative '../lib/hotel_controller' -require_relative '../date_range' -require_relative 'test_helper' +require_relative "test_helper" - - -describe "Hotel Controller" do - it "creates a list of rooms" do - hotel = Hotel::HotelController.new - expect(hotel.rooms).must_equal 1..20 +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 diff --git a/test/date_range_test.rb b/test/date_range_test.rb index 1143e4d91..1887c632a 100644 --- a/test/date_range_test.rb +++ b/test/date_range_test.rb @@ -1,12 +1,78 @@ -require_relative 'test_helper' -require_relative '../lib/date_range' -require_relative 'test_helper' +require_relative "test_helper" -describe "intialize DateRange" do - it "creates an instance of start_date and end date" do - hotel = Hotel::DateRange.new("2007/12/20", "2007/12/26") - expect(hotel.start_date).must_be_instance_of Date - expect(hotel.end_date).must_be_instance_of Date +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 -end \ No newline at end of file + xdescribe "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 + + 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) + + 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 diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 3dda95af6..ec4204774 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -1,47 +1,12 @@ +require_relative "test_helper" -require_relative 'test_helper' -require_relative '../lib/time' -require_relative '../lib/service' -require_relative '../lib/reservation' - - -describe "Reservation class" do - it "initializes Reservation" do - @reservation = Reservation.new("2018/12/20", "2018/12/26") - expect(@reservation).must_be_kind_of Reservation - end - - it "creates an instance of check_in" do - @reservation = Reservation.new("2018/12/20", "2018/12/26") - expect(@reservation.check_in).must_equal "2018/12/20" - end - - it "creates an instance of check_out" do - @reservation = Reservation.new("2018/12/20", "2018/12/26") - expect(@reservation.check_out).must_equal "2018/12/26" - end - - it "creates a reservation with correct duration" do - reservation = Reservation.new("2000/10/10","2000/10/15") - expect(reservation.duration).must_equal 5 - end - - it "creates a reservation with correct cost" do - reservation = Reservation.new("2000/10/10","2000/10/15") - expect(reservation.cost).must_equal 800 - end - - it "assignes a room number" do - reservation = Reservation.new("2000/10/10","2000/10/15") - expect(reservation.room).must_be_kind_of Integer +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, nil) + expect(reservation.cost).must_be_kind_of Numeric + end end - - - - end -# describe "populates reservation array" do -# it "adds a reservation to reservations" do -# Service.new.make_reservation("2010/12/20", "2010/12/26") -# expect(@reservations.length).must_equal 1 -# end diff --git a/test/test_helper.rb b/test/test_helper.rb index 414965447..cbf8c253e 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -2,15 +2,13 @@ require "minitest" require "minitest/autorun" require "minitest/reporters" -require 'simplecov' +require "minitest/skip_dsl" -# SimpleCov.start do -# add_filter 'test/' -# end +require "date" Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new - -require_relative '../lib/hotel_controller' -require_relative '../lib/reservation' -require_relative '../lib/date_range' +# Require_relative your lib files here! +require_relative "../lib/hotel_controller.rb" +require_relative "../lib/reservation.rb" +require_relative "../lib/date_range.rb" From 2e4084a85fd68016d3f3fbaab0bc126ae8ae8b32 Mon Sep 17 00:00:00 2001 From: emaust Date: Mon, 23 Sep 2019 18:32:10 -0700 Subject: [PATCH 17/32] Implemented error raised for invalid date --- lib/date_range.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index ed18f3aba..a787cb001 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -1,10 +1,18 @@ + + + module Hotel class DateRange attr_accessor :start_date, :end_date def initialize(start_date, end_date) - check_in = Date.parse(start_date) - check_out = Date.parse(end_date) + @start_date = Date.new(start_date) + @end_date = Date.new(end_date) + + if valid_date?(start_date) == false || valid_date?(end_date) == false + raise "Invalid date range" + end + end def overlap?(other) From fa65274af9b649516859277e52c228c5cb5a7a97 Mon Sep 17 00:00:00 2001 From: emaust Date: Mon, 23 Sep 2019 18:48:48 -0700 Subject: [PATCH 18/32] Comment out error for invalid date, reserve_room method created/passes --- lib/date_range.rb | 12 +++++++----- lib/hotel_controller.rb | 12 ++++++++---- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index a787cb001..a5744b91a 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -6,12 +6,14 @@ 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 - if valid_date?(start_date) == false || valid_date?(end_date) == false - raise "Invalid date range" - end + # if @start_date == nil || @end_date == nil + # raise ArgumentError.new "Invalid date - no date entered" + # elsif @end_date >= @start_date + # raise ArgumentError.new "Invalid date - end date cannot be same day or prior to start date" + # end end diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index ca63c39c3..dac7c07ad 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -1,16 +1,20 @@ - +require_relative 'date_range' +require_relative 'reservation' module Hotel class HotelController attr_reader :rooms # Wave 1 - def rooms - @rooms = 1..20 + def initialize + @rooms = [(1..20)] end def reserve_room(start_date, end_date) - # start_date and end_date should be instances of class Date + range = Hotel::DateRange.new(start_date, end_date) + start_date = range.start_date + end_date = range.end_date + room = room return Reservation.new(start_date, end_date, nil) end From de8484462a5eff6f20e0b6f158c6ef5a8daf219f Mon Sep 17 00:00:00 2001 From: emaust Date: Tue, 24 Sep 2019 00:15:26 -0700 Subject: [PATCH 19/32] Created @night in date_range, implemented cost method in reservation.rb, updated reservation_test for cost --- lib/date_range.rb | 9 ++++----- lib/hotel_controller.rb | 5 +++-- lib/reservation.rb | 13 ++++++++++--- test/reservation_test.rb | 4 +++- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index a5744b91a..902e47ce9 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -3,12 +3,13 @@ module Hotel class DateRange - attr_accessor :start_date, :end_date + + attr_accessor :start_date, :end_date, :nights def initialize(start_date, end_date) @start_date = start_date @end_date = end_date - + @nights = end_date - start_date # if @start_date == nil || @end_date == nil # raise ArgumentError.new "Invalid date - no date entered" # elsif @end_date >= @start_date @@ -21,12 +22,10 @@ def overlap?(other) return false end + def include?(date) return false end - def nights - return 3 - end end end diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index dac7c07ad..d635ac642 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -5,6 +5,7 @@ module Hotel class HotelController attr_reader :rooms + # Wave 1 def initialize @rooms = [(1..20)] @@ -14,8 +15,8 @@ def reserve_room(start_date, end_date) range = Hotel::DateRange.new(start_date, end_date) start_date = range.start_date end_date = range.end_date - room = room - return Reservation.new(start_date, end_date, nil) + nights = range.nights + return Reservation.new(start_date, end_date, nights, nil) end def reservations(date) diff --git a/lib/reservation.rb b/lib/reservation.rb index ec13f3ef2..766cde6de 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,12 +1,19 @@ +require_relative 'date_range' + module Hotel class Reservation + + attr_reader :room # Feel free to change this method signature as needed. Make sure to update the tests! - def initialize(start_date, end_date, room) + def initialize(start_date, end_date, nights, room) + @room = room + @nights = nights end - def cost - return 3 + def cost + price = 200 + cost = price * @nights end end end diff --git a/test/reservation_test.rb b/test/reservation_test.rb index ec4204774..c6c9e0795 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -5,8 +5,10 @@ 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, nil) + nights = 3 + reservation = Hotel::Reservation.new(start_date, end_date, nights, nil) expect(reservation.cost).must_be_kind_of Numeric + expect(reservation.cost).must_equal 600 end end end From 1c4b615ffd9cd4e3713289d36b974ed740c6740d Mon Sep 17 00:00:00 2001 From: emaust Date: Tue, 24 Sep 2019 01:17:00 -0700 Subject: [PATCH 20/32] Reimplemented raise argument error, cleaned up spacing. Still ArgumentError-inception. --- lib/date_range.rb | 10 +++++----- lib/hotel_controller.rb | 5 ++++- test/controller_test.rb | 2 +- test/date_range_test.rb | 16 ++++++++++++---- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 902e47ce9..46dc972cf 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -10,12 +10,12 @@ def initialize(start_date, end_date) @start_date = start_date @end_date = end_date @nights = end_date - start_date - # if @start_date == nil || @end_date == nil - # raise ArgumentError.new "Invalid date - no date entered" - # elsif @end_date >= @start_date - # raise ArgumentError.new "Invalid date - end date cannot be same day or prior to start date" - # end + if start_date == nil || end_date == nil + raise ArgumentError.new + elsif end_date <= start_date + raise ArgumentError.new + end end def overlap?(other) diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index d635ac642..6cccaae5d 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -11,12 +11,15 @@ def initialize @rooms = [(1..20)] end - def reserve_room(start_date, end_date) + def reserve_room(start_date, end_date) + range = Hotel::DateRange.new(start_date, end_date) start_date = range.start_date end_date = range.end_date nights = range.nights + return Reservation.new(start_date, end_date, nights, nil) + end def reservations(date) diff --git a/test/controller_test.rb b/test/controller_test.rb index 053c24d4b..7f92bea6f 100644 --- a/test/controller_test.rb +++ b/test/controller_test.rb @@ -35,7 +35,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/date_range_test.rb b/test/date_range_test.rb index 1887c632a..fa9b9a7a8 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 it "Can be initialized with two dates" do start_date = Date.new(2017, 01, 01) end_date = start_date + 3 @@ -12,10 +12,18 @@ 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-length ranges" do + start_date = Date.new(2010, 12, 20) + end_date = Date.new(2010, 12, 19) + + 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.new(2010, 12, 20) + end_date = Date.new(2010, 12, 20) + + expect(Hotel::DateRange.new(start_date, end_date)).must_raise ArgumentError end end @@ -61,7 +69,7 @@ end xdescribe "include?" do - it "reutrns false if the date is clearly out" do + it "returns false if the date is clearly out" do end it "returns true for dates in the range" do From fc1657e7c29f9a43a0a414d46dd5b593320f8f87 Mon Sep 17 00:00:00 2001 From: emaust Date: Tue, 24 Sep 2019 01:48:17 -0700 Subject: [PATCH 21/32] Changed nights from instance to local variable in cost method, added attr_reader for nights --- lib/reservation.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 766cde6de..846e40b5c 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -4,7 +4,7 @@ module Hotel class Reservation - attr_reader :room + attr_reader :room, :nights # Feel free to change this method signature as needed. Make sure to update the tests! def initialize(start_date, end_date, nights, room) @room = room @@ -13,7 +13,7 @@ def initialize(start_date, end_date, nights, room) def cost price = 200 - cost = price * @nights + cost = price * nights end end end From d866cee9c061b33460a835cd0366f01ea378b1c5 Mon Sep 17 00:00:00 2001 From: emaust Date: Tue, 24 Sep 2019 02:18:37 -0700 Subject: [PATCH 22/32] Created reservation_list instance variable, implemented reservations method --- lib/hotel_controller.rb | 14 ++++++++++++-- lib/service.rb | 32 -------------------------------- lib/time.rb | 21 --------------------- test/time_test.rb | 21 --------------------- 4 files changed, 12 insertions(+), 76 deletions(-) delete mode 100644 lib/service.rb delete mode 100644 lib/time.rb delete mode 100644 test/time_test.rb diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index 6cccaae5d..efa4c147e 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -5,10 +5,13 @@ module Hotel class HotelController attr_reader :rooms + # does this need to be accessor? idk, look it up + attr_accessor :reservation_list # Wave 1 def initialize @rooms = [(1..20)] + @reservation_list = [] end def reserve_room(start_date, end_date) @@ -18,12 +21,19 @@ def reserve_room(start_date, end_date) end_date = range.end_date nights = range.nights - return Reservation.new(start_date, end_date, nights, nil) + reservation = Reservation.new(start_date, end_date, nights, nil) + return reservation + @reservation_list << reservation end + # possible trickery, reassess when more reservations are generated? def reservations(date) - return [] + reservation_list.each do |index, date| + if reservation_list[index].include?(date) + print reservation_list[index] + end + end end # Wave 2 diff --git a/lib/service.rb b/lib/service.rb deleted file mode 100644 index 442a45b9a..000000000 --- a/lib/service.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'date' -require_relative '../lib/reservation' -require_relative '../lib/time' - -class Service - - attr_accessor :reservation, :cost, :reservations, :rooms, :price, :duration - - def initialize - @rooms = (1..20).to_a - @cost = cost - @price = 200 - @reservations = [] - end - - - def room_cost(duration) - @cost = (duration - 1) * price - end - - def add_reservation(reservation) - @reservations << reservation - end - - - # make new instance of reservation - # store that instance of reservation in an array - # access the information in the array by calling the instance variable at that index - - - -end diff --git a/lib/time.rb b/lib/time.rb deleted file mode 100644 index 08647ecb4..000000000 --- a/lib/time.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'date' -require_relative '../lib/reservation' -require_relative '../lib/service' - -class Dates - attr_reader :check_in, :check_out, :duration - - def initialize - @check_in = check_in - @check_out = check_out - @duration = duration - end - - def reserve_time(date1, date2) - check_in = Date.parse(date1) - check_out = Date.parse(date2) - duration = check_out - check_in - @duration = duration.to_i - end - -end \ No newline at end of file diff --git a/test/time_test.rb b/test/time_test.rb deleted file mode 100644 index ea5469568..000000000 --- a/test/time_test.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'date' -require_relative 'test_helper' -require_relative '../lib/time' - -require 'pry' - -describe "Dates" do - it "is an instance of Dates" do - # Arrange (conditions and inputs) - # Act (act on the object or method under test) - @stay = Dates.new - # Assert that the expected results have occurred) - expect(@stay).must_be_kind_of Dates - end - - it "accurately calculates duration" do - duration = Dates.new.reserve_time("2010/11/10", "2010/11/18") - expect(duration).must_equal 8 - end - -end From 2c14392bd0cc9be66ab4fb689871b8e25133fe7f Mon Sep 17 00:00:00 2001 From: emaust Date: Tue, 24 Sep 2019 11:31:00 -0700 Subject: [PATCH 23/32] Fixed bracket/parens for error tests, now passing --- test/date_range_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/date_range_test.rb b/test/date_range_test.rb index fa9b9a7a8..53b8a3474 100644 --- a/test/date_range_test.rb +++ b/test/date_range_test.rb @@ -16,14 +16,14 @@ start_date = Date.new(2010, 12, 20) end_date = Date.new(2010, 12, 19) - expect(Hotel::DateRange.new(start_date, end_date)).must_raise ArgumentError + 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.new(2010, 12, 20) end_date = Date.new(2010, 12, 20) - expect(Hotel::DateRange.new(start_date, end_date)).must_raise ArgumentError + expect{Hotel::DateRange.new(start_date, end_date)}.must_raise ArgumentError end end From 75f2ad6f03f4fea10f17baece9261b73bcd22093 Mon Sep 17 00:00:00 2001 From: emaust Date: Tue, 24 Sep 2019 12:45:25 -0700 Subject: [PATCH 24/32] Removed incorrect/unnecessary attr_writer/instance variable for nights from date_range --- lib/date_range.rb | 10 +++++++--- lib/hotel_controller.rb | 15 +++++++++------ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 46dc972cf..700f320c1 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -1,15 +1,15 @@ - +require 'pry' module Hotel class DateRange - attr_accessor :start_date, :end_date, :nights + attr_accessor :start_date, :end_date def initialize(start_date, end_date) @start_date = start_date @end_date = end_date - @nights = end_date - start_date + # @nights = nights if start_date == nil || end_date == nil raise ArgumentError.new @@ -18,6 +18,10 @@ def initialize(start_date, end_date) end end + def nights + nights = (end_date - start_date) - 1 + end + def overlap?(other) return false end diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index efa4c147e..13c3bbdd0 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -1,30 +1,33 @@ require_relative 'date_range' require_relative 'reservation' +require 'pry' module Hotel class HotelController - attr_reader :rooms # does this need to be accessor? idk, look it up - attr_accessor :reservation_list + attr_reader :nights + attr_accessor :reservation_list, :rooms # Wave 1 def initialize - @rooms = [(1..20)] + @rooms = (1..20).to_a @reservation_list = [] end + # need to actually specify a room here def reserve_room(start_date, end_date) + room = rooms.shift range = Hotel::DateRange.new(start_date, end_date) start_date = range.start_date end_date = range.end_date nights = range.nights - reservation = Reservation.new(start_date, end_date, nights, nil) - return reservation - @reservation_list << reservation + reservation = Reservation.new(start_date, end_date, nights, room) + @reservation_list << reservation + return reservation end # possible trickery, reassess when more reservations are generated? From 1b15dd21ffe6316aad0ba94351afb7570fe24b2e Mon Sep 17 00:00:00 2001 From: emaust Date: Tue, 24 Sep 2019 14:03:51 -0700 Subject: [PATCH 25/32] Made method that assigns room number based on reservations within reservation_list (room assignment now meaningful) --- lib/hotel_controller.rb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index 13c3bbdd0..8539bdd9f 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -15,15 +15,22 @@ def initialize @reservation_list = [] end - # need to actually specify a room here + # may be complete nonsense, need to test with more than one occurence, but will return first index for empty list def reserve_room(start_date, end_date) + current_room = () + if reservation_list.include?(start_date) == false + current_room = rooms.shift + elsif reservation_list.include?(start_date) + count = reservation_list.count(start_date) + current_room = rooms[count - 1] + end - room = rooms.shift + room = current_room range = Hotel::DateRange.new(start_date, end_date) start_date = range.start_date end_date = range.end_date nights = range.nights - + binding.pry reservation = Reservation.new(start_date, end_date, nights, room) @reservation_list << reservation From 16220eae878c0b4f53d22b43857bb56b979148cc Mon Sep 17 00:00:00 2001 From: emaust Date: Tue, 24 Sep 2019 16:39:22 -0700 Subject: [PATCH 26/32] Removed unnecessary nights attr_accessor from hotel_controller, added available rooms method --- lib/hotel_controller.rb | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index 8539bdd9f..f6d6f594f 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -6,17 +6,19 @@ module Hotel class HotelController # does this need to be accessor? idk, look it up - attr_reader :nights - attr_accessor :reservation_list, :rooms + + attr_accessor :reservation_list, :rooms, :reservation # Wave 1 def initialize @rooms = (1..20).to_a @reservation_list = [] + @reservations = reservation end # may be complete nonsense, need to test with more than one occurence, but will return first index for empty list def reserve_room(start_date, end_date) + current_room = () if reservation_list.include?(start_date) == false current_room = rooms.shift @@ -30,7 +32,7 @@ def reserve_room(start_date, end_date) start_date = range.start_date end_date = range.end_date nights = range.nights - binding.pry + reservation = Reservation.new(start_date, end_date, nights, room) @reservation_list << reservation @@ -48,8 +50,26 @@ def reservations(date) # Wave 2 def available_rooms(start_date, end_date) - # start_date and end_date should be instances of class Date - return [] - end + range = Hotel::DateRange.new(start_date, end_date) + start_date = range.start_date + end_date = range.end_date + nights = range.nights.to_i + + nights.times do + @reservation_list.each do + @reservation.include?(start_date) + rooms.delete(@reservation.room) + end + end + return rooms + end end end +# if the reservation list includes that date +# check for room numbers for that date +# delete that room number from a generic list of rooms +# iterate to next date (nights) + + +# start_date and end_date should be instances of class Date + From 351c237c84ff1b332f036d5005a8edf63b5ade09 Mon Sep 17 00:00:00 2001 From: emaust Date: Wed, 25 Sep 2019 13:16:54 -0700 Subject: [PATCH 27/32] Updated hotel_controller to iterate properly --- lib/hotel_controller.rb | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index f6d6f594f..c58b3b863 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -13,17 +13,18 @@ class HotelController def initialize @rooms = (1..20).to_a @reservation_list = [] - @reservations = reservation + @reservation = reservation end # may be complete nonsense, need to test with more than one occurence, but will return first index for empty list def reserve_room(start_date, end_date) current_room = () - if reservation_list.include?(start_date) == false + if @reservation_list.empty? == true current_room = rooms.shift - elsif reservation_list.include?(start_date) - count = reservation_list.count(start_date) + elsif @reservation_list.empty? == false + @reservation_list.include?(start_date) + count = @reservation_list.count(start_date) current_room = rooms[count - 1] end @@ -54,12 +55,13 @@ def available_rooms(start_date, end_date) start_date = range.start_date end_date = range.end_date nights = range.nights.to_i - - nights.times do + check = 1 + until check == nights do @reservation_list.each do @reservation.include?(start_date) rooms.delete(@reservation.room) end + check += 1 end return rooms end From b6165afbd59f5b05d45042e0cd9507861157c70c Mon Sep 17 00:00:00 2001 From: emaust Date: Wed, 25 Sep 2019 13:22:19 -0700 Subject: [PATCH 28/32] Corrected available_rooms iteration (again) and fixed room assignment in reserve_room method --- lib/hotel_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index c58b3b863..39bbe3a42 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -56,11 +56,13 @@ def available_rooms(start_date, end_date) end_date = range.end_date nights = range.nights.to_i check = 1 + until check == nights do @reservation_list.each do @reservation.include?(start_date) rooms.delete(@reservation.room) end + start_date + 1 check += 1 end return rooms From 5e6efb662e475c18141d37befef040a5f3cd5622 Mon Sep 17 00:00:00 2001 From: emaust Date: Thu, 26 Sep 2019 17:19:02 -0700 Subject: [PATCH 29/32] Created overlap method and finished writing corresponding tests - all pass --- lib/date_range.rb | 18 +++++++++--- lib/hotel_controller.rb | 18 ++++++++---- test/controller_test.rb | 2 +- test/date_range_test.rb | 62 +++++++++++++++++++++++++++++++++-------- 4 files changed, 78 insertions(+), 22 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 700f320c1..f716f08d8 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -9,7 +9,7 @@ class DateRange def initialize(start_date, end_date) @start_date = start_date @end_date = end_date - # @nights = nights + if start_date == nil || end_date == nil raise ArgumentError.new @@ -20,13 +20,23 @@ def initialize(start_date, end_date) def nights nights = (end_date - start_date) - 1 + nights = nights.to_i end - def overlap?(other) - return false - end + def overlap?(reservation) + if reservation.end_date > @start_date && reservation.end_date < @end_date + return true + elsif reservation.start_date < @start_date && reservation.end_date > @end_date + return true + elsif reservation.start_date == @start_date + return true + else + return false + end + end + def include?(date) return false end diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index 39bbe3a42..0ee529d9c 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -54,20 +54,26 @@ def available_rooms(start_date, end_date) range = Hotel::DateRange.new(start_date, end_date) start_date = range.start_date end_date = range.end_date - nights = range.nights.to_i + nights = range.nights check = 1 until check == nights do - @reservation_list.each do - @reservation.include?(start_date) - rooms.delete(@reservation.room) + if @reservation_list.empty? == false + @reservation_list.each do + @reservation.include?(start_date) + rooms.delete(@reservation.room) + end + elsif @reservation_list.empty? + break end start_date + 1 check += 1 end return rooms - end - end + end + + end + end # if the reservation list includes that date # check for room numbers for that date diff --git a/test/controller_test.rb b/test/controller_test.rb index 7f92bea6f..053c24d4b 100644 --- a/test/controller_test.rb +++ b/test/controller_test.rb @@ -35,7 +35,7 @@ end end - xdescribe "wave 2" do + describe "wave 2" do describe "available_rooms" do it "takes two dates and returns a list" do start_date = @date diff --git a/test/date_range_test.rb b/test/date_range_test.rb index 53b8a3474..190cc3c57 100644 --- a/test/date_range_test.rb +++ b/test/date_range_test.rb @@ -27,15 +27,15 @@ end end - xdescribe "overlap?" do + describe "overlap?" do before do - start_date = Date.new(2017, 01, 01) + start_date = Date.new(2017, 01, 10) end_date = start_date + 3 @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) @@ -43,28 +43,68 @@ 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 = @range.start_date + 1 + end_date = @range.end_date - 1 + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_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(2017, 01, 8) + end_date = @range.end_date - 2 + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_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 = Date.new(2017, 01, 8) + end_date = @range.end_date - 2 + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_range)).must_equal true end - xit "returns true for a containing range" do + it "returns true for a containing range" do + start_date = Date.new(2017, 01, 9) + end_date = @range.end_date + 2 + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_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 = Date.new(2017, 01, 11) + end_date = @range.end_date + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_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(2017, 01, 05) + end_date = @range.start_date + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_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, 01, 01) + end_date = @range.start_date + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_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(2016, 06, 05) + end_date = @range.start_date + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_range)).must_equal false end end From 11b10266f7bb538de77adc27bb5fc8ba735845ae Mon Sep 17 00:00:00 2001 From: emaust Date: Sun, 29 Sep 2019 13:44:25 -0700 Subject: [PATCH 30/32] Design activity Part 1 --- design-activity.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 design-activity.md diff --git a/design-activity.md b/design-activity.md new file mode 100644 index 000000000..a55a442d1 --- /dev/null +++ b/design-activity.md @@ -0,0 +1,15 @@ +Evaluation Responsibility: + +1. A includes the classes CartEntry, ShoppingCart, and Order. B has the same classes. + +2. CartEntry is a class that initializes unit_price and quantity. Shopping cart initializes an array of entries, and Order creates a new instance of ShoppingCart and stores it in the instance variable cart. +In implementation A, CartEntry unit_price and quantity are shared with Order to return total price. Shopping cart shares entries with Order, which is used in the method total_price. Order creates a new instance of shopping cart. In implementation B, Order relies on the information stored in CartEntry and ShoppingCart to make a new instance of cart. In Implementation B, the methods for that class are created within the class then accessed by creating an instance of that class. + +3. In Implementation A, CartEntry has no methods, Shopping cart has no methods, and Order has a total price method using the instance variables from CartEntry, and the instance of cart from Order. In Implementation B, CartEntry has a method of price, calculated by multiplying the instances of unit and quantity. Shopping cart has a separate method for price, which adds the price of each entry and creates a total sum for entries. Order has the method total_price which returns the price for an instance of cart, then returns a total price including sales tax. The second implementation uses instances of another class rather than instance variables stored within that class. + +4. For Implementation A, the price is computed in Order. Total_price is directly manipulating instance variable of other classes. In Implementation B, each lower level class creates its own instance of price. + +5. For items bought in bulk, I think Implementation B would be easier to modify, because price could be altered in the lower level classes fairly easily rather than having to change the entire method in Implementation A's Order class. + +6. The implementation that better adheres to the single responsibility principle (and is more loosely coupled) is Implementation B. + From 692b6c2a4b1113f4f98b9c99a22e01b544c5205a Mon Sep 17 00:00:00 2001 From: emaust Date: Sun, 29 Sep 2019 14:30:59 -0700 Subject: [PATCH 31/32] Design activity Part 2 --- design-activity.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/design-activity.md b/design-activity.md index a55a442d1..197aaf3b7 100644 --- a/design-activity.md +++ b/design-activity.md @@ -13,3 +13,7 @@ In implementation A, CartEntry unit_price and quantity are shared with Order to 6. The implementation that better adheres to the single responsibility principle (and is more loosely coupled) is Implementation B. + +Revisiting Hotel: + +In Hotel Controller, the available rooms method is creating a new instance of the class DateRange instead of taking instances of DateRange. I may be able to simply remove that portion of the code, since it looks like it may be redundant in relation to the rest of the code in that method. If not, the method should be written to be taking instance variables in the until loop rather than local variables. After looking at the code, I think that it's a flaw in the original intention of the design, rather than an area that needs to be refactored. \ No newline at end of file From abbbacfe5c6e86f313c01c4b54b569c037e9d957 Mon Sep 17 00:00:00 2001 From: emaust Date: Sun, 29 Sep 2019 14:53:31 -0700 Subject: [PATCH 32/32] Refactored available rooms method --- lib/date_range.rb | 15 ++++++++------- lib/hotel_controller.rb | 23 ++++++++++++++++------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index f716f08d8..bc4f7f46e 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -25,21 +25,22 @@ def nights - def overlap?(reservation) - if reservation.end_date > @start_date && reservation.end_date < @end_date + def overlap?(range) + if range.end_date > @start_date && range.end_date < @end_date return true - elsif reservation.start_date < @start_date && reservation.end_date > @end_date + elsif range.start_date < @start_date && range.end_date > @end_date return true - elsif reservation.start_date == @start_date + elsif range.start_date == @start_date return true else return false end + end - def include?(date) - return false - end + # def include?(date) + # return false + # end end end diff --git a/lib/hotel_controller.rb b/lib/hotel_controller.rb index 0ee529d9c..ff8ba38eb 100644 --- a/lib/hotel_controller.rb +++ b/lib/hotel_controller.rb @@ -28,14 +28,22 @@ def reserve_room(start_date, end_date) current_room = rooms[count - 1] end + room = current_room range = Hotel::DateRange.new(start_date, end_date) start_date = range.start_date end_date = range.end_date nights = range.nights + # if the range has overlapping dates, then it will return true + # if the range returns true + reservation = Reservation.new(start_date, end_date, nights, room) + # if @reservations_list.overlap?(range) + # raise ArgumentError.new + # end + @reservation_list << reservation return reservation end @@ -51,22 +59,23 @@ def reservations(date) # Wave 2 def available_rooms(start_date, end_date) - range = Hotel::DateRange.new(start_date, end_date) - start_date = range.start_date - end_date = range.end_date - nights = range.nights + # range = Hotel::DateRange.new(start_date, end_date) + # start_date = range.start_date + # end_date = range.end_date + # nights = range.nights + length = end_date - start_date check = 1 - until check == nights do + until check == length do if @reservation_list.empty? == false @reservation_list.each do - @reservation.include?(start_date) + @reservation.include?(@start_date) rooms.delete(@reservation.room) end elsif @reservation_list.empty? break end - start_date + 1 + @start_date + 1 check += 1 end return rooms