From 96eb3b1fd0fd64a6e127ea92921a73916f8edc7f Mon Sep 17 00:00:00 2001 From: Jazz Date: Wed, 5 Sep 2018 19:32:25 -0700 Subject: [PATCH 01/10] Wave 1 in progress --- Guardfile | 4 +-- lib/front_desk.rb | 45 ++++++++++++++++++++++++++++++++++ lib/reservations.rb | 22 +++++++++++++++++ lib/rooms.rb | 9 +++++++ spec/front_desk_spec.rb | 52 +++++++++++++++++++++++++++++++++++++++ spec/reservation_spec.rb | 53 ++++++++++++++++++++++++++++++++++++++++ spec/rooms_spec.rb | 27 ++++++++++++++++++++ spec/spec_helper.rb | 8 ++++-- 8 files changed, 216 insertions(+), 4 deletions(-) create mode 100644 lib/front_desk.rb create mode 100644 lib/reservations.rb create mode 100644 lib/rooms.rb create mode 100644 spec/front_desk_spec.rb create mode 100644 spec/reservation_spec.rb create mode 100644 spec/rooms_spec.rb diff --git a/Guardfile b/Guardfile index 6760f9177..e0b8bea5b 100644 --- a/Guardfile +++ b/Guardfile @@ -1,5 +1,5 @@ -guard :minitest, bundler: false, rubygems: false do - # with Minitest::Spec +guard :minitest, bundler: false, autorun: true, rubygems: false do + # With Minitest Reporters watch(%r{^spec/(.*)_spec\.rb$}) watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } watch(%r{^spec/spec_helper\.rb$}) { 'spec' } diff --git a/lib/front_desk.rb b/lib/front_desk.rb new file mode 100644 index 000000000..1738cb67a --- /dev/null +++ b/lib/front_desk.rb @@ -0,0 +1,45 @@ +require_relative "rooms.rb" +require_relative "reservations.rb" + + +class Front_Desk + + attr_reader :reservations, :rooms + + def initialize + @reservations = [] + @rooms = load_rooms + end + + def load_rooms + room_number = 0 + rooms = [] + + 20.times do + room_number += 1 + rooms << Room.new({ + :room_number => room_number + }) + end + return rooms + end + + def reserve_room(room_number,start_date, end_date) + + input = {} + input[:room_number] = room_number + input[:start_date] = start_date + input[:end_date] = end_date + + new_reservation = Reservation.new(input) + @reservations << new_reservation + + return new_reservation + end + +#method to grab reservation by Date + + + + +end diff --git a/lib/reservations.rb b/lib/reservations.rb new file mode 100644 index 000000000..7ddd9d5c1 --- /dev/null +++ b/lib/reservations.rb @@ -0,0 +1,22 @@ +require "date" +require "pry" + +class Reservation + + attr_reader :room_number, :start_date, :end_date + + def initialize(input) + # @reservation_id = generate_reservation_id(input[:reservation_id]) + @room_number = input[:room_number] + @start_date = Date.parse(input[:start_date]) + @end_date = Date.parse(input[:end_date]) + @@cost = total_cost + end + + def total_cost + nights = (end_date - start_date).to_i + cost = (nights * 200) + return cost + end + +end diff --git a/lib/rooms.rb b/lib/rooms.rb new file mode 100644 index 000000000..e3badcaac --- /dev/null +++ b/lib/rooms.rb @@ -0,0 +1,9 @@ +class Room + + attr_reader :room_number + + def initialize(input) + @room_number = input[:room_number] + end + +end diff --git a/spec/front_desk_spec.rb b/spec/front_desk_spec.rb new file mode 100644 index 000000000..452de7837 --- /dev/null +++ b/spec/front_desk_spec.rb @@ -0,0 +1,52 @@ +require_relative 'spec_helper' + +describe "Front Desk Class" do + describe "Initializer" do + + + it "loads 20 rooms" do + admin = Front_Desk.new + rooms = admin.load_rooms + expect(rooms).must_be_kind_of Array + expect(rooms.length).must_equal 20 + end + + it "returns an array that has instances of room" do + admin = Front_Desk.new + rooms = admin.load_rooms + rooms.each do |room| + expect(room).must_be_kind_of Room + end + + end + + before do + @admin = Front_Desk.new + @new_reservation = @admin.reserve_room(5,('2018-02-03'),('2018-02-06')) + end + + it "has a room number assisnged to the reservation" do + expect(@new_reservation.room_number).must_equal 5 + end + + it "totals the cost based on each night stay" do + expect(@new_reservation.total_cost).must_equal 600 + end + + it "return a instance of reservation" do + expect(@new_reservation).must_be_kind_of Reservation + end + + it "adds a new reservation to the reservations array" do + expect(@admin.reservations).must_include(@new_reservation) + end + + + + +#reserve_room creates an instance of reservation +#reservation is an array +#at index 0 cost + + end +end diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb new file mode 100644 index 000000000..730d9fcf2 --- /dev/null +++ b/spec/reservation_spec.rb @@ -0,0 +1,53 @@ +require_relative 'spec_helper' + +describe "Reservation Class" do + describe "Initializer in Reservation" do + before do + @reservation_info = { + room_number: 1, + start_date: ('2018-02-03'), + end_date: ('2018-02-05'), + } + + @reservation = Reservation.new(@reservation_info) + + end + + it "is an instance of Reservation Class" do + expect(@reservation).must_be_kind_of Reservation + end + + it "has a room number assisnged to the reservation" do + expect(@reservation.room_number).must_equal 1 + end + + it "totals the cost based on each night stay" do + expect(@reservation.total_cost).must_equal 400 + end + + + + +#given, when, then + + end +end + + + + + + + + + # describe "total calculated" do + # + # before do + # start_date = Date.parse("2018-05-25") + # end_date = Date.parse("2018-05-25") + # end + # + # it "will correctly calculate total revenue" do + # + # expect(@driver.total_revenue).must_equal ((101.65-1.65)*2)*0.8 + # end diff --git a/spec/rooms_spec.rb b/spec/rooms_spec.rb new file mode 100644 index 000000000..5b31ace3b --- /dev/null +++ b/spec/rooms_spec.rb @@ -0,0 +1,27 @@ +# require_relative 'spec_helper' +# +# +# describe "Rooms class" do +# describe "Initializer in Rooms" do +# +# it "is an instance of Room Class and Number" do +# test_room = Room.new(12) +# +# expect(test_room).must_be_kind_of Room +# expect(test_room.room).must_equal 12 +# end +# +# it "list all the rooms in the hotel" do +# test_all_rooms = Room.create_rooms +# expect(test_all_rooms.length).must_equal 20 +# end +# +# it "list summary of rooms" do +# test_summary_of_rooms = Room.all +# expect(test_summary_of_rooms.length).must_equal 20 +# expect(test_summary_of_rooms).must_be_kind_of Array +# end +# +# +# end +# end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 4d1e3fdc8..7bc775b51 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,8 +1,12 @@ -require 'minitest' +require 'simplecov' +SimpleCov.start require 'minitest/autorun' require 'minitest/reporters' -# Add simplecov + Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # Require_relative your lib files here! +require_relative '../lib/rooms' +require_relative '../lib/reservations' +require_relative '../lib/front_desk' From c4518287034996de09982219e4400f51ed52f085 Mon Sep 17 00:00:00 2001 From: Jazz Date: Fri, 7 Sep 2018 13:21:57 -0700 Subject: [PATCH 02/10] Wave 1 Complete --- lib/front_desk.rb | 10 +++++++--- lib/reservations.rb | 2 +- spec/front_desk_spec.rb | 10 ++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 1738cb67a..02413bcf1 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -37,9 +37,13 @@ def reserve_room(room_number,start_date, end_date) return new_reservation end -#method to grab reservation by Date - - + #method to grab reservation by Date + def search_reserved_by_date(search_date) + search_date = Date.parse(search_date) + @reservations.select do |reservation| + reservation.start_date <= search_date && search_date <= reservation.end_date + end + end end diff --git a/lib/reservations.rb b/lib/reservations.rb index 7ddd9d5c1..6c055d491 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -6,7 +6,6 @@ class Reservation attr_reader :room_number, :start_date, :end_date def initialize(input) - # @reservation_id = generate_reservation_id(input[:reservation_id]) @room_number = input[:room_number] @start_date = Date.parse(input[:start_date]) @end_date = Date.parse(input[:end_date]) @@ -19,4 +18,5 @@ def total_cost return cost end + end diff --git a/spec/front_desk_spec.rb b/spec/front_desk_spec.rb index 452de7837..24dca17f5 100644 --- a/spec/front_desk_spec.rb +++ b/spec/front_desk_spec.rb @@ -41,6 +41,16 @@ expect(@admin.reservations).must_include(@new_reservation) end + it "returns reservations all reservation within that date" do + expect(@admin.search_reserved_by_date('2018-02-05').length).must_equal 1 + end + + it "returns reservations all reservation within that date" do + expect(@admin.search_reserved_by_date('2018-02-15').length).must_equal 0 + end + + + From 0440fe7926621a700a2307f9a36d0d086d00d9c8 Mon Sep 17 00:00:00 2001 From: Jazz Date: Fri, 7 Sep 2018 20:19:11 -0700 Subject: [PATCH 03/10] Wave 2 Test in progress --- lib/front_desk.rb | 27 ++++++++++++++++++++++++++- spec/front_desk_spec.rb | 23 +++++++++++++++-------- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 02413bcf1..2bec18cc7 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -26,6 +26,14 @@ def load_rooms def reserve_room(room_number,start_date, end_date) + available_rooms = available_rooms(start_date,end_date) + # if room_number == 6 + # binding.pry + # end + if !available_rooms.find { |room| room.room_number == room_number } + raise StandardError + end + input = {} input[:room_number] = room_number input[:start_date] = start_date @@ -41,9 +49,26 @@ def reserve_room(room_number,start_date, end_date) def search_reserved_by_date(search_date) search_date = Date.parse(search_date) @reservations.select do |reservation| - reservation.start_date <= search_date && search_date <= reservation.end_date + reservation.start_date <= search_date && search_date < reservation.end_date end end + def available_rooms(start_date,end_date) + start_date = Date.parse(start_date) + end_date = Date.parse(end_date) + list_of_rooms = @rooms.dup + + @reservations.each do |reservation| + # if !(reservation.start_date < start_date) && !(reservation.end_date <= start_date) || + # !(reservation.start_date < end_date) && !(reservation.end_date < end_date) + + if !((start_date < reservation.start_date && end_date <= reservation.start_date) || + # binding.pry + (end_date > reservation.end_date && start_date >= reservation.end_date)) + list_of_rooms.reject! { |room| room.room_number == reservation.room_number } + end + end + return list_of_rooms + end end diff --git a/spec/front_desk_spec.rb b/spec/front_desk_spec.rb index 24dca17f5..e1f54ec2f 100644 --- a/spec/front_desk_spec.rb +++ b/spec/front_desk_spec.rb @@ -17,9 +17,9 @@ rooms.each do |room| expect(room).must_be_kind_of Room end - end + before do @admin = Front_Desk.new @new_reservation = @admin.reserve_room(5,('2018-02-03'),('2018-02-06')) @@ -41,22 +41,29 @@ expect(@admin.reservations).must_include(@new_reservation) end - it "returns reservations all reservation within that date" do + it "returns all reservation within that date" do expect(@admin.search_reserved_by_date('2018-02-05').length).must_equal 1 end it "returns reservations all reservation within that date" do - expect(@admin.search_reserved_by_date('2018-02-15').length).must_equal 0 + expect(@admin.search_reserved_by_date('2018-02-06').length).must_equal 0 end + it "room is not-available" do + @admin.reserve_room(6,('2018-02-05'),('2018-02-10')) + expect {@admin.reserve_room(6,('2018-02-05'),('2018-02-10'))}.must_raise StandardError + end + it "allows a reservation to start on the same day another reservation ends" do + expect(@admin.reserve_room(5,('2018-02-06'),('2018-02-10'))).must_be_kind_of Reservation + end + it "allows a reservation to end on the same day another reservation starts" do + expect(@admin.reserve_room(5,('2018-02-01'),('2018-02-03'))).must_be_kind_of Reservation + end - - + end +end #reserve_room creates an instance of reservation #reservation is an array #at index 0 cost - - end -end From 4a88b12fe4e7046e0ac09d7176ce76d21be362ca Mon Sep 17 00:00:00 2001 From: Jazz Date: Fri, 7 Sep 2018 21:11:38 -0700 Subject: [PATCH 04/10] Wave 2 complete --- lib/front_desk.rb | 4 +--- spec/front_desk_spec.rb | 5 +++++ spec/reservation_spec.rb | 1 + spec/rooms_spec.rb | 4 ++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 2bec18cc7..289f9881e 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -27,9 +27,6 @@ def load_rooms def reserve_room(room_number,start_date, end_date) available_rooms = available_rooms(start_date,end_date) - # if room_number == 6 - # binding.pry - # end if !available_rooms.find { |room| room.room_number == room_number } raise StandardError end @@ -56,6 +53,7 @@ def search_reserved_by_date(search_date) def available_rooms(start_date,end_date) start_date = Date.parse(start_date) end_date = Date.parse(end_date) + list_of_rooms = @rooms.dup @reservations.each do |reservation| diff --git a/spec/front_desk_spec.rb b/spec/front_desk_spec.rb index e1f54ec2f..d7f2422b2 100644 --- a/spec/front_desk_spec.rb +++ b/spec/front_desk_spec.rb @@ -62,6 +62,11 @@ expect(@admin.reserve_room(5,('2018-02-01'),('2018-02-03'))).must_be_kind_of Reservation end + # it "raises an error if start date after the end date" do + # room = @admin.reserve_room(6,('2018-02-05'),('2018-02-03')) + # expect{room}.must_raise StandardError + # end + end end #reserve_room creates an instance of reservation diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index 730d9fcf2..3e0ff4968 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -19,6 +19,7 @@ it "has a room number assisnged to the reservation" do expect(@reservation.room_number).must_equal 1 + end it "totals the cost based on each night stay" do diff --git a/spec/rooms_spec.rb b/spec/rooms_spec.rb index 5b31ace3b..22feeca4d 100644 --- a/spec/rooms_spec.rb +++ b/spec/rooms_spec.rb @@ -1,5 +1,5 @@ -# require_relative 'spec_helper' -# +require_relative 'spec_helper' + # # describe "Rooms class" do # describe "Initializer in Rooms" do From 8f06c10a21bb797f89a5845ba6f74075cf409214 Mon Sep 17 00:00:00 2001 From: Jazz Date: Sat, 8 Sep 2018 16:31:32 -0700 Subject: [PATCH 05/10] Test in progess Wave 3 --- lib/front_desk.rb | 35 +++++++++++++++++++++++++++++++++-- lib/reservations.rb | 2 +- spec/front_desk_spec.rb | 9 +++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 289f9881e..f1ae958ce 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -4,10 +4,11 @@ class Front_Desk - attr_reader :reservations, :rooms + attr_reader :reservations, :rooms, :block_hold def initialize @reservations = [] + @block_hold = [] @rooms = load_rooms end @@ -27,6 +28,7 @@ def load_rooms def reserve_room(room_number,start_date, end_date) available_rooms = available_rooms(start_date,end_date) + if !available_rooms.find { |room| room.room_number == room_number } raise StandardError end @@ -61,12 +63,41 @@ def available_rooms(start_date,end_date) # !(reservation.start_date < end_date) && !(reservation.end_date < end_date) if !((start_date < reservation.start_date && end_date <= reservation.start_date) || - # binding.pry + # binding.pry (end_date > reservation.end_date && start_date >= reservation.end_date)) list_of_rooms.reject! { |room| room.room_number == reservation.room_number } end end + + @block_hold.each do |block_room| + if !((start_date < block_room.start_date && end_date <= block_room.start_date) || + (end_date > block_room.end_date && start_date >= block_room.end_date)) + list_of_rooms.reject! { |room| room.room_number == block_room.room_number } + end + end + return list_of_rooms end + def block_hold(start_date, end_date, number_of_rooms) + available_rooms = available_rooms(start_date,end_date) + + number_of_rooms.times do |index| + if available_rooms[index] + + input = {} + input[:room_number] = available_rooms[index].room_number + input[:start_date] = start_date + input[:end_date] = end_date + + block_hold = Reservation.new(input) + @block_hold << block_hold + end + end + return @block_hold + end + + + + end diff --git a/lib/reservations.rb b/lib/reservations.rb index 6c055d491..c7067b96b 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -10,6 +10,7 @@ def initialize(input) @start_date = Date.parse(input[:start_date]) @end_date = Date.parse(input[:end_date]) @@cost = total_cost + @block = [] end def total_cost @@ -18,5 +19,4 @@ def total_cost return cost end - end diff --git a/spec/front_desk_spec.rb b/spec/front_desk_spec.rb index d7f2422b2..1017fd444 100644 --- a/spec/front_desk_spec.rb +++ b/spec/front_desk_spec.rb @@ -67,6 +67,15 @@ # expect{room}.must_raise StandardError # end + it "holds number of block rooms" do + expect(@admin.block_hold(('2018-02-01'),('2018-02-03'),2).length).must_equal 2 + end + + it "raises error" do + @admin.block_hold(('2018-02-01'),('2018-02-11'),2) + expect {@admin.reserve_room(1,('2018-02-01'),('2018-02-10'))}.must_raise StandardError + end + end end #reserve_room creates an instance of reservation From 4ab3f83f44bfe48117c90a1743aad018fb3240ba Mon Sep 17 00:00:00 2001 From: Jazz Date: Sat, 8 Sep 2018 21:52:36 -0700 Subject: [PATCH 06/10] Block Reservation Complete --- lib/front_desk.rb | 23 ++++++++++++++--------- spec/front_desk_spec.rb | 20 ++++++++++++++++++-- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index f1ae958ce..6f4be1f69 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -28,7 +28,6 @@ def load_rooms def reserve_room(room_number,start_date, end_date) available_rooms = available_rooms(start_date,end_date) - if !available_rooms.find { |room| room.room_number == room_number } raise StandardError end @@ -81,18 +80,23 @@ def available_rooms(start_date,end_date) def block_hold(start_date, end_date, number_of_rooms) available_rooms = available_rooms(start_date,end_date) + # if !available_rooms.find { |room| room.room_number == room_number } + # raise StandardError + # end + + if number_of_rooms > 5 && number_of_rooms != 0 + raise StandardError + end number_of_rooms.times do |index| - if available_rooms[index] - input = {} - input[:room_number] = available_rooms[index].room_number - input[:start_date] = start_date - input[:end_date] = end_date + input = {} + input[:room_number] = available_rooms[index].room_number + input[:start_date] = start_date + input[:end_date] = end_date - block_hold = Reservation.new(input) - @block_hold << block_hold - end + block_hold = Reservation.new(input) + @block_hold << block_hold end return @block_hold end @@ -100,4 +104,5 @@ def block_hold(start_date, end_date, number_of_rooms) + end diff --git a/spec/front_desk_spec.rb b/spec/front_desk_spec.rb index 1017fd444..16a846f38 100644 --- a/spec/front_desk_spec.rb +++ b/spec/front_desk_spec.rb @@ -67,15 +67,31 @@ # expect{room}.must_raise StandardError # end - it "holds number of block rooms" do + + + +######## addd describe block to this methods so it stops using the room to test from top ##### + it "makes a block reservation for 1 to 5 rooms" do expect(@admin.block_hold(('2018-02-01'),('2018-02-03'),2).length).must_equal 2 end - it "raises error" do + it "raises error if standard reservation conflicts with block reservation" do @admin.block_hold(('2018-02-01'),('2018-02-11'),2) expect {@admin.reserve_room(1,('2018-02-01'),('2018-02-10'))}.must_raise StandardError end + it "raises error if block reservation exceeds maximum(5) block reservation" do + expect {@admin.block_hold(('2018-02-01'),('2018-02-11'),6)}.must_raise StandardError + end + + it "raises error if block reservations conflict" do + @admin.block_hold(('2018-02-01'),('2018-02-11'),5) + @admin.block_hold(('2018-02-01'),('2018-02-11'),5) + @admin.block_hold(('2018-02-01'),('2018-02-11'),5) + @admin.block_hold(('2018-02-01'),('2018-02-11'),4) + expect {@admin.block_hold(('2018-02-01'),('2018-02-10'),2)}.must_raise StandardError + end + end end #reserve_room creates an instance of reservation From f7fe641772f0bbdb43fb714917b533fc67aa2b1b Mon Sep 17 00:00:00 2001 From: Jazz Date: Sun, 9 Sep 2018 07:58:39 -0700 Subject: [PATCH 07/10] Add Search method to Block Reservation --- lib/front_desk.rb | 23 ++++++++++++++++------- spec/front_desk_spec.rb | 9 +++++++-- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 6f4be1f69..dc7e1542e 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -46,9 +46,21 @@ def reserve_room(room_number,start_date, end_date) #method to grab reservation by Date def search_reserved_by_date(search_date) search_date = Date.parse(search_date) - @reservations.select do |reservation| - reservation.start_date <= search_date && search_date < reservation.end_date + results = [] + + @reservations.each do |reservation| + if reservation.start_date <= search_date && search_date < reservation.end_date + results << @reservations + end + end + + @block_hold.each do |reservation| + if reservation.start_date <= search_date && search_date < reservation.end_date + results << @block_hold + end end + + return results end def available_rooms(start_date,end_date) @@ -62,7 +74,6 @@ def available_rooms(start_date,end_date) # !(reservation.start_date < end_date) && !(reservation.end_date < end_date) if !((start_date < reservation.start_date && end_date <= reservation.start_date) || - # binding.pry (end_date > reservation.end_date && start_date >= reservation.end_date)) list_of_rooms.reject! { |room| room.room_number == reservation.room_number } end @@ -80,16 +91,12 @@ def available_rooms(start_date,end_date) def block_hold(start_date, end_date, number_of_rooms) available_rooms = available_rooms(start_date,end_date) - # if !available_rooms.find { |room| room.room_number == room_number } - # raise StandardError - # end if number_of_rooms > 5 && number_of_rooms != 0 raise StandardError end number_of_rooms.times do |index| - input = {} input[:room_number] = available_rooms[index].room_number input[:start_date] = start_date @@ -105,4 +112,6 @@ def block_hold(start_date, end_date, number_of_rooms) + + end diff --git a/spec/front_desk_spec.rb b/spec/front_desk_spec.rb index 16a846f38..d7e2a8ee3 100644 --- a/spec/front_desk_spec.rb +++ b/spec/front_desk_spec.rb @@ -23,6 +23,7 @@ before do @admin = Front_Desk.new @new_reservation = @admin.reserve_room(5,('2018-02-03'),('2018-02-06')) + end it "has a room number assisnged to the reservation" do @@ -42,10 +43,13 @@ end it "returns all reservation within that date" do - expect(@admin.search_reserved_by_date('2018-02-05').length).must_equal 1 + @admin.block_hold(('2018-02-03'),('2018-02-06'),2) + @admin.reserve_room(5,('2018-02-01'),('2018-02-03')) + expect(@admin.search_reserved_by_date('2018-02-05').length).must_equal 3 end - it "returns reservations all reservation within that date" do + it "returns zero for day of" do + @admin.block_hold(('2018-02-03'),('2018-02-06'),2) expect(@admin.search_reserved_by_date('2018-02-06').length).must_equal 0 end @@ -71,6 +75,7 @@ ######## addd describe block to this methods so it stops using the room to test from top ##### + it "makes a block reservation for 1 to 5 rooms" do expect(@admin.block_hold(('2018-02-01'),('2018-02-03'),2).length).must_equal 2 end From 614b4717cd569ce8c684dc678a1bb287f2c3c95a Mon Sep 17 00:00:00 2001 From: Jazz Date: Mon, 10 Sep 2018 00:28:12 -0700 Subject: [PATCH 08/10] refactors.txt created --- lib/front_desk.rb | 21 ++++++++++----------- lib/reservations.rb | 2 -- refactors.txt | 7 +++++++ spec/front_desk_spec.rb | 20 ++++++++++---------- spec/rooms_spec.rb | 3 +++ 5 files changed, 30 insertions(+), 23 deletions(-) create mode 100644 refactors.txt diff --git a/lib/front_desk.rb b/lib/front_desk.rb index dc7e1542e..67cbf5c0c 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -8,7 +8,7 @@ class Front_Desk def initialize @reservations = [] - @block_hold = [] + @block_reservations = [] @rooms = load_rooms end @@ -54,9 +54,9 @@ def search_reserved_by_date(search_date) end end - @block_hold.each do |reservation| + @block_reservations.each do |reservation| if reservation.start_date <= search_date && search_date < reservation.end_date - results << @block_hold + results << @block_reservations end end @@ -70,16 +70,13 @@ def available_rooms(start_date,end_date) list_of_rooms = @rooms.dup @reservations.each do |reservation| - # if !(reservation.start_date < start_date) && !(reservation.end_date <= start_date) || - # !(reservation.start_date < end_date) && !(reservation.end_date < end_date) - if !((start_date < reservation.start_date && end_date <= reservation.start_date) || (end_date > reservation.end_date && start_date >= reservation.end_date)) list_of_rooms.reject! { |room| room.room_number == reservation.room_number } end end - @block_hold.each do |block_room| + @block_reservations.each do |block_room| if !((start_date < block_room.start_date && end_date <= block_room.start_date) || (end_date > block_room.end_date && start_date >= block_room.end_date)) list_of_rooms.reject! { |room| room.room_number == block_room.room_number } @@ -89,7 +86,8 @@ def available_rooms(start_date,end_date) return list_of_rooms end - def block_hold(start_date, end_date, number_of_rooms) + + def block_hold(start_date, end_date, number_of_rooms, party_name) available_rooms = available_rooms(start_date,end_date) if number_of_rooms > 5 && number_of_rooms != 0 @@ -101,11 +99,13 @@ def block_hold(start_date, end_date, number_of_rooms) input[:room_number] = available_rooms[index].room_number input[:start_date] = start_date input[:end_date] = end_date + input[:party_name] = party_name block_hold = Reservation.new(input) - @block_hold << block_hold + @block_reservations << block_hold + end - return @block_hold + return @block_reservations end @@ -113,5 +113,4 @@ def block_hold(start_date, end_date, number_of_rooms) - end diff --git a/lib/reservations.rb b/lib/reservations.rb index c7067b96b..e8e12b52c 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -4,13 +4,11 @@ class Reservation attr_reader :room_number, :start_date, :end_date - def initialize(input) @room_number = input[:room_number] @start_date = Date.parse(input[:start_date]) @end_date = Date.parse(input[:end_date]) @@cost = total_cost - @block = [] end def total_cost diff --git a/refactors.txt b/refactors.txt new file mode 100644 index 000000000..2d6c3dd7b --- /dev/null +++ b/refactors.txt @@ -0,0 +1,7 @@ +#complete wave 3 requirements +#add a block reservation class +#rethink the room class +#create more test for all classes +#add comments to the code +#create methods for invalid start and end dates +#look at major dependency from each class diff --git a/spec/front_desk_spec.rb b/spec/front_desk_spec.rb index d7e2a8ee3..36ec6b03a 100644 --- a/spec/front_desk_spec.rb +++ b/spec/front_desk_spec.rb @@ -43,13 +43,13 @@ end it "returns all reservation within that date" do - @admin.block_hold(('2018-02-03'),('2018-02-06'),2) + @admin.block_hold(('2018-02-03'),('2018-02-06'),2, "Nelson") @admin.reserve_room(5,('2018-02-01'),('2018-02-03')) expect(@admin.search_reserved_by_date('2018-02-05').length).must_equal 3 end it "returns zero for day of" do - @admin.block_hold(('2018-02-03'),('2018-02-06'),2) + @admin.block_hold(('2018-02-03'),('2018-02-06'),2, "Martinez") expect(@admin.search_reserved_by_date('2018-02-06').length).must_equal 0 end @@ -77,24 +77,24 @@ ######## addd describe block to this methods so it stops using the room to test from top ##### it "makes a block reservation for 1 to 5 rooms" do - expect(@admin.block_hold(('2018-02-01'),('2018-02-03'),2).length).must_equal 2 + expect(@admin.block_hold(('2018-02-01'),('2018-02-03'),2, "Smith").length).must_equal 2 end it "raises error if standard reservation conflicts with block reservation" do - @admin.block_hold(('2018-02-01'),('2018-02-11'),2) + @admin.block_hold(('2018-02-01'),('2018-02-11'),2, "Martinez") expect {@admin.reserve_room(1,('2018-02-01'),('2018-02-10'))}.must_raise StandardError end it "raises error if block reservation exceeds maximum(5) block reservation" do - expect {@admin.block_hold(('2018-02-01'),('2018-02-11'),6)}.must_raise StandardError + expect {@admin.block_hold(('2018-02-01'),('2018-02-11'),6,"Jacobs")}.must_raise StandardError end it "raises error if block reservations conflict" do - @admin.block_hold(('2018-02-01'),('2018-02-11'),5) - @admin.block_hold(('2018-02-01'),('2018-02-11'),5) - @admin.block_hold(('2018-02-01'),('2018-02-11'),5) - @admin.block_hold(('2018-02-01'),('2018-02-11'),4) - expect {@admin.block_hold(('2018-02-01'),('2018-02-10'),2)}.must_raise StandardError + @admin.block_hold(('2018-02-01'),('2018-02-11'),5, "Smith") + @admin.block_hold(('2018-02-01'),('2018-02-11'),5, "Nelson") + @admin.block_hold(('2018-02-01'),('2018-02-11'),5, "Johnson") + @admin.block_hold(('2018-02-01'),('2018-02-11'),4, "Jacobs") + expect {@admin.block_hold(('2018-02-01'),('2018-02-10'),2, "Martinez")}.must_raise StandardError end end diff --git a/spec/rooms_spec.rb b/spec/rooms_spec.rb index 22feeca4d..28f66d48e 100644 --- a/spec/rooms_spec.rb +++ b/spec/rooms_spec.rb @@ -25,3 +25,6 @@ # # end # end + +# if !(reservation.start_date < start_date) && !(reservation.end_date <= start_date) || +# !(reservation.start_date < end_date) && !(reservation.end_date < end_date) From 7f4a459e6d4786efd78df1e54dd0e4636b441087 Mon Sep 17 00:00:00 2001 From: Jazz Date: Sat, 29 Sep 2018 17:56:34 -0700 Subject: [PATCH 09/10] Add design-activity.md --- lib/design-activity.md | 26 ++++++++++++++++++++++++++ lib/front_desk.rb | 7 +++---- spec/front_desk_spec.rb | 39 +++++++++++---------------------------- spec/reservation_spec.rb | 16 ++++++++++++++++ spec/rooms_spec.rb | 2 +- 5 files changed, 57 insertions(+), 33 deletions(-) create mode 100644 lib/design-activity.md diff --git a/lib/design-activity.md b/lib/design-activity.md new file mode 100644 index 000000000..209993c9e --- /dev/null +++ b/lib/design-activity.md @@ -0,0 +1,26 @@ +In Implementation A classes: +CartEntry + initialize two instance variables unit_price & quantity. +ShoppingCart + initialize an instance variables with an empty array. +Order + instantiate a new instance of an entry from the Shopping Cart class with instance variable cart. + SALES_TAX is a constant +Total_Price + calculating the total price of each item in the shopping cart. + +Implementation B classes +CartEntry + creates a method to calculate the price of all the same items per quantity. +ShoppingCart + Adds the sum of all items purchased. +Order + instantiate an instance of ShoppingCart and calculates the total of the order with sales tax. + +I think it is better to have total_price in order because if a calculation changed in shopping cart it would automatically be reflected in order. + +I don't believe it does manipulate the instance variable in other classes. + +If we were to add a bulk option I would add it to the price method in CartEntry as a conditional. + +I think Implementation B has a single responsibility because Implementation A has some classes with zero responsibility. diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 67cbf5c0c..86d3747c1 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -25,7 +25,7 @@ def load_rooms return rooms end - def reserve_room(room_number,start_date, end_date) + def reserve_room(room_number, start_date, end_date) available_rooms = available_rooms(start_date,end_date) if !available_rooms.find { |room| room.room_number == room_number } @@ -87,10 +87,10 @@ def available_rooms(start_date,end_date) end - def block_hold(start_date, end_date, number_of_rooms, party_name) + def block_hold(start_date, end_date, number_of_rooms) available_rooms = available_rooms(start_date,end_date) - if number_of_rooms > 5 && number_of_rooms != 0 + if number_of_rooms > 5 raise StandardError end @@ -99,7 +99,6 @@ def block_hold(start_date, end_date, number_of_rooms, party_name) input[:room_number] = available_rooms[index].room_number input[:start_date] = start_date input[:end_date] = end_date - input[:party_name] = party_name block_hold = Reservation.new(input) @block_reservations << block_hold diff --git a/spec/front_desk_spec.rb b/spec/front_desk_spec.rb index 36ec6b03a..244fe16b5 100644 --- a/spec/front_desk_spec.rb +++ b/spec/front_desk_spec.rb @@ -3,23 +3,6 @@ describe "Front Desk Class" do describe "Initializer" do - - it "loads 20 rooms" do - admin = Front_Desk.new - rooms = admin.load_rooms - expect(rooms).must_be_kind_of Array - expect(rooms.length).must_equal 20 - end - - it "returns an array that has instances of room" do - admin = Front_Desk.new - rooms = admin.load_rooms - rooms.each do |room| - expect(room).must_be_kind_of Room - end - end - - before do @admin = Front_Desk.new @new_reservation = @admin.reserve_room(5,('2018-02-03'),('2018-02-06')) @@ -43,13 +26,13 @@ end it "returns all reservation within that date" do - @admin.block_hold(('2018-02-03'),('2018-02-06'),2, "Nelson") + @admin.block_hold(('2018-02-03'),('2018-02-06'),2) @admin.reserve_room(5,('2018-02-01'),('2018-02-03')) expect(@admin.search_reserved_by_date('2018-02-05').length).must_equal 3 end - it "returns zero for day of" do - @admin.block_hold(('2018-02-03'),('2018-02-06'),2, "Martinez") + it "returns zero for date of checkout" do + @admin.block_hold(('2018-02-03'),('2018-02-06'),2) expect(@admin.search_reserved_by_date('2018-02-06').length).must_equal 0 end @@ -77,24 +60,24 @@ ######## addd describe block to this methods so it stops using the room to test from top ##### it "makes a block reservation for 1 to 5 rooms" do - expect(@admin.block_hold(('2018-02-01'),('2018-02-03'),2, "Smith").length).must_equal 2 + expect(@admin.block_hold(('2018-02-01'),('2018-02-03'),2).length).must_equal 2 end it "raises error if standard reservation conflicts with block reservation" do - @admin.block_hold(('2018-02-01'),('2018-02-11'),2, "Martinez") + @admin.block_hold(('2018-02-01'),('2018-02-11'),2) expect {@admin.reserve_room(1,('2018-02-01'),('2018-02-10'))}.must_raise StandardError end it "raises error if block reservation exceeds maximum(5) block reservation" do - expect {@admin.block_hold(('2018-02-01'),('2018-02-11'),6,"Jacobs")}.must_raise StandardError + expect {@admin.block_hold(('2018-02-01'),('2018-02-11'),6)}.must_raise StandardError end it "raises error if block reservations conflict" do - @admin.block_hold(('2018-02-01'),('2018-02-11'),5, "Smith") - @admin.block_hold(('2018-02-01'),('2018-02-11'),5, "Nelson") - @admin.block_hold(('2018-02-01'),('2018-02-11'),5, "Johnson") - @admin.block_hold(('2018-02-01'),('2018-02-11'),4, "Jacobs") - expect {@admin.block_hold(('2018-02-01'),('2018-02-10'),2, "Martinez")}.must_raise StandardError + @admin.block_hold(('2018-02-01'),('2018-02-11'),5) + @admin.block_hold(('2018-02-01'),('2018-02-11'),5) + @admin.block_hold(('2018-02-01'),('2018-02-11'),5) + @admin.block_hold(('2018-02-01'),('2018-02-11'),4) + expect {@admin.block_hold(('2018-02-01'),('2018-02-10'),2)}.must_raise StandardError end end diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index 3e0ff4968..fa5a6fef6 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -2,6 +2,22 @@ describe "Reservation Class" do describe "Initializer in Reservation" do + + it "loads 20 rooms" do + admin = Front_Desk.new + rooms = admin.load_rooms + expect(rooms).must_be_kind_of Array + expect(rooms.length).must_equal 20 + end + + it "returns an array that has instances of room" do + admin = Front_Desk.new + rooms = admin.load_rooms + rooms.each do |room| + expect(room).must_be_kind_of Room + end + end + before do @reservation_info = { room_number: 1, diff --git a/spec/rooms_spec.rb b/spec/rooms_spec.rb index 28f66d48e..e14491551 100644 --- a/spec/rooms_spec.rb +++ b/spec/rooms_spec.rb @@ -1,6 +1,6 @@ require_relative 'spec_helper' -# + # describe "Rooms class" do # describe "Initializer in Rooms" do # From 1c7889d9e42bd6fd4f8b1566978185f4e5b1f341 Mon Sep 17 00:00:00 2001 From: Jazz Date: Sun, 30 Sep 2018 18:22:06 -0700 Subject: [PATCH 10/10] Made adjustments recommended --- lib/front_desk.rb | 13 ++++++------ spec/front_desk_spec.rb | 44 ++++++++++++++++++++--------------------- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 86d3747c1..d19077702 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -26,10 +26,13 @@ def load_rooms end def reserve_room(room_number, start_date, end_date) + if start_date > end_date + raise StandardError.new("Checkin Date: #{start_date} must be before Checkout Date: #{end_date}") + end available_rooms = available_rooms(start_date,end_date) if !available_rooms.find { |room| room.room_number == room_number } - raise StandardError + raise AlreadyReservedError.new("Room #{room} already has a reservation between #{start_date} and #{end_date}") end input = {} @@ -90,7 +93,9 @@ def available_rooms(start_date,end_date) def block_hold(start_date, end_date, number_of_rooms) available_rooms = available_rooms(start_date,end_date) - if number_of_rooms > 5 + if start_date > end_date + raise StandardError.new("Checkin Date: #{start_date} must be before Checkout Date: #{end_date}") + elsif number_of_rooms > 5 raise StandardError end @@ -108,8 +113,4 @@ def block_hold(start_date, end_date, number_of_rooms) end - - - - end diff --git a/spec/front_desk_spec.rb b/spec/front_desk_spec.rb index 244fe16b5..f2c585cb1 100644 --- a/spec/front_desk_spec.rb +++ b/spec/front_desk_spec.rb @@ -49,37 +49,37 @@ expect(@admin.reserve_room(5,('2018-02-01'),('2018-02-03'))).must_be_kind_of Reservation end - # it "raises an error if start date after the end date" do - # room = @admin.reserve_room(6,('2018-02-05'),('2018-02-03')) - # expect{room}.must_raise StandardError - # end + it "raises an error if start date after the end date" do + expect{@admin.reserve_room(6,('2018-02-05'),('2018-02-03'))}.must_raise StandardError + end + describe "block hold reservation" do + it "makes a block reservation for 1 to 5 rooms" do + expect(@admin.block_hold(('2018-02-01'),('2018-02-03'),2).length).must_equal 2 + end -######## addd describe block to this methods so it stops using the room to test from top ##### + it "raises error if standard reservation conflicts with block reservation" do + @admin.block_hold(('2018-02-01'),('2018-02-11'),2) + expect {@admin.reserve_room(1,('2018-02-01'),('2018-02-10'))}.must_raise StandardError + end - it "makes a block reservation for 1 to 5 rooms" do - expect(@admin.block_hold(('2018-02-01'),('2018-02-03'),2).length).must_equal 2 - end + it "raises error if block reservation exceeds maximum(5) block reservation" do + expect {@admin.block_hold(('2018-02-01'),('2018-02-11'),6)}.must_raise StandardError + end - it "raises error if standard reservation conflicts with block reservation" do - @admin.block_hold(('2018-02-01'),('2018-02-11'),2) - expect {@admin.reserve_room(1,('2018-02-01'),('2018-02-10'))}.must_raise StandardError - end + it "raises error if block reservations conflict" do + @admin.block_hold(('2018-02-01'),('2018-02-11'),5) + @admin.block_hold(('2018-02-01'),('2018-02-11'),5) + @admin.block_hold(('2018-02-01'),('2018-02-11'),5) + @admin.block_hold(('2018-02-01'),('2018-02-11'),4) + expect {@admin.block_hold(('2018-02-01'),('2018-02-10'),2)}.must_raise StandardError + end - it "raises error if block reservation exceeds maximum(5) block reservation" do - expect {@admin.block_hold(('2018-02-01'),('2018-02-11'),6)}.must_raise StandardError - end - it "raises error if block reservations conflict" do - @admin.block_hold(('2018-02-01'),('2018-02-11'),5) - @admin.block_hold(('2018-02-01'),('2018-02-11'),5) - @admin.block_hold(('2018-02-01'),('2018-02-11'),5) - @admin.block_hold(('2018-02-01'),('2018-02-11'),4) - expect {@admin.block_hold(('2018-02-01'),('2018-02-10'),2)}.must_raise StandardError - end + end end end #reserve_room creates an instance of reservation