diff --git a/.gitignore b/.gitignore index 5e1422c9c..c0ac3dc53 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ build-iPhoneSimulator/ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc +coverage diff --git a/lib/csv_record.rb b/lib/csv_record.rb new file mode 100644 index 000000000..6a5335a43 --- /dev/null +++ b/lib/csv_record.rb @@ -0,0 +1,53 @@ +################################ +## ADAPTED FROM OO-RIDE-SHARE ## +################################ + +require 'csv' +require 'pry' + +module HotelManager + class CsvRecord + attr_reader :id + + def initialize(id) + self.class.validate_id(id) + @id = id + end + + # Takes either full_path or directory and optional file_name + # Default file name matches class name + def self.load_all(full_path: nil, directory: nil, file_name: nil) + + full_path ||= build_path(directory, file_name) + + return CSV.read( + full_path, + headers: true, + header_converters: :symbol, + converters: :numeric + ).map { |record| from_csv(record) } + end + + def self.validate_id(id) + if id.nil? || id <= 0 + raise ArgumentError, 'ID cannot be blank or less than one.' + end + end + + def self.from_csv(record) + raise NotImplementedError, 'Implement me in a child class!' + end + + def self.build_path(directory, file_name) + raise ArgumentError, "Either full_path or directory is required" if directory.nil? + + if file_name.nil? + class_name = self.to_s.split('::').last + file_name = "#{class_name.downcase}s.csv" + end + + return "#{directory}/#{file_name}" + 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..de705d70b --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,67 @@ +require 'date' +require 'pry' + +require_relative 'room' + +module HotelManager + class Reservation + + attr_reader :id, :customer_id, :start_date, :end_date, :room_cost, :rooms, :room_ids + + # Room default cost of $200 + def initialize id: , + customer_id: , + start_date: , + end_date: , + room_cost: 200, + rooms: nil, + room_ids: nil + + @id = id + @customer_id = customer_id + @start_date = start_date + @end_date = end_date + @room_cost = room_cost + @rooms = rooms + @room_ids = room_ids + + validate_date + @rooms.nil? ? validate_room(@room_ids) : validate_room(@rooms) + end + + def validate_room(attribute) + raise ArgumentError, "Room or room_id is required" if @rooms.nil? && @room_ids.nil? + + if attribute.length < 1 || attribute.length > 5 + raise ArgumentError, "#{attribute.length} is an invalid number of rooms for a hotel block" + end + end + + # Check input validation + def validate_date + if !@start_date.is_a?(Date) || !@end_date.is_a?(Date) + raise ArgumentError, "Expected #{@start_date} and #{@end_date} to be date" + elsif @start_date >= @end_date + raise ArgumentError, "#{@start_date} must be before #{@end_date}" + end + end + + # Calculate cost of reservation, exclusive of last date + def total_cost + @room_cost * (@end_date - @start_date - 1) * @rooms.length + end + + # Checks if reservation exists on a specific date + def check_date(search_date) + (search_date >= @start_date) && (search_date <= @end_date) + end + + # Checks whether reservation is within a given date range + def check_reservation_range(date_one, date_two) + first_date = date_one < date_two ? date_one : date_two + second_date = date_one < date_two ? date_two : date_one + first_date < @end_date && second_date > @start_date + end + + end +end \ No newline at end of file diff --git a/lib/reservation_manager.rb b/lib/reservation_manager.rb new file mode 100644 index 000000000..c32135f29 --- /dev/null +++ b/lib/reservation_manager.rb @@ -0,0 +1,103 @@ +require 'pry' +require 'date' + +require_relative 'reservation' +require_relative 'room' + +module HotelManager + class ReservationManager + + attr_reader :rooms, :reservation_blocks + + # Populate hotel with 20 rooms upon initialization + def initialize + @rooms = [] + @reservation_blocks = [] + + 20.times do |index| + @rooms << HotelManager::Room.new(id: index + 1) + end + end + + # Creates and saves new reservation/block to instance variables + def save_reservation(first_date, second_date, num_of_rooms: 1, customer_id: nil, room_cost: 200) + + # change list_room_by_range to return argument rather than string + available_rooms = list_room_by_range(first_date,second_date) + chosen_rooms = available_rooms.take(num_of_rooms) + + raise ArgumentError, "No rooms available" if chosen_rooms.empty? + + chosen_rooms.map!{|room| room.id} + + new_reservation = HotelManager::Reservation.new( + id: @reservation_blocks.length + 1, + customer_id: customer_id, + start_date: first_date, + end_date: second_date, + room_cost: room_cost, + room_ids: chosen_rooms + ) + + @reservation_blocks << new_reservation + end + + def find_room(id) + @rooms.find { |room| room.id == id } + end + + # List out all rooms in hotel + def rooms_list + @rooms.map {|room| "Room: #{room.id}"}.join(", ") + end + + # List out all reservations by room and date range + def search_by_room_date(room, first_date, second_date) + raise ArgumentError, "Room #{room} does not exist" if @rooms.last.id < room + + reservation_room_date = [] + + @reservation_blocks.each do |reservation_block| + found_room = reservation_block.room_ids.include? room + if reservation_block.check_reservation_range(first_date,second_date) && found_room + reservation_room_date << reservation_block + end + end + + return reservation_found?(reservation_room_date, "reservations") + end + + # List out reservations by specific date + def search_by_date(date) + reservation_by_date = [] + + @reservation_blocks.each do |reservation_block| + reservation_by_date << reservation_block if reservation_block.check_date(date) + end + + return reservation_found?(reservation_by_date, "reservations") + end + + def list_room_by_range(first_date, second_date) + available_rooms = @rooms.dup + + @reservation_blocks.each do |reservation_block| + if reservation_block.check_reservation_range(first_date, second_date) + reservation_block.room_ids.each do |room_id| + available_rooms -= [find_room(room_id)] + end + end + end + + return reservation_found?(available_rooms, "rooms") + end + + # Raise argument error if no items found + def reservation_found? tracker, type + raise ArgumentError, "No #{type} available in date range." if tracker.empty? + + return tracker + end + + end +end diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..ec7990dda --- /dev/null +++ b/lib/room.rb @@ -0,0 +1,11 @@ +module HotelManager + class Room + + attr_reader :id + + def initialize id: + @id = id + end + + end +end \ No newline at end of file diff --git a/test/csv_record_test.rb b/test/csv_record_test.rb new file mode 100644 index 000000000..006bd5ef9 --- /dev/null +++ b/test/csv_record_test.rb @@ -0,0 +1,97 @@ +################################ +## ADAPTED FROM OO-RIDE-SHARE ## +################################ + +require_relative 'test_helper' + +TEST_DATA_DIR = 'test/test_data' + +describe 'CSV Record Class' do + it 'is an instance of CSV Record' do + record = HotelManager::CsvRecord.new(1) + expect(record.id).must_equal 1 + end + + it 'raises error if invalid id is used' do + expect {HotelManager::CsvRecord.new(-7)}.must_raise ArgumentError + expect {HotelManager::CsvRecord.new("One")}.must_raise ArgumentError + end + + it 'validates that id accepts natural numbers' do + [1, 10, 9999].each {|id| HotelManager::CsvRecord.validate_id(id)} + end + + it 'raises for negative numbers and 0' do + [0, -1, -10, -9999].each {|id| expect { HotelManager::CsvRecord.validate_id(id) }.must_raise ArgumentError} + end + + it 'raises for nil' do + expect {HotelManager::CsvRecord.validate_id(nil)}.must_raise ArgumentError + end +end + +describe 'CSV Record Class - Load All' do + it "raise argument error if invalid file path" do + expect {HotelManager::CsvRecord.load_all}.must_raise ArgumentError + end + + it "raises an error if missing directory or file path" do + expect {HotelManager::CsvRecord.build_path(nil,"")}.must_raise ArgumentError + end + + it "raises an error if invoked directly (without subclassing)" do + full_path = "#{TEST_DATA_DIR}/testrecords.csv" + expect {HotelManager::CsvRecord.load_all(full_path: full_path)}.must_raise NotImplementedError + end +end + +describe 'CSV Record Class - Test Class' do + class TestRecord < HotelManager::CsvRecord + attr_reader :call_count + + def initialize(id:, customer_id:, start_date:, end_date: , num_of_rooms:) + super(id) + end + + def self.load_all(*args, **kwargs) + @call_count = 0 + super + end + + def self.from_csv(record) + new(**record) + @call_count += 1 + end + + def self.call_count + @call_count + end + end + + describe 'load_all' do + file_name = 'testrecords.csv' + record_count = CSV.read("#{TEST_DATA_DIR}/#{file_name}", headers: true).length + + it 'finds data given just a directory' do + records = TestRecord.load_all(directory: TEST_DATA_DIR) + expect(records.length).must_equal record_count + end + + it 'finds data given a directory and filename' do + records = TestRecord.load_all(directory: TEST_DATA_DIR, file_name: file_name) + + expect(records.length).must_equal record_count + end + + it 'finds data given a full path' do + records = TestRecord.load_all(full_path: "#{TEST_DATA_DIR}/#{file_name}") + + expect(records.length).must_equal record_count + end + + it 'calls `from_csv` for each record in the file' do + TestRecord.load_all(directory: TEST_DATA_DIR) + expect(TestRecord.call_count).must_equal record_count + end + end +end \ No newline at end of file diff --git a/test/reservation_manager_test.rb b/test/reservation_manager_test.rb new file mode 100644 index 000000000..cabd5d336 --- /dev/null +++ b/test/reservation_manager_test.rb @@ -0,0 +1,228 @@ +require_relative 'test_helper' + +describe "Reservation Manager Class" do + before do + @sample = HotelManager::ReservationManager.new() + end + + it "is an instance of Reservation Manager" do + expect(@sample).must_be_kind_of HotelManager::ReservationManager + expect(@sample.rooms).must_be_kind_of Array + expect(@sample.reservation_blocks).must_be_kind_of Array + end + + it "confirm that hotel contains 20 rooms" do + expect(@sample.rooms.length).must_equal 20 + end + + it "able to list out all rooms in the hotel" do + expect(@sample.rooms_list()).must_be_kind_of String + expect(@sample.rooms_list()).must_include "Room: 1, Room: 2, Room: 3" + expect(@sample.rooms_list()).must_include "Room: 19, Room: 20" + end +end + +describe "Reservation Manager Class - Allow Booking" do + before do + @sample = HotelManager::ReservationManager.new() + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,15),num_of_rooms:5) + end + + it "allow booking overlapping last day" do + @sample.save_reservation(Date.new(2020,3,15),Date.new(2020,3,20),num_of_rooms: 5) + expect(@sample.reservation_blocks[1]).must_be_kind_of HotelManager::Reservation + expect(@sample.reservation_blocks.length).must_equal 2 + end + + it "allow individual booking on same range" do + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,15)) + expect(@sample.reservation_blocks[1]).must_be_kind_of HotelManager::Reservation + expect(@sample.reservation_blocks.length).must_equal 2 + end + + it "allow booking within range" do + @sample.save_reservation(Date.new(2020,3,2),Date.new(2020,3,14)) + expect(@sample.reservation_blocks[1]).must_be_kind_of HotelManager::Reservation + expect(@sample.reservation_blocks.length).must_equal 2 + end + + it "allow booking outside of range" do + @sample.save_reservation(Date.new(2020,2,25),Date.new(2020,3,18)) + expect(@sample.reservation_blocks[1]).must_be_kind_of HotelManager::Reservation + expect(@sample.reservation_blocks.length).must_equal 2 + end + + it "allow booking before range" do + @sample.save_reservation(Date.new(2020,2,25),Date.new(2020,3,5)) + expect(@sample.reservation_blocks[1]).must_be_kind_of HotelManager::Reservation + expect(@sample.reservation_blocks.length).must_equal 2 + end + + it "allow booking after range" do + @sample.save_reservation(Date.new(2020,3,8),Date.new(2020,3,20)) + expect(@sample.reservation_blocks[1]).must_be_kind_of HotelManager::Reservation + expect(@sample.reservation_blocks.length).must_equal 2 + end +end + +describe "Reservation Manager Class - Double Booking" do + before do + @sample = HotelManager::ReservationManager.new() + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,15),num_of_rooms:5) + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,15),num_of_rooms:5) + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,15),num_of_rooms:5) + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,15),num_of_rooms:5) + end + + it "raise error - individual overbooking same range" do + expect{@sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,15))}.must_raise ArgumentError + end + + it "raise error - overbooking within range" do + expect{@sample.save_reservation(Date.new(2020,3,2),Date.new(2020,3,14),num_of_rooms: 5)}.must_raise ArgumentError + end + + it "raise error - overbooking outside range" do + expect{@sample.save_reservation(Date.new(2020,2,25),Date.new(2020,4,1),num_of_rooms: 5)}.must_raise ArgumentError + end + + it "raise error - overbooking before range" do + expect{@sample.save_reservation(Date.new(2020,2,25),Date.new(2020,3,5),num_of_rooms: 5)}.must_raise ArgumentError + end + + it "raise error - overbooking after range" do + expect{@sample.save_reservation(Date.new(2020,3,8),Date.new(2020,3,20),num_of_rooms: 5)}.must_raise ArgumentError + end + + it "allow booking overlapping last day" do + @sample.save_reservation(Date.new(2020,3,15),Date.new(2020,3,20),num_of_rooms: 5) + expect(@sample.reservation_blocks[4]).must_be_kind_of HotelManager::Reservation + expect(@sample.reservation_blocks.length).must_equal 5 + end +end + +describe "Reservation Manager Class - Search Functions" do + before do + @sample = HotelManager::ReservationManager.new() + @sample.save_reservation(Date.new(2020,3,2),Date.new(2020,3,5)) + @sample.save_reservation(Date.new(2020,3,15),Date.new(2020,3,24)) + @sample.save_reservation(Date.new(2020,3,2),Date.new(2020,3,18),num_of_rooms:3) + end + + describe "test search by room AND date range" do + it "able to list reservation by room/date range" do + @sample.save_reservation(Date.new(2020,3,6),Date.new(2020,3,12),num_of_rooms:3,room_cost:100) + + @search_result = @sample.search_by_room_date(1, Date.new(2020,3,1), Date.new(2020,3,10)) + expect(@search_result).must_be_kind_of Array + expect(@search_result[1]).must_be_kind_of HotelManager::Reservation + expect(@search_result[0].id).must_equal 1 + expect(@search_result[1].id).must_equal 4 + end + + it "notifies user if no room by room/date range" do + expect{@sample.search_by_room_date(1, Date.new(2020,4,1), Date.new(2020,4,10))}.must_raise ArgumentError + end + + it "raise argument error if invalid room or date range" do + expect{@sample.search_by_room_date(30, Date.new(2020,3,1), Date.new(2020,3,10))}.must_raise ArgumentError + expect{@sample.search_by_room_date(1, "Date.new(2020,3,1)", Date.new(2020,3,10))}.must_raise ArgumentError + end + end + + describe "test search by date" do + it "able to list reservation by specific date" do + @search_result = @sample.search_by_date(Date.new(2020,3,17)) + expect(@search_result).must_be_kind_of Array + expect(@search_result[0]).must_be_kind_of HotelManager::Reservation + expect(@search_result[0].id).must_equal 2 + expect(@search_result[1].id).must_equal 3 + end + + it "raise argument error if no reservation_blocks on that date" do + expect{@sample.search_by_date(Date.new(2020,4,1))}.must_raise ArgumentError + end + + it "raise argument error if invalid date entered" do + expect{@sample.search_by_date("Date.new(2020,3,1)")}.must_raise ArgumentError + end + end + + # see list of rooms available for a given date range + describe "list rooms available by date range" do + it "able to list out all available rooms by date range" do + @search_result = @sample.list_room_by_range(Date.new(2020,4,1),Date.new(2020,4,7)) + expect(@search_result).must_be_kind_of Array + expect(@search_result.length).must_equal 20 + end + + it "able to list out all available rooms by date range" do + @search_result = @sample.list_room_by_range(Date.new(2020,3,1),Date.new(2020,3,5)) + expect(@search_result).must_be_kind_of Array + expect(@search_result[0]).must_be_kind_of HotelManager::Room + expect(@search_result.length).must_equal 16 + end + + it "notify user if no rooms are available" do + @sample.save_reservation(Date.new(2020,3,2),Date.new(2020,3,18),num_of_rooms:5) + @sample.save_reservation(Date.new(2020,3,2),Date.new(2020,3,18),num_of_rooms:5) + @sample.save_reservation(Date.new(2020,3,2),Date.new(2020,3,18),num_of_rooms:5) + @sample.save_reservation(Date.new(2020,3,2),Date.new(2020,3,18)) + + expect{@sample.list_room_by_range(Date.new(2020,3,1),Date.new(2020,3,5))}.must_raise ArgumentError + end + end +end + +describe "Reservation Manager Class - Create New Reservation" do + before do + @sample = HotelManager::ReservationManager.new() + + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,5)) + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,5)) + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,5),num_of_rooms:5) + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,5),num_of_rooms:4) + end + + it "able to add reservation_blocks to Reservation Manager" do + expect(@sample.reservation_blocks.length).must_equal 4 + end + + it "verify that next available rooms were used - individual" do + @sample.save_reservation(Date.new(2020,3,4),Date.new(2020,3,7)) + @sample.save_reservation(Date.new(2020,3,10),Date.new(2020,3,17)) + + expect(@sample.reservation_blocks[0].room_ids).must_equal [1] + expect(@sample.reservation_blocks[1].room_ids).must_equal [2] + expect(@sample.reservation_blocks[4].room_ids).must_equal [12] + expect(@sample.reservation_blocks[5].room_ids).must_equal [1] + end + + it "create and save reservation blocks providing only dates" do + expect(@sample.reservation_blocks.length).must_equal 4 + end + + it "verify that next available rooms were used - block" do + @sample.save_reservation(Date.new(2020,3,4),Date.new(2020,3,7),num_of_rooms:4) + @sample.save_reservation(Date.new(2020,3,10),Date.new(2020,3,15),num_of_rooms:5) + + expect(@sample.reservation_blocks[2].room_ids).must_equal [3,4,5,6,7] + expect(@sample.reservation_blocks[3].room_ids).must_equal [8,9,10,11] + expect(@sample.reservation_blocks[4].room_ids).must_equal [12,13,14,15] + expect(@sample.reservation_blocks[5].room_ids).must_equal [1,2,3,4,5] + end + + it "raises arugment error if no rooms are available - individual" do + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,5),num_of_rooms:5) + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,5),num_of_rooms:4) + + expect{@sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,5))}.must_raise ArgumentError + end + + it "raises arugment error if no rooms are available - block" do + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,5),num_of_rooms:5) + @sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,5),num_of_rooms:4) + + expect{@sample.save_reservation(Date.new(2020,3,1),Date.new(2020,3,5),num_of_rooms:2)}.must_raise ArgumentError + end +end \ No newline at end of file diff --git a/test/reservation_test.rb b/test/reservation_test.rb new file mode 100644 index 000000000..e46d36b8b --- /dev/null +++ b/test/reservation_test.rb @@ -0,0 +1,79 @@ +require_relative 'test_helper' + +describe "Reservation Block Class" do + before do + @rooms = [ + HotelManager::Room.new(id: 1), + HotelManager::Room.new(id: 2), + HotelManager::Room.new(id: 3), + HotelManager::Room.new(id: 4), + HotelManager::Room.new(id: 5) + ] + @reservation_data = { + id: 1, + customer_id: 1, + start_date: Date.new(2020,3,2), + end_date: Date.new(2020,3,8), + room_cost: 150, + rooms: @rooms + } + + @reservation = HotelManager::Reservation.new(@reservation_data) + end + + describe "Reservation Block Class - Attributes" do + + it "is an instance of Reservation Block" do + expect(@reservation).must_be_kind_of HotelManager::Reservation + expect(@reservation.rooms).must_be_kind_of Array + end + + it "raises argument if block only has one room" do + @rooms = nil + @reservation_data[:rooms] = @rooms + expect{HotelManager::Reservation.new(@reservation_data)}.must_raise ArgumentError + end + + it "raises argument if block has more than 5 rooms" do + @rooms += [HotelManager::Room.new(id: 6)] + @reservation_data[:rooms] = @rooms + expect{HotelManager::Reservation.new(@reservation_data)}.must_raise ArgumentError + end + + it "calculates total cost correctly" do + reservation_cost = @reservation.total_cost() + expect(reservation_cost).must_equal 3_750 + end + end + + describe "Reservation Block Class - Date Validation" do + + it "validates that start/end date is a date class" do + expect(@reservation.end_date).must_be_kind_of Date + expect(@reservation.start_date).must_be_kind_of Date + end + + it "raises argument error if start is not date class" do + @reservation_data[:start_date] = "Janurary 5th, 2020" + expect{HotelManager::Reservation.new(@reservation_data)}.must_raise ArgumentError + end + + it "raises argument error if end before start date" do + @reservation_data[:start_date] = Date.new(2020,3,5) + @reservation_data[:end_date] = Date.new(2020,3,2) + expect{HotelManager::Reservation.new(@reservation_data)}.must_raise ArgumentError + end + + it "raises argument error if start and end date are the same" do + @reservation_data[:start_date] = Date.new(2020,3,5) + @reservation_data[:end_date] = Date.new(2020,3,5) + expect{HotelManager::Reservation.new(@reservation_data)}.must_raise ArgumentError + end + end +end + +# Edge case - date entered is > 31 days per month or leap year +# Add in test for if a a block is reserved, where only part of the rooms are available + + + diff --git a/test/room_test.rb b/test/room_test.rb new file mode 100644 index 000000000..e64a334c9 --- /dev/null +++ b/test/room_test.rb @@ -0,0 +1,18 @@ +require_relative 'test_helper' + +describe "Room Test" do + before do + @room_data = { + id: 1, + } + @room = HotelManager::Room.new(@room_data) + end + + it "is an instance of Room "do + expect(@room).must_be_kind_of HotelManager::Room + end +end + +# +# able to instantiate with reservation? +# able to instantiate without reservation? diff --git a/test/test_data/generate_test_data.rb b/test/test_data/generate_test_data.rb new file mode 100644 index 000000000..e69de29bb diff --git a/test/test_data/reservations.csv b/test/test_data/reservations.csv new file mode 100644 index 000000000..27ad6f329 --- /dev/null +++ b/test/test_data/reservations.csv @@ -0,0 +1,11 @@ +id,customer_id,start_date,end_date,num_of_rooms +1,1,2020-05-01 15:00:00 -0800,2020-05-10 11:00:00 -0800,1 +2,2,2020-05-01 15:00:00 -0800,2020-05-04 11:00:00 -0800,2 +3,3,2020-05-02 15:00:00 -0800,2020-05-15 11:00:00 -0800,3 +4,4,2020-05-15 15:00:00 -0800,2020-05-30 11:00:00 -0800,4 +5,2,2020-05-28 15:00:00 -0800,2020-05-30 11:00:00 -0800,5 +6,3,2020-05-25 15:00:00 -0800,2020-05-29 11:00:00 -0800,5 +7,4,2020-05-28 15:00:00 -0800,2020-05-29 11:00:00 -0800,4 +8,6,2020-05-25 15:00:00 -0800,2020-05-27 11:00:00 -0800,3 +9,7,2020-05-01 15:00:00 -0800,2020-05-16 11:00:00 -0800,2 +10,8,2020-05-28 15:00:00 -0800,2020-06-01 11:00:00 -0800,1 diff --git a/test/test_data/rooms.csv b/test/test_data/rooms.csv new file mode 100644 index 000000000..f0f31e325 --- /dev/null +++ b/test/test_data/rooms.csv @@ -0,0 +1,21 @@ +id,price +1,150 +2,150 +3,150 +4,200 +5,200 +6,200 +7,250 +8,250 +9,250 +10,300 +11,300 +12,300 +13,300 +14,400 +15,400 +16,400 +17,500 +18,500 +19,500 +20,1000 \ No newline at end of file diff --git a/test/test_data/testrecords.csv b/test/test_data/testrecords.csv new file mode 100644 index 000000000..480eca51d --- /dev/null +++ b/test/test_data/testrecords.csv @@ -0,0 +1,11 @@ +id,customer_id,start_date,end_date,num_of_rooms +1,1,2020-05-01 15:00:00 -0800,2020-07-10 11:00:00 -0800,2 +2,2,2020-05-08 15:00:00 -0800,2020-05-12 11:00:00 -0800,3 +3,3,2020-05-05 15:00:00 -0800,2020-05-15 11:00:00 -0800,4 +4,4,2020-05-14 15:00:00 -0800,2020-05-28 11:00:00 -0800,5 +5,2,2020-05-28 15:00:00 -0800,2020-05-30 11:00:00 -0800,2 +6,3,2020-05-25 15:00:00 -0800,2020-05-29 11:00:00 -0800,3 +7,4,2020-05-15 15:00:00 -0800,2020-05-17 11:00:00 -0800,5 +8,6,2020-05-25 15:00:00 -0800,2020-05-27 11:00:00 -0800,3 +9,7,2020-05-01 15:00:00 -0800,2020-05-16 11:00:00 -0800,2 +10,8,2020-05-25 15:00:00 -0800,2020-06-02 11:00:00 -0800,4 diff --git a/test/test_helper.rb b/test/test_helper.rb index c3a7695cf..c4c9aa989 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,8 +1,20 @@ -# 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 "minitest/reporters" +require "date" +require "pry" + -Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new +# Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # require_relative your lib files here! +require_relative '../lib/room.rb' +require_relative '../lib/reservation_manager.rb' +require_relative '../lib/reservation.rb' +require_relative '../lib/csv_record.rb' \ No newline at end of file