diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 000000000..9e73d9cb4 Binary files /dev/null and b/.DS_Store differ diff --git a/lib/block.rb b/lib/block.rb new file mode 100644 index 000000000..556549da8 --- /dev/null +++ b/lib/block.rb @@ -0,0 +1,47 @@ +module Hotel + class Block < DateRange + attr_reader :reservations, :rate + def initialize(start_date, end_date, rooms, rate) + if rooms.length > 5 + raise ArgumentError.new("Blocks can only be made for 5 rooms or less.") + end + super(start_date, end_date) + range = DateRange.new(start_date, end_date) + if rooms.any? { |room| !(room.available?(range))} + raise ArgumentError.new("One or more of the rooms is not available at given date range.") + end + @rate = rate + @reservations = [] + @available_rooms = rooms + @available_rooms.each do |room| + room.add(self) + end + end + + def reserve(room) + if !(@available_rooms.include?(room)) + raise ArgumentError.new("Room #{room.id} is not in this Block.") + end + if @available_rooms.all?{|r| r == nil} + raise ArgumentError.new("All rooms in block are already reserved.") + end + new_res = Reservation.new(start_date, end_date, room.id, rate) + self.reservations << new_res + + # finds the block in room's reservations, turns it into a reservation + i = room.reservations.find_index {|reservation| + reservation.nights == self.nights + } + room.reservations[i] = new_res + j = @available_rooms.find_index {|r| + r == room + } + @available_rooms[j] = nil + end + + def available_rooms + return @available_rooms.find_all {|room| room != nil} + end + + end +end \ No newline at end of file diff --git a/lib/date_range.rb b/lib/date_range.rb new file mode 100644 index 000000000..1df1f5fbb --- /dev/null +++ b/lib/date_range.rb @@ -0,0 +1,49 @@ +require 'date' +module Hotel + class InvalidDateError < StandardError + + end + class DateRange + attr_reader :start_date, :end_date, :nights + + def initialize(start_date, end_date) + if !(start_date.instance_of?(Date) || end_date.instance_of?(Date)) + raise InvalidDateError.new("End and start dates must be instances of Date.") + else + @start_date = start_date + @end_date = end_date + end + if @end_date - @start_date <= 0 + raise InvalidDateError.new("End date must be after start date.") + end + @nights = Array.new((@end_date - @start_date).to_i) + @nights[0] = @start_date + index = 1 + + while @nights.last == nil + @nights[index] = @start_date + index + index += 1 + end + + end + + def overlap?(other) + other.nights.each do |night| + if self.include? night + return true + end + end + return false + end + + + def include?(date) + return nights.include? date + end + + def num_nights + return nights.length + end + + end +end diff --git a/lib/front_desk.rb b/lib/front_desk.rb new file mode 100644 index 000000000..58a31ddf5 --- /dev/null +++ b/lib/front_desk.rb @@ -0,0 +1,56 @@ +module Hotel + class FrontDesk + attr_reader :rooms + def initialize + @rooms = [] + # Refactor: custom range - rooms. Rooms include Comparable, and implement succ and <=> + # See range doc + (1..20).each do |n| + @rooms << Room.new(n) + end + end + + def reserve_room(start_date, end_date) + date_range = Hotel::DateRange.new(start_date, end_date) + room = find_room(date_range) + return room.add(date_range) + end + + def get_avail_rooms(start_date, end_date) + date_range = Hotel::DateRange.new(start_date, end_date) + avail_rooms = rooms.find_all { |room| + room.available?(date_range) + } + return avail_rooms + end + + def get_reservations(date) + reservations_at_date = [] + rooms.each do |room| + room.reservations.each do |reservation| + if reservation.include?(date) && reservation.class != Block + reservations_at_date << reservation + end + end + end + return reservations_at_date + end + + private + def find_room(date_range) + room = rooms.find {|r| + r.reservations.length == 0 + } + if room == nil + room = rooms.find {|r| + r.available?(date_range) + } + end + if room == nil + raise ArgumentError.new("No rooms are availble in that date range.") + end + return room + end + + end +end diff --git a/lib/reservation.rb b/lib/reservation.rb new file mode 100644 index 000000000..77f45090c --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,11 @@ +require_relative 'date_range' +module Hotel + class Reservation < DateRange + attr_reader :cost, :room + def initialize(start_date, end_date, room, rate= 200) + super(start_date, end_date) + @room = room + @cost = self.num_nights * rate + end + end +end diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..3cdfd8045 --- /dev/null +++ b/lib/room.rb @@ -0,0 +1,46 @@ +module Hotel + class Room + attr_reader :id, :reservations, :room_rate + + def initialize(id, room_rate=200) + @id = id + @reservations = [] + @room_rate = room_rate + end + + # is available for a specific reservation or a general date range + def available?(date_range) + if reservations.length == 0 + return true + end + if reservations.any? {|r| r.overlap?(date_range)} + return false + else + return true + end + end + + def add(date_range) + if date_range.class != Reservation && date_range.class != Block + reservation = Reservation.new(date_range.start_date, date_range.end_date, self.id, room_rate) + else + reservation = date_range + end + if self.available?(reservation) + @reservations << reservation + else + raise ArgumentError.new("Room #{self.id} isn't available for that reservation.") + end + return reservation + end + + def get_reservations(start_date, end_date) + range = DateRange.new(start_date, end_date) + resv_within = reservations.find_all {|reservation| + reservation.nights.all? {|night| range.include?(night)} + } + return resv_within + end + + end +end diff --git a/refactor.txt b/refactor.txt new file mode 100644 index 000000000..5d682ef8d --- /dev/null +++ b/refactor.txt @@ -0,0 +1,4 @@ +* Create consistent convention for when to use date_range or start_date, end_date as parameters +* Create RoomNotAvailableError Class +* Map out everywhere that Room#availble? is used - there is redundancy here. +* Figure out why block_test.rb is not included in coverage file diff --git a/test/.DS_Store b/test/.DS_Store new file mode 100644 index 000000000..058d1facc Binary files /dev/null and b/test/.DS_Store differ diff --git a/test/block_test.rb b/test/block_test.rb new file mode 100644 index 000000000..6e7ca8c2f --- /dev/null +++ b/test/block_test.rb @@ -0,0 +1,109 @@ +require_relative "test_helper" + +describe Hotel::Block do + before do + @fd = Hotel::FrontDesk.new + @rooms = @fd.rooms.slice(0,5) + @start = Date.new(2020, 01, 01) + @end = Date.new(2020, 01, 07) + @rate = 153 + end + + describe "constructor" do + describe "has all the expected state" do + it "rooms" do + block = Hotel::Block.new(@start, @end, @rooms, @rate) + expect(block.available_rooms).must_be_kind_of Array + avail_rooms = block.available_rooms + avail_rooms.each_with_index do |room, i| + expect(room).must_equal @rooms[i] + end + end + it "reservations" do + block = Hotel::Block.new(@start, @end, @rooms, @rate) + expect(block.reservations).must_be_kind_of Array + end + end + it "raises error if a room in rooms is not available" do + @rooms[4].add(Hotel::Reservation.new(@start, @end, 5, 150)) + expect{Hotel::Block.new(@start, @end, @rooms, @rate)}.must_raise ArgumentError + end + it "raises an error if rooms is > 5" do + @rooms << Hotel::Room.new(6) + expect{Hotel::Block.new(@start, @end, @rooms, @rate)}.must_raise ArgumentError + end + it "reflects changes in rooms included in block" do + block = Hotel::Block.new(@start, @end, @rooms, @rate) + @rooms.each do |room| + expect(room.reservations.include?(block)).must_equal true + end + end + + end + + describe "reserve(room)" do + it "raises error if attempting to reserve a room not in block" do + block = Hotel::Block.new(@start, @end, @rooms, @rate) + expect{block.reserve(Hotel::Room.new(20))}.must_raise ArgumentError + end + + it "reflects changes in class state: reservations" do + block = Hotel::Block.new(@start, @end, @rooms, @rate) + @rooms.each do |room| + block.reserve(room) + end + block.reservations.each_with_index do |reservation, i| + expect(reservation.room).must_equal i + 1 + end + end + + it "reserved room no longer has the block in their reservations, but a reservation instead" do + block = Hotel::Block.new(@start, @end, @rooms, @rate) + @rooms.each do |room| + block.reserve(room) + expect(room.reservations.any?(Hotel::Block)).must_equal false + end + + end + it "won't let another block be formed on the same rooms with overlapping range" do + Hotel::Block.new(@start, @end, @rooms, @rate) + start2 = Date.new(2020, 01, 03) + end2 = Date.new(2020, 01, 15) + expect{Hotel::Block.new(start2, end2, @rooms, @rate)}.must_raise ArgumentError + end + it "won't erase another block in making room's block>reservation change" do + block = Hotel::Block.new(@start, @end, @rooms, @rate) + start2 = Date.new(2020, 02, 01) + end2 = Date.new(2020, 02, 28) + block2 = Hotel::Block.new(start2, end2, @rooms, @rate) + @rooms.each do |room| + block.reserve(room) + expect(room.reservations.find{|r| r.class == Hotel::Block}).must_equal block2 + end + end + it "removes room from available_rooms" do + block = Hotel::Block.new(@start, @end, @rooms, @rate) + @rooms.each_with_index do |room, i| + block.reserve(room) + expect(block.available_rooms.any?{|r| r == room }).must_equal false + end + end + it "effectively adds discounted rate to reservation" do + block = Hotel::Block.new(@start, @end, @rooms, @rate) + @rooms.each_with_index do |room, i| + block.reserve(room) + end + block.reservations.each do |r| + expect(r.cost % 153 == 0).must_equal true + end + end + it "raises error if all rooms are booked" do + block = Hotel::Block.new(@start, @end, @rooms, @rate) + @rooms.each_with_index do |room, i| + block.reserve(room) + end + expect{block.reserve(@rooms[0])}.must_raise ArgumentError + end + end + +end \ No newline at end of file diff --git a/test/date_range_test.rb b/test/date_range_test.rb new file mode 100755 index 000000000..3edaa9576 --- /dev/null +++ b/test/date_range_test.rb @@ -0,0 +1,165 @@ +require_relative "test_helper" + +describe Hotel::DateRange do + describe "consructor" do + it "Can be initialized with two dates" do + start_date = Date.new(2017, 01, 01) + end_date = start_date + 3 + + range = Hotel::DateRange.new(start_date, end_date) + + expect(range.start_date).must_equal start_date + expect(range.end_date).must_equal end_date + end + + it "raises error for arguments that are not instances of Date" do + expect{Hotel::DateRange.new("3rd Feb 2017", "4th Feb 2017")}.must_raise Hotel::InvalidDateError + end + + it "is an an error for negative-length ranges" do + start_date = Date.new(2017, 01, 01) + end_date = start_date - 3 + expect{Hotel::DateRange.new(start_date, end_date)}.must_raise Hotel::InvalidDateError + end + + it "is an error to create a 0-length range" do + start_date = Date.new(2017, 01, 01) + end_date = start_date + expect{Hotel::DateRange.new(start_date, end_date)}.must_raise Hotel::InvalidDateError + 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 + + it "returns true for a contained range" do + cont_start = Date.new(2017, 01, 02) + cont_end = Date.new(2017, 01, 03) + contained_range = Hotel::DateRange.new(cont_start, cont_end) + expect(@range.overlap?(contained_range)).must_equal true + end + + it "returns true for a range that overlaps in front" do + cont_start = Date.new(2016, 12, 31) + cont_end = Date.new(2017, 01, 02) + contained_range = Hotel::DateRange.new(cont_start, cont_end) + expect(@range.overlap?(contained_range)).must_equal true + end + + it "returns true for a range that overlaps in the back" do + cont_start = Date.new(2017, 01, 03) + cont_end = Date.new(2017, 01, 07) + contained_range = Hotel::DateRange.new(cont_start, cont_end) + expect(@range.overlap?(contained_range)).must_equal true + end + + it "returns true for a containing range" do + cont_start = Date.new(2016, 12, 30) + cont_end = Date.new(2017, 01, 07) + contained_range = Hotel::DateRange.new(cont_start, cont_end) + expect(@range.overlap?(contained_range)).must_equal true + end + + it "returns false for a range starting on the end_date date" do + cont_start = Date.new(2017, 01, 04) + cont_end = Date.new(2017, 01, 07) + contained_range = Hotel::DateRange.new(cont_start, cont_end) + expect(@range.overlap?(contained_range)).must_equal false + end + + it "returns false for a range ending on the start_date date" do + cont_start = Date.new(2016, 12, 29) + cont_end = Date.new(2017, 01, 01) + contained_range = Hotel::DateRange.new(cont_start, cont_end) + expect(@range.overlap?(contained_range)).must_equal false + end + + it "returns false for a range completely before" do + cont_start = Date.new(2016, 12, 25) + cont_end = Date.new(2016, 12, 31) + contained_range = Hotel::DateRange.new(cont_start, cont_end) + expect(@range.overlap?(contained_range)).must_equal false + end + + it "returns false for a date completely after" do + cont_start = Date.new(2017, 12, 25) + cont_end = Date.new(2017, 12, 31) + contained_range = Hotel::DateRange.new(cont_start, cont_end) + expect(@range.overlap?(contained_range)).must_equal false + end + end + + describe "include?" 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 "reutrns false if the date is clearly out" do + target = Date.new(2016, 01, 01) + expect(@range.include?(target)).must_equal false + end + + it "returns true for dates in the range" do + target = Date.new(2017, 01, 01) + expect(@range.include?(target)).must_equal true + end + + it "returns false for the end_date date" do + target = Date.new(2016, 01, 04) + expect(@range.include?(target)).must_equal false + end + end + + describe "nights" do + it "returns the correct number of nights" do + cont_start = Date.new(2016, 12, 25) + cont_end = Date.new(2016, 12, 31) + range = Hotel::DateRange.new(cont_start, cont_end) + expect(range.num_nights).must_equal 6 + + cont_start = Date.new(2016, 12, 29) + cont_end = Date.new(2017, 01, 01) + range = Hotel::DateRange.new(cont_start, cont_end) + expect(range.num_nights).must_equal 3 + + cont_start = Date.new(2017, 01, 04) + cont_end = Date.new(2017, 01, 07) + range = Hotel::DateRange.new(cont_start, cont_end) + expect(range.num_nights).must_equal 3 + + cont_start = Date.new(2016, 12, 30) + cont_end = Date.new(2017, 01, 07) + range = Hotel::DateRange.new(cont_start, cont_end) + expect(range.num_nights).must_equal 8 + + cont_start = Date.new(2016, 12, 31) + cont_end = Date.new(2017, 01, 02) + range = Hotel::DateRange.new(cont_start, cont_end) + expect(range.num_nights).must_equal 2 + + cont_start = Date.new(2017, 01, 02) + cont_end = Date.new(2017, 01, 03) + range = Hotel::DateRange.new(cont_start, cont_end) + expect(range.num_nights).must_equal 1 + + cont_start = Date.new(2017, 01, 01) + cont_end = Date.new(2017, 02, 01) + range = Hotel::DateRange.new(cont_start, cont_end) + expect(range.num_nights).must_equal 31 + + end + end +end diff --git a/test/front_desk_test.rb b/test/front_desk_test.rb new file mode 100755 index 000000000..b7a680ebe --- /dev/null +++ b/test/front_desk_test.rb @@ -0,0 +1,117 @@ +require_relative "test_helper" +# to do: refactor for more clarity - ex - @fd & @front_desk +describe Hotel::FrontDesk do + before do + @front_desk = Hotel::FrontDesk.new + @date = Date.parse("2020-08-04") + end + + describe "rooms" do + it "returns a list" do + rooms = @front_desk.rooms + expect(rooms).must_be_kind_of Array + end + end + + describe "reserve_room" do + it "takes two Date objects and adds reservation to room" do + start_date = @date + end_date = start_date + 3 + reservation = @front_desk.reserve_room(start_date, end_date) + expect(reservation).must_be_kind_of Hotel::Reservation + room = @front_desk.rooms.find {|r| r.reservations.length > 0} + expect(room.reservations.include? reservation).must_equal true + end + + it "successfully reserves a room when all rooms have at least one reservation" do + (1..20).each do + @front_desk.reserve_room(Date.new(2020, 01,01), Date.new(2020,01,03)) + end + reservation21 = @front_desk.reserve_room(Date.new(2020, 01,03), Date.new(2020,01,04)) + room_with_21 = @front_desk.rooms.find {|room| room.reservations.length == 2} + expect(room_with_21.reservations[1]).must_equal reservation21 + end + + it "raises argument error when no rooms are available" do + (1..20).each do + @front_desk.reserve_room(Date.new(2020, 01,01), Date.new(2020,01,03)) + end + expect{@front_desk.reserve_room(Date.new(2020, 01,01), Date.new(2020,01,03))}.must_raise ArgumentError + end + + end + + describe "get_avail_rooms" do + before do + @fd = Hotel::FrontDesk.new + @res1 = @fd.reserve_room(Date.new(2020, 01,01), Date.new(2020,01,03)) + @res2 = @fd.reserve_room(Date.new(2020, 01,03), Date.new(2020,01,04)) + @res3 = @fd.reserve_room(Date.new(2020, 01,04), Date.new(2020,01,05)) + @res4 = @fd.reserve_room(Date.new(2020, 02,04), Date.new(2020,02,05)) + end + it "returns array of rooms" do + avail_rooms = @fd.get_avail_rooms(Date.new(2020, 03,01), Date.new(2020,03,31)) + expect(avail_rooms).must_be_kind_of Array + expect(avail_rooms.any?(Hotel::Room)).must_equal true + expect(avail_rooms.length).must_equal 20 + end + it "contains only rooms available at specified dates" do + rooms = @fd.get_avail_rooms(Date.new(2020, 01,01), Date.new(2020,01,31)) + expect(rooms.length).must_equal 17 + expect(rooms.any? {|room| room.reservations.include?(@res1)}).must_equal false + expect(rooms.any? {|room| room.reservations.include?(@res2)}).must_equal false + expect(rooms.any? {|room| room.reservations.include?(@res3)}).must_equal false + expect(rooms.any? {|room| room.reservations.include?(@res4)}).must_equal true + end + it "does not contain rooms with reserv's overlapping the tail end of date range" do + res5 = @fd.reserve_room(Date.new(2019, 12, 31), Date.new(2020, 01, 05)) + res6 = @fd.reserve_room(Date.new(2020, 01, 29), Date.new(2020, 02, 02)) + rooms = @fd.get_avail_rooms(Date.new(2020, 01,01), Date.new(2020,01,31)) + expect(rooms.any? {|room| room.reservations.include?(res5)}).must_equal false + expect(rooms.any? {|room| room.reservations.include?(res6)}).must_equal false + end + + end + + + describe "get_reservations" do + before do + @date = Date.new(2020, 01, 05) + @fd = Hotel::FrontDesk.new + @res1 = @fd.reserve_room(Date.new(2020, 01, 01), Date.new(2020, 01, 06)) + @res2 = @fd.reserve_room(Date.new(2020, 01, 02), Date.new(2020, 01, 07)) + @res3 = @fd.reserve_room(Date.new(2020, 01, 03), Date.new(2020, 01, 10)) + @res4 = @fd.reserve_room(Date.new(2020, 02, 04), Date.new(2020, 02, 05)) + end + + it "takes a Date and returns a list of Reservations" do + reservation_list = @fd.get_reservations(@date) + expect(reservation_list).must_be_kind_of Array + reservation_list.each do |res| + expect(res).must_be_kind_of Hotel::Reservation + end + end + + it "includes reservations that include specified date" do + + reservation_list = @fd.get_reservations(@date) + expect(reservation_list.include?(@res1)).must_equal true + expect(reservation_list.include?(@res2)).must_equal true + expect(reservation_list.include?(@res3)).must_equal true + expect(reservation_list.include?(@res4)).must_equal false + end + + it "excludes reservations with end_date equal to specified date" do + date = Date.new(2020, 01, 07) + reservation_list = @fd.get_reservations(date) + expect(reservation_list.include?(@res2)).must_equal false + expect(reservation_list.include?(@res3)).must_equal true + end + #TO DO: write this test + it "excludes blocks, but includes reservations made from block" do + + end + end + +end + diff --git a/test/reservation_test.rb b/test/reservation_test.rb new file mode 100755 index 000000000..67877b452 --- /dev/null +++ b/test/reservation_test.rb @@ -0,0 +1,26 @@ +require_relative "test_helper" + +describe Hotel::Reservation do + describe "constructor" do + start_date = Date.new(2017, 01, 01) + end_date = start_date + 3 + reservation = Hotel::Reservation.new(start_date, end_date, nil) + describe "cost" do + it "returns a number" do + expect(reservation.cost).must_be_kind_of Numeric + end + it "returns correct number" do + expect(reservation.cost).must_equal 600 + end + end + + describe "nights" do + it "returns a number" do + expect(reservation.num_nights).must_be_kind_of Numeric + end + it "returns correct number" do + expect(reservation.num_nights).must_equal 3 + end + end + end +end diff --git a/test/room_test.rb b/test/room_test.rb new file mode 100644 index 000000000..4c3914bd8 --- /dev/null +++ b/test/room_test.rb @@ -0,0 +1,86 @@ +require_relative "test_helper" + +describe Hotel::Room do + describe "constructor" do + room1 = Hotel::Room.new(1) + it "creates a room" do + expect(room1).must_be_kind_of Hotel::Room + end + it "has correct id" do + expect(room1.id).must_equal 1 + end + it "has an array called reservations" do + expect(room1.reservations).must_be_kind_of Array + end + end + describe "available? + add" do + before do + @room20 = Hotel::Room.new(20) + @reservation1 = Hotel::Reservation.new(Date.new(2020, 01,01),Date.new(2020,01,03),20) + @reservation2 = Hotel::Reservation.new(Date.new(2020, 01,01),Date.new(2020,01,04),20) + @reservation3 = Hotel::Reservation.new(Date.new(2020, 01,03),Date.new(2020,01,05),20) + @reservation4 = Hotel::Reservation.new(Date.new(2020, 02,01),Date.new(2020,02,03),20) + end + it "adds a reservation" do + @room20.add(@reservation1) + expect(@room20.reservations[0]).must_equal @reservation1 + end + it "*adds another, unconflicting reservation to room" do + @room20.add(@reservation1) + @room20.add(@reservation3) + expect(@room20.reservations[1]).must_equal @reservation3 + end + it "raises error if attempt to add overlapping reservation" do + @room20.add(@reservation1) + expect{@room20.add(@reservation2)}.must_raise ArgumentError + expect(@room20.reservations.include?(@reservation2)).must_equal false + end + it "returns false when not available" do + @room20.add(@reservation1) + expect(@room20.available?(@reservation2)).must_equal false + end + it "returns true when available" do + @room20.add(@reservation1) + expect(@room20.available?(@reservation4)).must_equal true + end + end + + describe "get_reservations(for a specific date range)" do + before do + @room15 = Hotel::Room.new(15) + @reservation1 = Hotel::Reservation.new(Date.new(2020, 01,01), Date.new(2020,01,03),15) + @reservation2 = Hotel::Reservation.new(Date.new(2020, 01,03), Date.new(2020,01,04),15) + @reservation3 = Hotel::Reservation.new(Date.new(2020, 01,04), Date.new(2020,01,05),15) + @reservation4 = Hotel::Reservation.new(Date.new(2020, 02,04), Date.new(2020,02,05),15) + @room15.add(@reservation1) + @room15.add(@reservation2) + @room15.add(@reservation3) + @room15.add(@reservation4) + end + it "returns correct reservations for specific date range" do + resvs_within = @room15.get_reservations(Date.new(2020, 01,01), Date.new(2020,01,31)) + expect(resvs_within.include? @reservation1).must_equal true + expect(resvs_within.include? @reservation2).must_equal true + expect(resvs_within.include? @reservation3).must_equal true + expect(resvs_within.include? @reservation4).must_equal false + end + it "returns an array of one reservation if only one found" do + resvs_within = @room15.get_reservations(Date.new(2020, 02,01), Date.new(2020,02,29)) + expect(resvs_within.include? @reservation4).must_equal true + end + it "doesn't include a reservation partly in the specified range" do + reservation5 = Hotel::Reservation.new(Date.new(2019, 12, 24), Date.new(2019, 12, 31), 15) + reservation6 = Hotel::Reservation.new(Date.new(2020, 01, 29), Date.new(2020, 02, 02), 15) + @room15.add(reservation5) + @room15.add(reservation6) + resvs_within = @room15.get_reservations(Date.new(2020, 01,01), Date.new(2020,01,31)) + expect(resvs_within.include? reservation5).must_equal false + expect(resvs_within.include? reservation6).must_equal false + end + it "returns empty array if none found" do + resvs_within = @room15.get_reservations(Date.new(2020, 03,01), Date.new(2020,03,31)) + expect(resvs_within.length).must_equal 0 + end + end + +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index c3a7695cf..f65a860f7 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,8 +1,17 @@ -# Add simplecov +require 'simplecov' +SimpleCov.start + require "minitest" require "minitest/autorun" require "minitest/reporters" +require "minitest/skip_dsl" +require "date" Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # require_relative your lib files here! +require_relative "../lib/front_desk.rb" +require_relative "../lib/reservation.rb" +require_relative "../lib/date_range.rb" +require_relative "../lib/room.rb" +require_relative "../lib/block.rb" \ No newline at end of file