diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 000000000..90d5adcda Binary files /dev/null and b/.DS_Store differ diff --git a/lib/hotel_block.rb b/lib/hotel_block.rb new file mode 100644 index 000000000..214b1f9eb --- /dev/null +++ b/lib/hotel_block.rb @@ -0,0 +1,35 @@ +require 'date' +require_relative 'room' +require_relative 'reservations' + +module Hotel + class HotelBlock + attr_accessor :date_in, :date_out, :number_of_rooms, :rooms_block + + @@increment_id = 1 + def initialize(date_in:,date_out:,number_of_rooms:, rooms_block:[], discounted_room_rate:) + @id = @@increment_id + @@increment_id += 1 + @date_in = date_in + @date_out = date_out + @number_of_rooms = number_of_rooms + # this range does not work, its an array of numbers + #raise argument error unless (2..5).include? number_of_rooms + @rooms_block =[] + end + + + # def room_aside_for_date_range(start_date,end_date,room) + # range = date_in...date_out + # rooms_block.each do |room_in_block| + # if room_in_block == room + # if range.include?(date) + # return :UNAVAILABLE + # end + # end + # end + # else return :AVAILABLE + # end + + end +end diff --git a/lib/hotel_manager.rb b/lib/hotel_manager.rb new file mode 100644 index 000000000..1dfd5eeca --- /dev/null +++ b/lib/hotel_manager.rb @@ -0,0 +1,123 @@ +require 'date' +require_relative 'room' +require_relative 'reservations' +require_relative 'hotel_block' + + +module Hotel + class HotelManager + attr_accessor :rooms, :blocks + + def initialize(rooms:,blocks:) + @rooms = @Hotel::Room.list_of_rooms + @blocks = [] + end + + def book_a_room(date_in,date_out,room) + if room.daterange_availability(date_in,date_out) == :AVAILABLE && (checks_room_availability_in_blocks(date_in,date_out,room) == :AVAILABLE || (get_block_overlap(date_in,date_out) == [])) + reservation = Hotel::Reservations.new(date_in: date_in , date_out: date_out, room_id: room.id, room: room) + add_a_reservation_to_room(room,reservation) + else + raise ArgumentError, 'Room is UNAVAILABLE' + end + end + + def add_a_reservation_to_room(room, reservation) + room.reservations<< reservation + end + + def list_reservations_on_specific_date(date) + list =[] + @rooms.each do |room| + unless room.specific_date_reservations(date) == [] + room.specific_date_reservations(date).each do |reservation| + list<< reservation + end + end + end + return list + end + + def list_available_rooms_on_specific_date(date) + list =[] + @rooms.each do |room| + if room.specific_date_availability(date) == [] + list<< room + end + end + return list + end + + def total_cost(reservation, rate= 200) + return reservation.total_number_of_nights_per_reservation * rate + end + + def book_a_block(date_in,date_out,numberofrooms,rate) + block = Hotel::HotelBlock.new(date_in: date_in ,date_out: date_out, number_of_rooms: numberofrooms, rooms_block: [], discounted_room_rate: rate) + add_rooms_to_block(block,numberofrooms) + @blocks<< block + return block + end + + def add_rooms_to_block(hotelblock,number_of_rooms_needed) + number_of_available_rooms = 0 + rooms.each do |room| + if room.test_overlap(hotelblock.date_in,hotelblock.date_out) == :AVAILABLE + number_of_available_rooms +=1 + end + end + if number_of_available_rooms < number_of_rooms_needed + raise ArgumentError, "Not enough room AVAILABILITY for this Block! Only #{number_of_available_rooms} AVAILABLE" + else + rooms_added = 0 + rooms.each do |room| + if room.test_overlap(hotelblock.date_in,hotelblock.date_out) == :AVAILABLE + hotelblock.rooms_block<< room + rooms_added +=1 + if rooms_added == number_of_rooms_needed + return + end + end + end + end + end + + def get_block_overlap(start_date,end_date) + overlap_block = [] + blocks.each do |block| + overlap1 = start_date >= block.date_in && start_date < block.date_out + overlap2 = end_date > block.date_in && end_date < block.date_out + overlap3 = start_date >= block.date_in && end_date < block.date_out + overlap4 = start_date <= block.date_in && end_date >= block.date_out + if (overlap1 == true) || (overlap2 == true) || (overlap3 == true) || (overlap4 == true) + overlap_block<< block + end + end + return overlap_block + end + + def checks_room_availability_in_blocks(start_date,end_date,room) + get_block_overlap(start_date,end_date).each do |block| + block.rooms_block.each do |room_in_block| + if room_in_block == room + return :UNAVAILABLE + end + end + end + return :AVAILABLE + end + + def book_a_room_in_block(hotelblock,date_in,date_out) + hotelblock.rooms_block.each do |room| + if room.daterange_availability(date_in,date_out) == :AVAILABLE || checks_room_availability_in_blocks(date_in,date_out,room) == :AVAILABLE || blocks == [] + reservation = Hotel::Reservations.new(date_in: date_in , date_out: date_out, room_id: room.id, room: room) + add_a_reservation_to_room(room,reservation) + else + raise ArgumentError, 'No Available Rooms in Block!' + end + end + end + + end +end + \ No newline at end of file diff --git a/lib/reservations.rb b/lib/reservations.rb new file mode 100644 index 000000000..20eddd22c --- /dev/null +++ b/lib/reservations.rb @@ -0,0 +1,33 @@ +require 'date' +require_relative 'room' +require_relative 'hotel_manager' + +module Hotel + class Reservations + + attr_accessor :id, :date_in, :date_out, :room_id + + @@increment_id = 1 + def initialize(date_in:, date_out:, room_id: , room: ) + @id = @@increment_id + @@increment_id += 1 + @date_in = date_in + @date_out = date_out + @room_id = room_id + @room = room + + unless date_out >= date_in + raise ArgumentError, 'you cannot have date out come before date in' + end + + if room.test_overlap(date_in,date_out) == :UNAVAILABLE + raise ArgumentError, 'there is an overlap' + end + end + + def total_number_of_nights_per_reservation + return date_out - date_in + 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..2dccbca1f --- /dev/null +++ b/lib/room.rb @@ -0,0 +1,74 @@ +require_relative 'reservations' +require 'date' + +module Hotel + class Room + attr_accessor :id, :reservations + def initialize(id:, reservations:) + @id = id + @reservations = [] + end + + def self.list_of_rooms + rooms = [] + id = 1 + 20.times do + room = Hotel::Room.new(id: id, reservations: []) + rooms << room + id += 1 + end + return rooms + end + + def list_of_reservations_for_data_range(start_date,end_date) + return reservations.select do |reservation| + overlap1 = start_date >= reservation.date_in && start_date < reservation.date_out + overlap2 = end_date > reservation.date_in && end_date < reservation.date_out + overlap3 = start_date >= reservation.date_in && end_date < reservation.date_out + overlap4 = start_date <= reservation.date_in && end_date >= reservation.date_out + + overlap1 || overlap2 || overlap3 || overlap4 + end + end + + def specific_date_reservations(date) + return reservations.select do |reservation| + range = reservation.date_in...reservation.date_out + range.include?(date) + end + end + + def daterange_availability(date_in,date_out) + if list_of_reservations_for_data_range(date_in,date_out) == [] + return :AVAILABLE + else + return :UNAVAILABLE + end + end + + def specific_date_availability(date) + list = [] + reservations.each do |reservation| + range = reservation.date_in...reservation.date_out + if range.include?(date) + list<< false + end + end + return list + end + + def test_overlap(start_date,end_date) + reservations.each do |reservation| + overlap1 = start_date >= reservation.date_in && start_date < reservation.date_out + overlap2 = end_date > reservation.date_in && end_date < reservation.date_out + overlap3 = start_date >= reservation.date_in && end_date < reservation.date_out + overlap4 = start_date <= reservation.date_in && end_date >= reservation.date_out + if (overlap1 == true) || (overlap2 == true) || (overlap3 == true) || (overlap4 == true) + return :UNAVAILABLE + end + end + return :AVAILABLE + end + + end +end \ No newline at end of file diff --git a/refactors.txt b/refactors.txt new file mode 100644 index 000000000..8ad66bed2 --- /dev/null +++ b/refactors.txt @@ -0,0 +1,3 @@ +changes I would make +1. add a date range class to clean my hotel_manager class, and room class +2. make sure what I call date_in and date_out is consistent in all tests and methods diff --git a/test/hotel_block_test.rb b/test/hotel_block_test.rb new file mode 100644 index 000000000..ead677fbc --- /dev/null +++ b/test/hotel_block_test.rb @@ -0,0 +1,22 @@ +require_relative 'test_helper' +require 'date' + + +describe "HotelBlock class" do + + describe "Initializer" do + before do + date_in1 = DateTime.new(2020,2,3.5) + date_out1 = DateTime.new(2020,2,5.5) + date_in2 = DateTime.new(2020,2,7.5) + date_out2 = DateTime.new(2020,2,14.5) + date_in3 = DateTime.new(2020,2,14.5) + date_out3 = DateTime.new(2020,2,16.5) + @block = Hotel::HotelBlock.new(date_in: date_in1,date_out: date_out1 ,number_of_rooms: (2..5), rooms_block:[],discounted_room_rate: 150) + end + + it "is an instance of FrontDesk" do + expect(@block).must_be_kind_of Hotel::HotelBlock + end + end +end \ No newline at end of file diff --git a/test/hotel_manager_test.rb b/test/hotel_manager_test.rb new file mode 100644 index 000000000..ad4efebba --- /dev/null +++ b/test/hotel_manager_test.rb @@ -0,0 +1,166 @@ +require_relative 'test_helper' +require 'date' + + +describe "HotelManager class" do + describe "Initializer" do + before do + date_in1 = DateTime.new(2020,2,3.5) + date_out1 = DateTime.new(2020,2,5.5) + date_in2 = DateTime.new(2020,2,7.5) + date_out2 = DateTime.new(2020,2,14.5) + date_in3 = DateTime.new(2020,2,14.5) + date_out3 = DateTime.new(2020,2,16.5) + @hotel = Hotel::HotelManager.new(rooms: Hotel::Room.list_of_rooms, blocks: []) + @hotel.book_a_room(date_in1,date_out1,@hotel.rooms[0]) + @hotel.book_a_room(date_in2,date_out2,@hotel.rooms[0]) + @hotel.book_a_room(date_in3,date_out3,@hotel.rooms[0]) + end + + it "is an instance of FrontDesk" do + expect(@hotel).must_be_kind_of Hotel::HotelManager + end + + it"must return a list of all its rooms" do + expect(@hotel.rooms).must_be_kind_of Array + end + + it "will raise an argument error if you try to book a room and room was unavailable" do + date_in = DateTime.new(2020,2,14.5) + date_out = DateTime.new(2020,2,16.5) + expect{@hotel.book_a_room(date_in,date_out,@hotel.rooms[0])}.must_raise ArgumentError + end + + end + + describe "rooms and reservations" do + before do + date_in1 = DateTime.new(2020,7,3.5) + date_out1 = DateTime.new(2020,7,5.5) + date_in2 = DateTime.new(2020,7,7.5) + date_out2 = DateTime.new(2020,7,14.5) + date_in3 = DateTime.new(2020,7,14.5) + date_out3 = DateTime.new(2020,7,16.5) + @hotel1 = Hotel::HotelManager.new(rooms: Hotel::Room.list_of_rooms, blocks: []) + @hotel1.book_a_room(date_in1,date_out1,@hotel1.rooms[0]) + @hotel1.book_a_room(date_in2,date_out2,@hotel1.rooms[0]) + @hotel1.book_a_room(date_in3,date_out3,@hotel1.rooms[0]) + end + + it "raises an exception if you try to reserve an unavailable room" do + date_in = DateTime.new(2020,7,4.5) + date_out = DateTime.new(2020,8,4.5) + expect{@hotel1.book_a_room(date_in, date_out, @hotel1.rooms[0])}.must_raise ArgumentError + end + + it "can return a list of reservations for a room on a certain date" do + start_date= DateTime.new(2020,6,3.5) + end_date = DateTime.new(2020,7,4.5) + start_date1= DateTime.new(2020,7,4.5) + end_date1 = DateTime.new(2020,7,29.5) + start_date2= DateTime.new(2020,6,3.5) + end_date2 = DateTime.new(2020,6,4.5) + start_date3= DateTime.new(2020,7,3.5) + end_date3 = DateTime.new(2020,7,4.5) + expect(@hotel1.rooms[0].list_of_reservations_for_data_range(start_date,end_date)).must_equal [@hotel1.rooms[0].reservations[0]] + expect(@hotel1.rooms[0].list_of_reservations_for_data_range(start_date1,end_date1)).must_equal [@hotel1.rooms[0].reservations[0],@hotel1.rooms[0].reservations[1],@hotel1.rooms[0].reservations[2]] + expect(@hotel1.rooms[0].list_of_reservations_for_data_range(start_date2,end_date2)).must_equal [] + expect(@hotel1.rooms[0].list_of_reservations_for_data_range(start_date3,end_date3)).must_equal [@hotel1.rooms[0].reservations[0]] + end + + it "can return a list of all reservations on a specific date" do + date = DateTime.new(2020,7,4.5) + date1 = DateTime.new(2020,8,4.5) + date2 = DateTime.new(2020,7,5.5) + date3 = DateTime.new(2020,7,14.5) + expect(@hotel1.list_reservations_on_specific_date(date)).must_equal [@hotel1.rooms[0].reservations[0]] + expect(@hotel1.list_reservations_on_specific_date(date1)).must_equal [] + expect(@hotel1.list_reservations_on_specific_date(date2)).must_equal [] + expect(@hotel1.list_reservations_on_specific_date(date3)).must_equal [@hotel1.rooms[0].reservations[2]] + end + + it "can return a list of all available rooms on a specific date" do + date = DateTime.new(2020,7,4.5) + date1 = DateTime.new(2020,8,4.5) + date2 = DateTime.new(2020,7,5.5) + date3 = DateTime.new(2020,7,14.5) + expect(@hotel1.list_available_rooms_on_specific_date(date)).must_equal @hotel1.rooms - [@hotel1.rooms[0]] + expect(@hotel1.list_available_rooms_on_specific_date(date1)).must_equal @hotel1.rooms + expect(@hotel1.list_available_rooms_on_specific_date(date2)).must_equal @hotel1.rooms + expect(@hotel1.list_available_rooms_on_specific_date(date3)).must_equal @hotel1.rooms - [@hotel1.rooms[0]] + end + + it "can return the total cost of a reservations" do + expect(@hotel1.total_cost(@hotel1.rooms[0].reservations[0])).must_equal 400 + expect(@hotel1.total_cost(@hotel1.rooms[0].reservations[1])).must_equal 1400 + expect(@hotel1.total_cost(@hotel1.rooms[0].reservations[2])).must_equal 400 + end + end + + describe "hotel block" do + before do + date_in1 = DateTime.new(2021,2,3.5) + date_out1 = DateTime.new(2021,2,5.5) + date_in2 = DateTime.new(2021,2,7.5) + date_out2 = DateTime.new(2021,2,14.5) + date_in3 = DateTime.new(2021,2,14.5) + date_out3 = DateTime.new(2021,2,16.5) + @hotel2 = Hotel::HotelManager.new(rooms: Hotel::Room.list_of_rooms, blocks: []) + @hotel2.book_a_room(date_in1,date_out1,@hotel2.rooms[0]) + @hotel2.book_a_room(date_in2,date_out2,@hotel2.rooms[0]) + @hotel2.book_a_room(date_in3,date_out3,@hotel2.rooms[0]) + date_in4 = DateTime.new(2021,4,10.5) + date_out4 = DateTime.new(2021,4,15.5) + @block = @hotel2.book_a_block(date_in4,date_out4,4,150) + @hotel2.book_a_room_in_block(@block,date_in4,date_out4) + end + + it "can add rooms to a hotel block" do + expect(@block.rooms_block.length).must_equal 4 + end + + it "raises an Argument Error if there arent enough rooms to book a full block" do + date_in = DateTime.new(2021,2,3.5) + date_out = DateTime.new(2021,2,5.5) + expect{@hotel2.book_a_block(date_in,date_out,60,150)}.must_raise ArgumentError + end + + + it "shows room is unavailable if you try to book a room within a block" do + date_in = DateTime.new(2021,4,11.5) + date_out = DateTime.new(2021,4,12.5) + expect{@reservation = Hotel::Reservations.new(date_in:date_in , date_out:date_out, room_id:1, room: @hotel2.rooms[0])}.must_raise ArgumentError + end + + it "raises an argument error if you try to add room to a block with no room availability" do + expect{@hotel2.add_rooms_to_block(@block,50)}.must_raise ArgumentError + end + + it "shows list of reservations for a date, including ones reserved within a block" do + date = DateTime.new(2021,4,12.5) + expect(@hotel2.list_reservations_on_specific_date(date)).must_equal [@hotel2.rooms[0].reservations[3],@hotel2.rooms[1].reservations[0],@hotel2.rooms[2].reservations[0],@hotel2.rooms[3].reservations[0]] + end + + it"checks if there is an overlap in a block" do + start_date = DateTime.new(2021,4,10.5) + end_date = DateTime.new(2021,4,12.5) + expect(@hotel2.get_block_overlap(start_date,end_date)).must_equal [@hotel2.blocks[0]] + end + + it"checks availablity of rooms in block" do + start_date = DateTime.new(2021,4,10.5) + end_date = DateTime.new(2021,4,12.5) + start_date1 = DateTime.new(2021,5,10.5) + end_date1 = DateTime.new(2021,5,12.5) + expect(@hotel2.checks_room_availability_in_blocks(start_date,end_date,@hotel2.rooms[0])).must_equal :UNAVAILABLE + expect(@hotel2.checks_room_availability_in_blocks(start_date1,end_date1,@hotel2.rooms[0])).must_equal :AVAILABLE + end + + it"raises an argument error if there are no available rooms in a block" do + date_in = DateTime.new(2021,4,10.5) + date_out = DateTime.new(2021,4,15.5) + expect{@hotel2.book_a_room_in_block(@block,date_in,date_out)}.must_raise ArgumentError + end + + end +end \ No newline at end of file diff --git a/test/reservations_test.rb b/test/reservations_test.rb new file mode 100644 index 000000000..fef2913cf --- /dev/null +++ b/test/reservations_test.rb @@ -0,0 +1,48 @@ +require_relative 'test_helper' +require 'date' + +describe "Reservations class" do + + describe "Initializer" do + before do + check_in = DateTime.new(2022,5,3.5) + check_out = DateTime.new(2022,5,5.5) + @hotel = Hotel::HotelManager.new(rooms: Hotel::Room.list_of_rooms, blocks: []) + @reservation = Hotel::Reservations.new(date_in: check_in, date_out: check_out , room_id:1, room: @hotel.rooms[0]) + @hotel.book_a_room(check_in,check_out,@hotel.rooms[0]) + end + + it "tests_overlap" do + date_in = DateTime.new(2022,5,3.5) + date_out = date_in + 3 + expect{Hotel::Reservations.new(date_in: date_in ,date_out: date_out ,room_id:1,room: @hotel.rooms[0])}.must_raise ArgumentError + end + + it "is an instance of Reservations" do + expect(@reservation).must_be_kind_of Hotel::Reservations + end + + it "raises an exception if check in is after check out" do + date_in = DateTime.new(2022,5,5.5) + date_out = DateTime.new(2022,5,3.5) + expect{Hotel::Reservations.new(date_in: date_in, date_out: date_out, room_id:2)}.must_raise ArgumentError + end + + it "raises an exception if neither room or room_id is provided" do + check_in = DateTime.new(2022,2,3.5) + check_out = check_in + 3 + expect{Hotel::Reservations.new(date_in: check_in, date_out: check_out)}.must_raise ArgumentError + end + + it "correctly calcutates total numbers of nights spent at hotel per reservation" do + expect(@reservation.total_number_of_nights_per_reservation).must_equal 2 + end + + it "raises and Argument Error if date out is before date in" do + date_in = Date.today + 5 + date_out = Date.today + expect{Hotel::Reservations.new(date_in: date_in, date_out: date_out , room_id:2, room: @hotel.rooms[0])}.must_raise ArgumentError + end + + end +end \ No newline at end of file diff --git a/test/room_test.rb b/test/room_test.rb new file mode 100644 index 000000000..d6139795f --- /dev/null +++ b/test/room_test.rb @@ -0,0 +1,105 @@ +require_relative 'test_helper' + +describe "Receptionist class" do + + describe "Initializer" do + before do + date_in1 = DateTime.new(2020,2,3.5) + date_out1 = DateTime.new(2020,2,5.5) + date_in2 = DateTime.new(2020,2,7.5) + date_out2 = DateTime.new(2020,2,14.5) + date_in3 = DateTime.new(2020,2,14.5) + date_out3 = DateTime.new(2020,2,16.5) + @hotel = Hotel::HotelManager.new(rooms: Hotel::Room.list_of_rooms,blocks: []) + @reservation1 = Hotel::Reservations.new(date_in:date_in1 , date_out:date_out1, room_id:1, room: @hotel.rooms[0]) + @reservation2 = Hotel::Reservations.new(date_in:date_in2 , date_out:date_out2, room_id:1, room: @hotel.rooms[0]) + @reservation3 = Hotel::Reservations.new(date_in:date_in3 , date_out:date_out3, room_id:1, room: @hotel.rooms[0]) + @hotel.add_a_reservation_to_room(@hotel.rooms[0],@reservation1) + @hotel.add_a_reservation_to_room(@hotel.rooms[0],@reservation2) + @hotel.add_a_reservation_to_room(@hotel.rooms[0],@reservation3) + @room = Hotel::Room.new(id: 34, reservations: []) + end + + it "is an instance of room" do + expect(@room).must_be_kind_of Hotel::Room + end + + it "returns the right id" do + expect(@room.id).must_equal 34 + end + + it "returns the right reservations" do + expect(@room.reservations).must_equal [] + end + + it "can return a list of rooms" do + rooms = Hotel::Room.list_of_rooms + expect(rooms[0].id).must_equal 1 + expect(rooms[0].reservations).must_be_kind_of Array + end + + it "can return a list of reservations for a room on a certain date" do + start_date= DateTime.new(2020,1,3.5) + end_date = DateTime.new(2020,2,4.5) + start_date1= DateTime.new(2020,2,4.5) + end_date1 = DateTime.new(2020,2,29.5) + start_date2= DateTime.new(2020,1,3.5) + end_date2 = DateTime.new(2020,1,4.5) + start_date3= DateTime.new(2020,2,3.5) + end_date3 = DateTime.new(2020,2,4.5) + # puts @hotel.rooms[0].list_of_reservations_for_data_range(start_date,end_date) + # puts @hotel.rooms[0].list_of_reservations_for_data_range(start_date1,end_date1) + # puts @hotel.rooms[0].list_of_reservations_for_data_range(start_date2,end_date2) + expect(@hotel.rooms[0].list_of_reservations_for_data_range(start_date,end_date)).must_equal [@reservation1] + expect(@hotel.rooms[0].list_of_reservations_for_data_range(start_date1,end_date1)).must_equal [@reservation1,@reservation2,@reservation3] + expect(@hotel.rooms[0].list_of_reservations_for_data_range(start_date2,end_date2)).must_equal [] + expect(@hotel.rooms[0].list_of_reservations_for_data_range(start_date3,end_date3)).must_equal [@reservation1] + end + + it "can return an reservation in a room on a specific date" do + date = DateTime.new(2020,2,4.5) + date1 = DateTime.new(2020,3,4.5) + date2 = DateTime.new(2020,2,5.5) + date3 = DateTime.new(2020,2,14.5) + expect(@hotel.rooms[0].specific_date_reservations(date)).must_equal [@reservation1] + expect(@hotel.rooms[0].specific_date_reservations(date1)).must_equal [] + expect(@hotel.rooms[0].specific_date_reservations(date2)).must_equal [] + expect(@hotel.rooms[0].specific_date_reservations(date3)).must_equal [@reservation3] + end + + it "returns false when a room is anavailable" do + date = DateTime.new(2020,2,4.5) + date1 = DateTime.new(2020,3,4.5) + date2 = DateTime.new(2020,2,5.5) + date3 = DateTime.new(2020,2,14.5) + expect(@hotel.rooms[0].specific_date_availability(date)).must_equal [false] + expect(@hotel.rooms[0].specific_date_availability(date1)).must_equal [] + expect(@hotel.rooms[0].specific_date_availability(date2)).must_equal [] + expect(@hotel.rooms[0].specific_date_availability(date3)).must_equal [false] + end + + it "returns unavailable when a room is anavailable within a date range" do + date_in = DateTime.new(2020,2,4.5) + date_out = DateTime.new(2020,2,5.5) + date_in1 = DateTime.new(2020,3,4.5) + date_out1 = DateTime.new(2020,3,5.5) + date_in2 = DateTime.new(2020,2,5.5) + date_out2 = DateTime.new(2020,2,6.5) + date_in3 = DateTime.new(2020,2,14.5) + date_out3 = DateTime.new(2020,2,15.5) + expect(@hotel.rooms[0].daterange_availability(date_in,date_out)).must_equal :UNAVAILABLE + expect(@hotel.rooms[0].daterange_availability(date_in1,date_out1)).must_equal :AVAILABLE + expect(@hotel.rooms[0].daterange_availability(date_in2,date_out2)).must_equal :AVAILABLE + expect(@hotel.rooms[0].daterange_availability(date_in3,date_out3)).must_equal :UNAVAILABLE + end + + it "checks whether a desired check in range overlaps with a given room's reservations" do + start_date= DateTime.new(2020,2,1.5) + end_date = DateTime.new(2020,2,4.5) + start_date1= DateTime.new(2020,3,3.5) + end_date1 = DateTime.new(2020,3,4.5) + expect(@hotel.rooms[0].test_overlap(start_date,end_date)).must_equal :UNAVAILABLE + expect(@hotel.rooms[0].test_overlap(start_date1,end_date1)).must_equal :AVAILABLE + end + end +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index c3a7695cf..a911bab5c 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,8 +1,22 @@ # Add simplecov +require 'simplecov' +SimpleCov.start do + add_filter 'test/' # Tests should not be checked for coverage. +end require "minitest" require "minitest/autorun" require "minitest/reporters" +require 'minitest/skip_dsl' +require 'date' + + +require 'minitest/pride' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # require_relative your lib files here! + +require_relative '../lib/hotel_manager' +require_relative '../lib/reservations' +require_relative '../lib/room' +require_relative '../lib/hotel_block'