From 0306f6476e152d0da8c45b171dc1058f896d19db Mon Sep 17 00:00:00 2001 From: Vera Date: Tue, 3 Mar 2020 12:17:01 -0800 Subject: [PATCH 01/32] Creating Hotel Modulo with classes(DataRange, FrontDesk,Reservation and Room) --- lib/date_range.rb | 21 +++++++++++++++++++++ lib/front_desk.rb | 18 ++++++++++++++++++ lib/reservation.rb | 16 ++++++++++++++++ lib/room.rb | 0 4 files changed, 55 insertions(+) create mode 100644 lib/date_range.rb create mode 100644 lib/front_desk.rb create mode 100644 lib/reservation.rb create mode 100644 lib/room.rb diff --git a/lib/date_range.rb b/lib/date_range.rb new file mode 100644 index 000000000..47223624a --- /dev/null +++ b/lib/date_range.rb @@ -0,0 +1,21 @@ +module Hotel + class DateRange + attr_accessor :start_date, :end_date + + def initialize(start_date, end_date) + + end + + def overlap?(data_range) + return false + end + + def include?(date) + return false + end + + def nights + return 3 + end + end +end \ No newline at end of file diff --git a/lib/front_desk.rb b/lib/front_desk.rb new file mode 100644 index 000000000..45effe5f8 --- /dev/null +++ b/lib/front_desk.rb @@ -0,0 +1,18 @@ + +module Hotel + class FrontDesk + attr_reader :rooms, :datarange + + def room_list + return [] + end + + def make_resevation(datarange,room) + return Reservation.new(datarange, nil) + end + + def reservations(date) + return [] + end + end +end \ No newline at end of file diff --git a/lib/reservation.rb b/lib/reservation.rb new file mode 100644 index 000000000..810fc5b4b --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,16 @@ + +module Hotel + + class Reservation + + attr_reader :daterange, :room + + def initialize(daterange, room) + @room = room + end + + def total_cost + return 2.0 + end + end +end \ No newline at end of file diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..e69de29bb From 6ec5568f0e572f1fe69dd8f7bd36a66e51b53275 Mon Sep 17 00:00:00 2001 From: Vera Date: Tue, 3 Mar 2020 12:19:14 -0800 Subject: [PATCH 02/32] Adding tests for the classes (FrontDesk and Reservation) * TODO: Write Data_Range test and Room test --- test/data_range_test.rb | 0 test/front_desk_test.rb | 42 ++++++++++++++++++++++++++++++++++++++++ test/reservation_test.rb | 19 ++++++++++++++++++ test/test_helper.rb | 9 +++++++++ 4 files changed, 70 insertions(+) create mode 100644 test/data_range_test.rb create mode 100644 test/front_desk_test.rb create mode 100644 test/reservation_test.rb diff --git a/test/data_range_test.rb b/test/data_range_test.rb new file mode 100644 index 000000000..e69de29bb diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb new file mode 100644 index 000000000..048c09eb3 --- /dev/null +++ b/test/front_desk_test.rb @@ -0,0 +1,42 @@ +require_relative 'test_helper' + +describe Hotel::FrontDesk do + before do + @front_desk = Hotel::FrontDesk.new + @date = Date.parse("2020-05-21") + start_date = @date + end_date = start_date + 2 + @datarange = Hotel::DateRange.new(start_date,end_date) + end + + describe "*** Wave number 1 ***" do + describe "room_list" do + it "==== Returns a list of rooms ==== " do + rooms = @front_desk.room_list + expect(rooms).must_be_kind_of Array + end + it "=== raise an error if the array of rooms it is empty ===" do + rooms = @front_desk.room_list.length + expect(rooms).must_be :>, 1 + end + end + + describe "make_resevation" do + it "=== Returns a new resevation ===" do + new_reservation = @front_desk.make_resevation(@datarange,nil) + expect(new_reservation).must_be_kind_of Hotel::Reservation + end + end + + describe "reservations" do + it "=== Returns an array of reservations ===" do + reservations = @front_desk.reservations(@date) + expect(reservations).must_be_kind_of Array + reservations.each do |reservation| + reservation.must_be_kind_of Reservation + end + end + end + end + +end diff --git a/test/reservation_test.rb b/test/reservation_test.rb new file mode 100644 index 000000000..66abe785a --- /dev/null +++ b/test/reservation_test.rb @@ -0,0 +1,19 @@ +require_relative 'test_helper' + +describe Hotel::Reservation do + + before do + @date = Date.parse("2020-05-21") + start_date = @date + end_date = start_date + 2 + datarange = Hotel::DateRange.new(start_date,end_date) + @reservation = Hotel::Reservation.new(datarange,nil) + end + + + it "Returns the total_cost of the reservation" do + + + end + +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index c3a7695cf..61d8d640e 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,4 +1,8 @@ # Add simplecov + +require 'simplecov' +SimpleCov.start + require "minitest" require "minitest/autorun" require "minitest/reporters" @@ -6,3 +10,8 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # require_relative your lib files here! + +require_relative '../lib/front_desk' +require_relative '../lib/reservation' +require_relative '../lib/date_range' +require_relative '../lib/room' \ No newline at end of file From ea0b5745b28f6b2333e1424ba1e8b7ca97f5045b Mon Sep 17 00:00:00 2001 From: Vera Date: Tue, 3 Mar 2020 14:32:41 -0800 Subject: [PATCH 03/32] Adding Initialize test, Negative length, Incorrect date format and overlap? --- test/data_range_test.rb | 62 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/test/data_range_test.rb b/test/data_range_test.rb index e69de29bb..09ec52fa8 100644 --- a/test/data_range_test.rb +++ b/test/data_range_test.rb @@ -0,0 +1,62 @@ +require_relative "test_helper" +require 'date' + +describe Hotel::DateRange do + + + describe "Initilize" 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 + + it "is an an error for negative-lenght ranges" do + start_date = Date.new(2017, 01, 01) + end_date = Date.new(2015, 01, 01) + + expect{ + Hotel::DateRange.new(start_date, end_date) + }.must_raise ArgumentError + + end + + it "is an error to create a 0-length range" do + + end + + it "Raises an error for incorrect dates format" do + start_date = Date.new(2017) + end_date = Date.new(2) + + expect { + Hotel::DateRange.validate_date(start_date) + }.must_raise ArgumentError + + expect { + Hotel::DateRange.validate_date(end_date) + }.must_raise ArgumentError + + 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 + end +end \ No newline at end of file From 65a70fa69341bff23fc39b6f56408644d0720877 Mon Sep 17 00:00:00 2001 From: Vera Date: Tue, 3 Mar 2020 14:33:51 -0800 Subject: [PATCH 04/32] Including Self.validate_date in data_range to validate data format --- lib/date_range.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 47223624a..fd80951f8 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -1,9 +1,12 @@ +require 'date' + module Hotel class DateRange attr_accessor :start_date, :end_date def initialize(start_date, end_date) - + self.class.validate_date(start_date) + self.class.validate_date(end_date) end def overlap?(data_range) @@ -17,5 +20,13 @@ def include?(date) def nights return 3 end + + + private + + def self.validate_date(date) + return true + end + end end \ No newline at end of file From 5c77079a8ed0ea0f9f69dca2123e7336bffeab1c Mon Sep 17 00:00:00 2001 From: Vera Date: Tue, 3 Mar 2020 14:35:13 -0800 Subject: [PATCH 05/32] Method to generate the rooms, 1 to 20 numbers of room --- lib/front_desk.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 45effe5f8..c90901b95 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -3,6 +3,18 @@ module Hotel class FrontDesk attr_reader :rooms, :datarange + def initialize + @rooms = generate_rooms + end + + def generate_rooms + hotel_rooms = Array.new + (1..20).each do |room_id| + hotel_rooms << Room.new(room_id) + end + return hotel_rooms + end + def room_list return [] end From b0011739c3c0354f5a9b7e5fef51a27c7f851aaf Mon Sep 17 00:00:00 2001 From: Vera Date: Tue, 3 Mar 2020 14:35:58 -0800 Subject: [PATCH 06/32] Initializing Room class --- lib/room.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/room.rb b/lib/room.rb index e69de29bb..e40354b91 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -0,0 +1,19 @@ + +module Hotel + class Room + attr_reader :room_id, :capacity, :cost + + def initialize(room_id, capacity: 2, cost: 200) + @room_id = room_id + @capacity = capacity + @cost = cost + end + + def cost + return @cost + end + end +end + +# a = Hotel::Room.new(1) +# p a.cost From 8dfa8604b2d6df19df997bdb7ce948ada4a1efe6 Mon Sep 17 00:00:00 2001 From: Vera Date: Tue, 3 Mar 2020 14:36:35 -0800 Subject: [PATCH 07/32] Creating new class client to keep the client information --- lib/client.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 lib/client.rb diff --git a/lib/client.rb b/lib/client.rb new file mode 100644 index 000000000..3c14b5cd3 --- /dev/null +++ b/lib/client.rb @@ -0,0 +1,12 @@ + +module Hotel + class Client + attr_reader :id, :name, :phone_number + + def initialize(id, name, phone_number) + @id = id + @name = name + @phone_number = phone_number + end + end +end \ No newline at end of file From f14c6d8265dcb55f29ebd15ee1adea29634a6c89 Mon Sep 17 00:00:00 2001 From: Vera Date: Wed, 4 Mar 2020 18:14:58 -0800 Subject: [PATCH 08/32] Self private validate date, to validate the format date,start date not greater than end_date and the length not equals to 0 updating the overlap? and nights method --- lib/date_range.rb | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index fd80951f8..638c2846e 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -5,28 +5,46 @@ class DateRange attr_accessor :start_date, :end_date def initialize(start_date, end_date) - self.class.validate_date(start_date) - self.class.validate_date(end_date) + self.class.validate_date?(start_date,end_date) + @start_date = start_date + @end_date = end_date end - def overlap?(data_range) - return false + def overlap?(input_range) + + a = input_range.start_date >= self.start_date + b = input_range.start_date < self.end_date + c = input_range.end_date > self.start_date + d = input_range.end_date < self.end_date + + if a && b || c && d + return true + else + return false + end end - def include?(date) - return false + def include?(input_range) + end def nights - return 3 + nights_number = (end_date - start_date).to_i + return nights_number end - private - - def self.validate_date(date) - return true - end - end -end \ No newline at end of file + def self.validate_date?(start_date, end_date) + + date_format = '%Y-%m-%d' + if !DateTime.strptime(start_date.to_s, date_format) || !DateTime.strptime(end_date.to_s, date_format) + return rescue ArgumentError + elsif start_date > end_date || start_date - end_date == 0 + raise ArgumentError.new("The end time is before the start time.") + end + end + end +end +# a = Hotel::DateRange.new("2015-10-10","2015-10-10") +# p a \ No newline at end of file From 52f72df4e5f03c6e528004820d4f2d23f24a6952 Mon Sep 17 00:00:00 2001 From: Vera Date: Wed, 4 Mar 2020 18:16:03 -0800 Subject: [PATCH 09/32] Update rooms method to return the @rooms array --- lib/front_desk.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index c90901b95..bf96bb8d5 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -16,10 +16,11 @@ def generate_rooms end def room_list - return [] + return @rooms end def make_resevation(datarange,room) + return Reservation.new(datarange, nil) end From d16c5285224daa5df40e678b05fc549af7e20d2c Mon Sep 17 00:00:00 2001 From: Vera Date: Wed, 4 Mar 2020 18:18:24 -0800 Subject: [PATCH 10/32] Clean bug in line 14 and 15 calling a wrong instance variable.(Fixed). Test dates length 0 and all the case scenarios for ovelap? method --- test/data_range_test.rb | 76 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 6 deletions(-) diff --git a/test/data_range_test.rb b/test/data_range_test.rb index 09ec52fa8..e8be6b2af 100644 --- a/test/data_range_test.rb +++ b/test/data_range_test.rb @@ -1,6 +1,7 @@ require_relative "test_helper" require 'date' +# The start day cannnot be in the past describe Hotel::DateRange do @@ -9,10 +10,11 @@ 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 + expect(@range.start_date).must_equal start_date + expect(@range.end_date).must_equal end_date end it "is an an error for negative-lenght ranges" do @@ -26,19 +28,25 @@ end it "is an error to create a 0-length range" do + start_date = Date.new(2017, 01, 01) + end_date = Date.new(2017, 01, 01) + expect{ + Hotel::DateRange.new(start_date, end_date) + }.must_raise ArgumentError + end it "Raises an error for incorrect dates format" do - start_date = Date.new(2017) - end_date = Date.new(2) + start_date = Date.new(2) + end_date = Date.new(290,2) expect { - Hotel::DateRange.validate_date(start_date) + Hotel::DateRange.validate_date?(start_date) }.must_raise ArgumentError expect { - Hotel::DateRange.validate_date(end_date) + Hotel::DateRange.validate_date?(end_date) }.must_raise ArgumentError end @@ -58,5 +66,61 @@ expect(@range.overlap?(test_range)).must_equal true end + + + it "returns true for a range that overlaps in front." do + start_date = Date.new(2017, 01, 02) + end_date = start_date + 4 + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_range)).must_equal true + end + + + it "returns true for a range that overlaps in the back." do + start_date = Date.new(2016, 12, 30) + end_date = start_date + 3 + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_range)).must_equal true + end + + it "returns false for a range ending on the start_date date." do + start_date = Date.new(2016, 12, 30) + end_date = Date.new(2017, 01, 01) + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_range)).must_equal false + end + + it "returns false for a range starting on the end_date date." do + start_date = Date.new(2017, 01, 04) + end_date = start_date + 7 + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_range)).must_equal false + end + + it "returns true for a contained range." do + start_date = Date.new(2017, 01, 02) + end_date = start_date + 1 + test_range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.overlap?(test_range)).must_equal true + end end + + describe "nights" do + it "returns the correct number of nights" do + start_date = Date.new(2017, 01, 01) + end_date = Date.new(2017, 01, 02) + + @range = Hotel::DateRange.new(start_date, end_date) + + expect(@range.nights).must_be_kind_of Integer + expect(@range.nights).must_equal 1 + + end + end + end \ No newline at end of file From 2f9c593ee1c22a3bd40f9ecfdfb3453298872d0b Mon Sep 17 00:00:00 2001 From: Vera Date: Thu, 5 Mar 2020 22:32:22 -0800 Subject: [PATCH 11/32] overlap? refractored, deleting extra logic to validate overlaps dates --- lib/date_range.rb | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 638c2846e..a946b7e91 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -12,16 +12,15 @@ def initialize(start_date, end_date) def overlap?(input_range) - a = input_range.start_date >= self.start_date - b = input_range.start_date < self.end_date - c = input_range.end_date > self.start_date - d = input_range.end_date < self.end_date - - if a && b || c && d - return true - else + a = self.start_date >= input_range.end_date + b = self.end_date <= input_range.start_date + + if a || b return false + else + return true end + end def include?(input_range) @@ -39,7 +38,7 @@ def self.validate_date?(start_date, end_date) date_format = '%Y-%m-%d' if !DateTime.strptime(start_date.to_s, date_format) || !DateTime.strptime(end_date.to_s, date_format) - return rescue ArgumentError + return rescue ArgumentError elsif start_date > end_date || start_date - end_date == 0 raise ArgumentError.new("The end time is before the start time.") end From feac28b8e46469e89fe1e41578c0ac6963c9515d Mon Sep 17 00:00:00 2001 From: Vera Date: Thu, 5 Mar 2020 22:33:39 -0800 Subject: [PATCH 12/32] total_reservations, reservations_by_date,cost_by_reservation created --- lib/front_desk.rb | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index bf96bb8d5..1d5063d64 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -1,10 +1,11 @@ module Hotel class FrontDesk - attr_reader :rooms, :datarange + attr_reader :rooms, :datarange, :reservations def initialize @rooms = generate_rooms + @reservations = [] end def generate_rooms @@ -18,14 +19,30 @@ def generate_rooms def room_list return @rooms end - - def make_resevation(datarange,room) - - return Reservation.new(datarange, nil) + + def total_reservations + return @reservations + end + # Make reservation method + def make_resevation(datarange) + new_reservation = Hotel::Reservation.new(datarange,@rooms[0]) + @reservations << new_reservation + return new_reservation + end + + def reservations_by_date(date) + total_by_date = @reservations.select do |reservation| + reservation.start_date == date + end + return total_by_date end - def reservations(date) - return [] + def cost_by_reservation(reservation_number) + cost = nil + @reservations.each do |reservation| + cost = reservation.total_cost + end + return cost end end end \ No newline at end of file From 9ab98114b410fbbca8f64082cff419a6bf4508e8 Mon Sep 17 00:00:00 2001 From: Vera Date: Thu, 5 Mar 2020 22:36:29 -0800 Subject: [PATCH 13/32] reservation intance variables(data_range and id). total_cost method --- lib/reservation.rb | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 810fc5b4b..7d5adbce6 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,16 +1,25 @@ +require 'securerandom' + module Hotel class Reservation - attr_reader :daterange, :room + attr_reader :daterange, :room, :id def initialize(daterange, room) + @daterange = daterange @room = room + @id = generate_id end + def generate_id + id = SecureRandom.hex(5) + end + def total_cost - return 2.0 + total_cost = (daterange.nights * @room.cost) + return total_cost end end end \ No newline at end of file From 46606d910157ec5005400c1e022d22e2fad757a3 Mon Sep 17 00:00:00 2001 From: Vera Date: Thu, 5 Mar 2020 22:40:27 -0800 Subject: [PATCH 14/32] Reservations_by_date and cost_by_reservation tests --- test/front_desk_test.rb | 43 ++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 048c09eb3..dc86fd5fd 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -3,40 +3,61 @@ describe Hotel::FrontDesk do before do @front_desk = Hotel::FrontDesk.new - @date = Date.parse("2020-05-21") + @date = Date.new(2020,05,21) start_date = @date end_date = start_date + 2 @datarange = Hotel::DateRange.new(start_date,end_date) end - describe "*** Wave number 1 ***" do + describe "Wave number 1" do describe "room_list" do - it "==== Returns a list of rooms ==== " do + it "Returns a list of rooms" do rooms = @front_desk.room_list expect(rooms).must_be_kind_of Array end - it "=== raise an error if the array of rooms it is empty ===" do + it "Raises an error if the array of rooms it is empty" do rooms = @front_desk.room_list.length expect(rooms).must_be :>, 1 end end - + # Desribed describe "make_resevation" do - it "=== Returns a new resevation ===" do - new_reservation = @front_desk.make_resevation(@datarange,nil) + it "Returns a new resevation" do + new_reservation = @front_desk.make_resevation(@datarange) expect(new_reservation).must_be_kind_of Hotel::Reservation end end - describe "reservations" do - it "=== Returns an array of reservations ===" do - reservations = @front_desk.reservations(@date) + describe "Reservations" do + it "returns an array of reservations" do + reservations = @front_desk.reservations expect(reservations).must_be_kind_of Array reservations.each do |reservation| reservation.must_be_kind_of Reservation end end end + + describe "Reservations_by_date" do + it "returns an a array of reservations by date" do + date = Date.new(2017,12,04) + total_by_date = @front_desk.reservations_by_date(date) + expect(total_by_date).must_be_kind_of Array + end + end + + describe "Cost_by_reservation" do + it "returns the total cost for a given reservation" do + new_reservation = @front_desk.make_resevation(@datarange) + reserv_id = new_reservation.id + cost = @front_desk.cost_by_reservation(reserv_id) + expect(cost).must_be_close_to 400, 0.01 + end + end + + end - + + + end From 53f0d5514127188c066f79adb9ce0a2220603b28 Mon Sep 17 00:00:00 2001 From: Vera Date: Thu, 5 Mar 2020 22:41:32 -0800 Subject: [PATCH 15/32] total cost test --- test/reservation_test.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/reservation_test.rb b/test/reservation_test.rb index 66abe785a..57509866a 100644 --- a/test/reservation_test.rb +++ b/test/reservation_test.rb @@ -3,17 +3,17 @@ describe Hotel::Reservation do before do - @date = Date.parse("2020-05-21") + @date = Date.new(2020,05,01) start_date = @date end_date = start_date + 2 - datarange = Hotel::DateRange.new(start_date,end_date) - @reservation = Hotel::Reservation.new(datarange,nil) + @datarange = Hotel::DateRange.new(start_date,end_date) + @room = Hotel::Room.new(1) + @reservation = Hotel::Reservation.new(@datarange, @room) end - it "Returns the total_cost of the reservation" do - - + cost = @reservation.total_cost + expect(cost).must_be_close_to (200 * 2), 0.01 end end \ No newline at end of file From 1003ecef85d12bfa1980360a83257c6fa7e11489 Mon Sep 17 00:00:00 2001 From: Vera Date: Fri, 6 Mar 2020 13:39:58 -0800 Subject: [PATCH 16/32] get_available_rooms and make_resrvation methods --- lib/front_desk.rb | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 1d5063d64..dbc4f8cf5 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -23,11 +23,30 @@ def room_list def total_reservations return @reservations end - # Make reservation method + + def get_available_rooms(datarange) + unavailable_rooms = [] + + @reservations.each do |reservation| + if reservation.datarange.overlap?(datarange) == true + unavailable_rooms << reservation.room + end + end + available_rooms = @rooms - unavailable_rooms + return available_rooms + end + def make_resevation(datarange) - new_reservation = Hotel::Reservation.new(datarange,@rooms[0]) - @reservations << new_reservation - return new_reservation + + available_rooms = get_available_rooms(datarange) + + if available_rooms.empty? + return raise ArgumentError + else + new_reservation = Hotel::Reservation.new(datarange,available_rooms[0]) + @reservations << new_reservation + return new_reservation + end end def reservations_by_date(date) From e5f00039fbd35129146e1732b178b28372fbfc2d Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 8 Mar 2020 17:16:53 -0700 Subject: [PATCH 17/32] Return - Raise syntax error fixed --- lib/date_range.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index a946b7e91..11409f5d7 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -33,13 +33,17 @@ def nights end private + + def self.validate_date?(start_date, end_date) date_format = '%Y-%m-%d' if !DateTime.strptime(start_date.to_s, date_format) || !DateTime.strptime(end_date.to_s, date_format) - return rescue ArgumentError - elsif start_date > end_date || start_date - end_date == 0 + raise ArgumentError + end + + if start_date > end_date || start_date - end_date == 0 raise ArgumentError.new("The end time is before the start time.") end end From 513447da1570a13f0250f87f90b25ca805b704e9 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 8 Mar 2020 17:19:59 -0700 Subject: [PATCH 18/32] Typos fixed date_range, make_reservation update for averlap cases, reservations by room and date --- lib/front_desk.rb | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index dbc4f8cf5..351585aa2 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -1,7 +1,7 @@ module Hotel class FrontDesk - attr_reader :rooms, :datarange, :reservations + attr_reader :rooms, :date_range, :reservations def initialize @rooms = generate_rooms @@ -24,29 +24,31 @@ def total_reservations return @reservations end - def get_available_rooms(datarange) + def get_available_rooms(date_range) unavailable_rooms = [] @reservations.each do |reservation| - if reservation.datarange.overlap?(datarange) == true + if reservation.daterange.overlap?(date_range) == true unavailable_rooms << reservation.room end end + available_rooms = @rooms - unavailable_rooms + return available_rooms - end - def make_resevation(datarange) + end - available_rooms = get_available_rooms(datarange) + def make_resevation(date_range) - if available_rooms.empty? - return raise ArgumentError - else - new_reservation = Hotel::Reservation.new(datarange,available_rooms[0]) - @reservations << new_reservation - return new_reservation + available_rooms = get_available_rooms(date_range) + if available_rooms.length < 1 + raise ArgumentError end + + new_reservation = Hotel::Reservation.new(date_range,available_rooms[0]) + @reservations << new_reservation + return new_reservation end def reservations_by_date(date) @@ -55,11 +57,30 @@ def reservations_by_date(date) end return total_by_date end + + def reservations_by_room_date (room, date_range) + + rooms = @reservations.select do |reveservation| + reveservation.room.room_id == room + end + + reservations_by_room = rooms.select do |reservation| + reservation.daterange == date_range + end + + if reservations_by_room.empty? + raise ArgumentError + end + + return reservations_by_room + end def cost_by_reservation(reservation_number) cost = nil @reservations.each do |reservation| - cost = reservation.total_cost + if reservation.id == reservation_number + cost = reservation.total_cost + end end return cost end From 54ee1ed64e8140a06cd973aa731f4cb10beaee23 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 8 Mar 2020 17:21:20 -0700 Subject: [PATCH 19/32] Updating incorrect format test --- test/data_range_test.rb | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/test/data_range_test.rb b/test/data_range_test.rb index e8be6b2af..c87e753f5 100644 --- a/test/data_range_test.rb +++ b/test/data_range_test.rb @@ -37,17 +37,15 @@ end - it "Raises an error for incorrect dates format" do - start_date = Date.new(2) - end_date = Date.new(290,2) + it "raises an error for incorrect dates format" do + start_date = "" + end_date = "" - expect { - Hotel::DateRange.validate_date?(start_date) - }.must_raise ArgumentError + expect { Hotel::DateRange.new(start_date, end_date) }.must_raise ArgumentError - expect { - Hotel::DateRange.validate_date?(end_date) - }.must_raise ArgumentError + # expect { + # Hotel::DateRange.validate_date?(end_date) + # }.must_raise ArgumentError end end From 6ef1bab8ad3f693e7963f97078e34e932a1d6041 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 8 Mar 2020 17:23:04 -0700 Subject: [PATCH 20/32] Test for not available rooms, test for reservations by room and date_range --- test/front_desk_test.rb | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index dc86fd5fd..78ed1560a 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -6,7 +6,7 @@ @date = Date.new(2020,05,21) start_date = @date end_date = start_date + 2 - @datarange = Hotel::DateRange.new(start_date,end_date) + @date_range = Hotel::DateRange.new(start_date,end_date) end describe "Wave number 1" do @@ -19,22 +19,31 @@ rooms = @front_desk.room_list.length expect(rooms).must_be :>, 1 end + + it "raises an error if there are not available rooms" do + 20.times do + new_reservation = @front_desk.make_resevation(@date_range) + end + expect{ @front_desk.make_resevation(@date_range) }.must_raise ArgumentError + end end - # Desribed + describe "make_resevation" do it "Returns a new resevation" do - new_reservation = @front_desk.make_resevation(@datarange) + new_reservation = @front_desk.make_resevation(@date_range) expect(new_reservation).must_be_kind_of Hotel::Reservation end end describe "Reservations" do it "returns an array of reservations" do - reservations = @front_desk.reservations - expect(reservations).must_be_kind_of Array + reservations = @front_desk.total_reservations + reservations.each do |reservation| reservation.must_be_kind_of Reservation end + + expect(reservations).must_be_kind_of Array end end @@ -46,18 +55,26 @@ end end + describe "reservations_by_room_date" do + it "returns a list of reservations for a specified room and a given date range" do + new_reservation = @front_desk.make_resevation(@date_range) + search = @front_desk.reservations_by_room_date(1, @date_range) + expect(search).must_be_kind_of Array + end + end + + it "raises an error if there are not reservations for a specified room and a given date range" do + expect{ @front_desk.reservations_by_room_date(3, @date_range) }.must_raise ArgumentError + end + + describe "Cost_by_reservation" do it "returns the total cost for a given reservation" do - new_reservation = @front_desk.make_resevation(@datarange) + new_reservation = @front_desk.make_resevation(@date_range) reserv_id = new_reservation.id cost = @front_desk.cost_by_reservation(reserv_id) expect(cost).must_be_close_to 400, 0.01 end end - - end - - - -end +end \ No newline at end of file From 18338dd64763688e8f3207827394b17533a51c0c Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 8 Mar 2020 18:00:37 -0700 Subject: [PATCH 21/32] Refactoring and comments --- test/front_desk_test.rb | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 78ed1560a..6f8222aa2 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -1,6 +1,7 @@ require_relative 'test_helper' describe Hotel::FrontDesk do + # Intance of front_desk and date_range created before. Use them later to test. before do @front_desk = Hotel::FrontDesk.new @date = Date.new(2020,05,21) @@ -15,12 +16,14 @@ rooms = @front_desk.room_list expect(rooms).must_be_kind_of Array end - it "Raises an error if the array of rooms it is empty" do + + it "raises an error if the array of rooms it is empty" do rooms = @front_desk.room_list.length expect(rooms).must_be :>, 1 end it "raises an error if there are not available rooms" do + # 20 rooms created to test the case with not available dates. 20.times do new_reservation = @front_desk.make_resevation(@date_range) end @@ -36,45 +39,46 @@ end describe "Reservations" do + # New reservations created before to use in all cases of reservations. + before do + @new_reservation = @front_desk.make_resevation(@date_range) + end + it "returns an array of reservations" do reservations = @front_desk.total_reservations - + # Every reservation within the array should be a instance of reservation. reservations.each do |reservation| - reservation.must_be_kind_of Reservation + reservation.must_be_kind_of Hotel::Reservation end - expect(reservations).must_be_kind_of Array end - end - describe "Reservations_by_date" do it "returns an a array of reservations by date" do - date = Date.new(2017,12,04) + date = Date.new(2020,05,21) total_by_date = @front_desk.reservations_by_date(date) expect(total_by_date).must_be_kind_of Array end - end - describe "reservations_by_room_date" do + it "raises an error if there are not reservations by a specific date" do + date = Date.new(2020,05,22) + expect{ @front_desk.reservations_by_date(date) }.must_raise ArgumentError + end + it "returns a list of reservations for a specified room and a given date range" do - new_reservation = @front_desk.make_resevation(@date_range) search = @front_desk.reservations_by_room_date(1, @date_range) expect(search).must_be_kind_of Array end - end - it "raises an error if there are not reservations for a specified room and a given date range" do - expect{ @front_desk.reservations_by_room_date(3, @date_range) }.must_raise ArgumentError - end - + it "raises an error if there are not reservations for a specified room and a given date range" do + expect{ @front_desk.reservations_by_room_date(3, @date_range) }.must_raise ArgumentError + end - describe "Cost_by_reservation" do it "returns the total cost for a given reservation" do - new_reservation = @front_desk.make_resevation(@date_range) - reserv_id = new_reservation.id + reserv_id = @new_reservation.id cost = @front_desk.cost_by_reservation(reserv_id) expect(cost).must_be_close_to 400, 0.01 end + end end end \ No newline at end of file From 5537aee3ddfcd71695606c9f3ed7739bc2501a59 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 8 Mar 2020 21:22:59 -0700 Subject: [PATCH 22/32] Comments and code organizing --- lib/front_desk.rb | 64 +++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 351585aa2..4c715ea2b 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -24,65 +24,69 @@ def total_reservations return @reservations end + def get_available_rooms(date_range) unavailable_rooms = [] - + # Send the room to unavailable rooms if has a reservation for a specific data_range. @reservations.each do |reservation| if reservation.daterange.overlap?(date_range) == true unavailable_rooms << reservation.room end end - + # Array substrating total_rooms minus unavailable rooms. available_rooms = @rooms - unavailable_rooms - return available_rooms - end - def make_resevation(date_range) + def reservations_by_room_date (room, date_range) + # Rooms contains all the reservations match based on the room given. + rooms = @reservations.select do |reveservation| + reveservation.room.room_id == room + end + reservations_by_room = rooms.select do |reservation| + reservation.daterange == date_range + end - available_rooms = get_available_rooms(date_range) - if available_rooms.length < 1 + if reservations_by_room.empty? raise ArgumentError end - new_reservation = Hotel::Reservation.new(date_range,available_rooms[0]) - @reservations << new_reservation - return new_reservation + return reservations_by_room end def reservations_by_date(date) total_by_date = @reservations.select do |reservation| - reservation.start_date == date + reservation.daterange.start_date == date + end + + if total_by_date.empty? + raise ArgumentError end return total_by_date end - - def reservations_by_room_date (room, date_range) - rooms = @reservations.select do |reveservation| - reveservation.room.room_id == room - end + def cost_by_reservation(reservation_number) + cost = nil + @reservations.each do |reservation| + if reservation.id == reservation_number + cost = reservation.total_cost + end + end + return cost + end - reservations_by_room = rooms.select do |reservation| - reservation.daterange == date_range - end + def make_resevation(date_range) - if reservations_by_room.empty? + available_rooms = get_available_rooms(date_range) + if available_rooms.length < 1 raise ArgumentError end - return reservations_by_room + new_reservation = Hotel::Reservation.new(date_range,available_rooms[0]) + @reservations << new_reservation + return new_reservation end - def cost_by_reservation(reservation_number) - cost = nil - @reservations.each do |reservation| - if reservation.id == reservation_number - cost = reservation.total_cost - end - end - return cost - end + end end \ No newline at end of file From 4bc07a8c98f1f62ae1ccfff3941c252270b99ec6 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 8 Mar 2020 21:36:03 -0700 Subject: [PATCH 23/32] Cleaning comments and puts --- lib/date_range.rb | 5 ----- lib/front_desk.rb | 2 -- lib/room.rb | 3 --- 3 files changed, 10 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 11409f5d7..fef9e6e52 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -20,7 +20,6 @@ def overlap?(input_range) else return true end - end def include?(input_range) @@ -33,8 +32,6 @@ def nights end private - - def self.validate_date?(start_date, end_date) @@ -49,5 +46,3 @@ def self.validate_date?(start_date, end_date) end end end -# a = Hotel::DateRange.new("2015-10-10","2015-10-10") -# p a \ No newline at end of file diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 4c715ea2b..60c61d73d 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -86,7 +86,5 @@ def make_resevation(date_range) @reservations << new_reservation return new_reservation end - - end end \ No newline at end of file diff --git a/lib/room.rb b/lib/room.rb index e40354b91..4cbf35a00 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -14,6 +14,3 @@ def cost end end end - -# a = Hotel::Room.new(1) -# p a.cost From 6754ecb9b60c8385821e0700918ff96a39cfee21 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 8 Mar 2020 21:36:37 -0700 Subject: [PATCH 24/32] Debbuger Json --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5e1422c9c..74ba0d4bb 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ build-iPhoneSimulator/ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc +.vscode \ No newline at end of file From 93145f23b141d6726247270d4153b6ee91c5de1a Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 9 Mar 2020 00:05:52 -0700 Subject: [PATCH 25/32] Overlap? refactoring and comments --- lib/date_range.rb | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index fef9e6e52..eee174b54 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -10,20 +10,13 @@ def initialize(start_date, end_date) @end_date = end_date end + # An input range given will not be part of any other date_range + # It returns true if there is an overlap or false if there is not. + # input_range = Hotel::DataRange instance. def overlap?(input_range) - a = self.start_date >= input_range.end_date b = self.end_date <= input_range.start_date - - if a || b - return false - else - return true - end - end - - def include?(input_range) - + return a || b ? false : true end def nights @@ -32,7 +25,9 @@ def nights end private - + # validate_date? validates that start and end date have valid format. + # start date cannot be after the end date + # Exception raised when an invalid date range is provided def self.validate_date?(start_date, end_date) date_format = '%Y-%m-%d' @@ -40,9 +35,13 @@ def self.validate_date?(start_date, end_date) raise ArgumentError end - if start_date > end_date || start_date - end_date == 0 + if start_date > end_date raise ArgumentError.new("The end time is before the start time.") end + + if start_date - end_date == 0 + raise ArgumentError.new("Start date and end date are the same.") + end end end end From c103e390ef36de4d82d744780ce1a230226e3595 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 9 Mar 2020 00:06:52 -0700 Subject: [PATCH 26/32] Client class not used --- lib/client.rb | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 lib/client.rb diff --git a/lib/client.rb b/lib/client.rb deleted file mode 100644 index 3c14b5cd3..000000000 --- a/lib/client.rb +++ /dev/null @@ -1,12 +0,0 @@ - -module Hotel - class Client - attr_reader :id, :name, :phone_number - - def initialize(id, name, phone_number) - @id = id - @name = name - @phone_number = phone_number - end - end -end \ No newline at end of file From aa930c5ac3977d89076c1c973718d2d0a631bee4 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 9 Mar 2020 00:08:06 -0700 Subject: [PATCH 27/32] refactoring get_available_rooms, reservations_by_date_room and refactoring and comments --- lib/front_desk.rb | 50 +++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 60c61d73d..20311c992 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -24,64 +24,64 @@ def total_reservations return @reservations end - + # list of rooms that are not reserved for a given date range, + # so that I can see all available rooms for that day. + # It retuns an arrary with rooms with not reservations with a given date. def get_available_rooms(date_range) unavailable_rooms = [] - # Send the room to unavailable rooms if has a reservation for a specific data_range. + # Send the room to unavailable rooms if room has a reservation for a specific data_range. @reservations.each do |reservation| if reservation.daterange.overlap?(date_range) == true unavailable_rooms << reservation.room end end # Array substrating total_rooms minus unavailable rooms. - available_rooms = @rooms - unavailable_rooms - return available_rooms + return @rooms - unavailable_rooms end - def reservations_by_room_date (room, date_range) - # Rooms contains all the reservations match based on the room given. - rooms = @reservations.select do |reveservation| - reveservation.room.room_id == room + # The list of reservations for a specified room and a given date range. + # room = room_i d. + # date_range = data_range instance. + # It returns an array of reservation. + def reservations_by_room_date (room_number, date_range) + # reservations_by_room contains all the reservations match + # based on the room and a given date range. + reservations_by_room = @reservations.select do |reservation| + reservation.room.room_id == room_number && + reservation.daterange.overlap?(date_range) end - reservations_by_room = rooms.select do |reservation| - reservation.daterange == date_range - end - - if reservations_by_room.empty? - raise ArgumentError - end - return reservations_by_room end + # It returns an array with the list of reservations for a specific date. + # date = date instance. def reservations_by_date(date) total_by_date = @reservations.select do |reservation| reservation.daterange.start_date == date end - - if total_by_date.empty? - raise ArgumentError - end return total_by_date end + # Get the total cost for a given reservation + # reservation_number = reservartion_id + # It returns nil if reservation id not found. def cost_by_reservation(reservation_number) - cost = nil @reservations.each do |reservation| if reservation.id == reservation_number - cost = reservation.total_cost + return reservation.total_cost end end - return cost + return nil end + # Make a reservation of a room for a given date range, + # and that room will not be part of any other reservation overlapping that date range + # an exception raised if I try to reserve a room during a date range when all rooms are reserved. def make_resevation(date_range) - available_rooms = get_available_rooms(date_range) if available_rooms.length < 1 raise ArgumentError end - new_reservation = Hotel::Reservation.new(date_range,available_rooms[0]) @reservations << new_reservation return new_reservation From c53640c579bcf58b49e4cd0afcd0b9af7f092a17 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 9 Mar 2020 00:08:43 -0700 Subject: [PATCH 28/32] Refactoring geretate_id and comments --- lib/reservation.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 7d5adbce6..d4f289ba7 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -12,14 +12,14 @@ def initialize(daterange, room) @room = room @id = generate_id end - + + # It retuns a secureRandom ID per each reservation made. def generate_id - id = SecureRandom.hex(5) + return SecureRandom.hex(5) end def total_cost - total_cost = (daterange.nights * @room.cost) - return total_cost + return daterange.nights * @room.cost end end end \ No newline at end of file From d7bf771a33c54237addd91388f768f63680f82d5 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 9 Mar 2020 00:09:13 -0700 Subject: [PATCH 29/32] Cost method deleted --- lib/room.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/room.rb b/lib/room.rb index 4cbf35a00..3a3215543 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -8,9 +8,5 @@ def initialize(room_id, capacity: 2, cost: 200) @capacity = capacity @cost = cost end - - def cost - return @cost - end end end From 4135156e9c92c6c27bb7ac20f790cd965e44b873 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 9 Mar 2020 00:10:23 -0700 Subject: [PATCH 30/32] total cost change must_equal, List of reservations for a specified room and a given date range test --- test/front_desk_test.rb | 62 +++++++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb index 6f8222aa2..22cbaa2af 100644 --- a/test/front_desk_test.rb +++ b/test/front_desk_test.rb @@ -59,26 +59,60 @@ expect(total_by_date).must_be_kind_of Array end - it "raises an error if there are not reservations by a specific date" do - date = Date.new(2020,05,22) - expect{ @front_desk.reservations_by_date(date) }.must_raise ArgumentError + it "returns the total cost for a given reservation" do + reserv_id = @new_reservation.id + cost = @front_desk.cost_by_reservation(reserv_id) + expect(cost).must_equal 400 end - it "returns a list of reservations for a specified room and a given date range" do - search = @front_desk.reservations_by_room_date(1, @date_range) - expect(search).must_be_kind_of Array + it "returns nil if reservation id not found" do + reserv_id = "fake_id" + cost = @front_desk.cost_by_reservation(reserv_id) + expect(cost).must_equal nil end + end - it "raises an error if there are not reservations for a specified room and a given date range" do - expect{ @front_desk.reservations_by_room_date(3, @date_range) }.must_raise ArgumentError - end + describe "List of reservations for a specified room and a given date range" do + it "returns a list of reservations for a specified room and a given date range" do + start_date = Date.new(2016,2,01) + end_date = Date.new(2016,2,03) + date_range = Hotel::DateRange.new(start_date,end_date) + reservation1 = @front_desk.make_resevation(date_range) - it "returns the total cost for a given reservation" do - reserv_id = @new_reservation.id - cost = @front_desk.cost_by_reservation(reserv_id) - expect(cost).must_be_close_to 400, 0.01 - end + start_date = Date.new(2016,2,04) + end_date = Date.new(2016,2,06) + date_range = Hotel::DateRange.new(start_date,end_date) + reservation2 = @front_desk.make_resevation(date_range) + + start_date = Date.new(2016,2,07) + end_date = Date.new(2016,2,9) + date_range = Hotel::DateRange.new(start_date,end_date) + reservation3 = @front_desk.make_resevation(date_range) + + start_date = Date.new(2016,2,10) + end_date = Date.new(2016,2,15) + date_range = Hotel::DateRange.new(start_date,end_date) + reservation4 = @front_desk.make_resevation(date_range) + start_date = Date.new(2016,2,16) + end_date = Date.new(2016,2,18) + date_range = Hotel::DateRange.new(start_date,end_date) + reservation5 = @front_desk.make_resevation(date_range) + + start_date = Date.new(2016,2,05) + end_date = Date.new(2016,2,13) + + date_range2 = Hotel::DateRange.new(start_date,end_date) + + search = @front_desk.reservations_by_room_date(1, date_range2) + reservations = search.length + # It returns an array with 3 Reservation instances. + expect(search).must_be_kind_of Array + expect(reservations).must_equal 3 + expect(reservation2).must_be_same_as search[0] + expect(reservation3).must_be_same_as search[1] + expect(reservation4).must_be_same_as search[2] + end end end end \ No newline at end of file From b01c32790baa5b0e2eaf3791a81ce2473a1c5117 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 9 Mar 2020 09:11:16 -0700 Subject: [PATCH 31/32] raises an error for incorrect dates format code organizing --- test/data_range_test.rb | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/test/data_range_test.rb b/test/data_range_test.rb index c87e753f5..4834dc34c 100644 --- a/test/data_range_test.rb +++ b/test/data_range_test.rb @@ -41,11 +41,9 @@ start_date = "" end_date = "" - expect { Hotel::DateRange.new(start_date, end_date) }.must_raise ArgumentError - - # expect { - # Hotel::DateRange.validate_date?(end_date) - # }.must_raise ArgumentError + expect { + Hotel::DateRange.new(start_date, end_date) + }.must_raise ArgumentError end end From d5dfde7a712090fa86e8886c6b634ce822fa4caa Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 9 Mar 2020 14:01:59 -0700 Subject: [PATCH 32/32] Answer question --- .github/PULL_REQUEST_TEMPLATE | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index 809125482..2f23a43c9 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -5,9 +5,9 @@ Congratulations! You're submitting your assignment. Please reflect on the assign ## Reflection Question | Answer :------------- | :------------- -What was a design challenge that you encountered on this project? | -What was a design decision you made that changed over time over the project? | -What was a concept you gained clarity on, or a learning that you'd like to share? | -What is an example of a _nominal test_ that you wrote for this assignment? What makes it a nominal case? | -What is an example of an _edge case test_ that you wrote for this assignment? What makes it an edge case? | -How do you feel you did in writing pseudocode first, then writing the tests and then the code? | \ No newline at end of file +What was a design challenge that you encountered on this project? | Try to think of each class and have each one follow the principle of single responsibility. It was very difficult to think if it was too big, or if I was giving responsibilities that were not of the class or the method. +What was a design decision you made that changed over time over the project? | I thought of creating a class that would be called client but then I didn't use it. Also at the beginning I didn't have a room class and then I decided to include it. +What was a concept you gained clarity on, or a learning that you'd like to share? | Interact with classes and understand what an instance looks like. +What is an example of a _nominal test_ that you wrote for this assignment? What makes it a nominal case? | Test out the list of rooms. It is nominal because It was the basic-minimun thing my hotel structure should show. +What is an example of an _edge case test_ that you wrote for this assignment? What makes it an edge case? | Test out all the possible overlaps. Especially to test when an end_date reservation was the same as the start_date of a new reservation. +How do you feel you did in writing pseudocode first, then writing the tests and then the code? | It was easy at the beginning, drawing the classes and their responsibility, was pretty useful. For the last methods to write the tests at first it became complicated, to think about what results I wanted and how to write a real test, that really test what I want or what I expect.