From b0c058edc9d9a06464b6a9b8042d0d66146a526e Mon Sep 17 00:00:00 2001 From: Ari Date: Mon, 5 Mar 2018 13:45:27 -0800 Subject: [PATCH 1/8] Created rb files for room, reservation, front desk --- Rakefile | 9 +++++++++ lib/front_desk.rb | 14 ++++++++++++++ lib/reservation.rb | 25 +++++++++++++++++++++++++ lib/{.keep => room.rb} | 0 specs/.keep | 0 specs/spec_helper.rb | 10 ++++++++++ 6 files changed, 58 insertions(+) create mode 100644 Rakefile create mode 100644 lib/front_desk.rb create mode 100644 lib/reservation.rb rename lib/{.keep => room.rb} (100%) delete mode 100644 specs/.keep create mode 100644 specs/spec_helper.rb diff --git a/Rakefile b/Rakefile new file mode 100644 index 000000000..deb52f2cd --- /dev/null +++ b/Rakefile @@ -0,0 +1,9 @@ +require 'rake/testtask' + +Rake::TestTask.new do |t| + t.libs = ["lib"] + t.warning = true + t.test_files = FileList['specs/*_spec.rb'] +end + +task default: :test diff --git a/lib/front_desk.rb b/lib/front_desk.rb new file mode 100644 index 000000000..b09e60b0c --- /dev/null +++ b/lib/front_desk.rb @@ -0,0 +1,14 @@ +module Hotel + class Front_Desk + + + + + + + + + + + end +end diff --git a/lib/reservation.rb b/lib/reservation.rb new file mode 100644 index 000000000..b1914e79b --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,25 @@ +require 'date' + + +module Hotel + class Reservation + + attr_reader + + def initialize(input) + @ticket_id = input[:ticket_id] + @start_date = input[:start_date] + @end_date = input[:end_date] + @total_cost = input[:total_cost] + + if @end_date < @start_date + raise ArgumentError('Invalid Date Range') + end + end + + def duration + + end + + end +end diff --git a/lib/.keep b/lib/room.rb similarity index 100% rename from lib/.keep rename to lib/room.rb diff --git a/specs/.keep b/specs/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb new file mode 100644 index 000000000..a23c7ae39 --- /dev/null +++ b/specs/spec_helper.rb @@ -0,0 +1,10 @@ +require 'simplecov' +SimpleCov.start + +require 'time' +require 'minitest' +require 'minitest/autorun' +require 'minitest/reporters' +# Add simplecov + +Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From a70b24e52e28dfe702058c79c830140b0528a0cd Mon Sep 17 00:00:00 2001 From: Ari Date: Tue, 6 Mar 2018 12:16:57 -0800 Subject: [PATCH 2/8] Initialized room class in front desk class --- lib/front_desk.rb | 57 +++++++++++++++++++++++++++++++++++++++++++++- lib/reservation.rb | 12 ++++++---- lib/room.rb | 27 ++++++++++++++++++++++ 3 files changed, 91 insertions(+), 5 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index b09e60b0c..4654f8b27 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -1,13 +1,68 @@ +require 'date' + +require_relative 'reservation' +require_relative 'room' + module Hotel class Front_Desk - + attr_reader :rooms, :reservations + + def initialize + # an array of rooms + @rooms = [] + count = 1 + Room::ROOM_ID.each do |room| + @rooms << Room.new( + { + room_number: count, + dates_reserved: [] + } + ) + count += 1 + end + @reservation = [] + end + # list of all rooms + def room_data + @rooms.each do |room| + return room + end + end + # list of all reservations + def reservation_data + @reservations.each do |reserved| + return "#{reserved}, Total Cost: #{reserved.total_cost}" + end + end + # to create a reservation + def add_room(start_date, end_date) + new_ticket = {} + new_ticket[:ticket_id] = @reservations.length + 1 + new_ticket[:start_date] = Date.parse(start_date) + new_ticket[:end_date] = Date.parse(end_date) + new_reserve = Reservaton.new(new_ticket) + @reservations << new_reserve + return new_reserve + end + # to check availablity + def check_date(date) + check_day = Date.parse(date) + @rooms.each do |room| + room[:date_range].each do |day| + if room[:date_range].include(check_day) + return "Room ##{[:room_number]} is reserved" + end + end + return "No reservations." + end + end end diff --git a/lib/reservation.rb b/lib/reservation.rb index b1914e79b..6b981f15e 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -4,22 +4,26 @@ module Hotel class Reservation - attr_reader + attr_reader :ticket_id, :start_date, :end_date, :total_cost def initialize(input) @ticket_id = input[:ticket_id] @start_date = input[:start_date] @end_date = input[:end_date] - @total_cost = input[:total_cost] + @room = input[:room_id] + # @total_cost = input[:total_cost] == nil ? 0 : input[:total_cost] if @end_date < @start_date raise ArgumentError('Invalid Date Range') end end - def duration - + def total_cost + duration = end_date - start_date + return ((duration - 1) * 200) end + new_ticket[:total_cost] = total_cost(start_date, end_date) + end end diff --git a/lib/room.rb b/lib/room.rb index e69de29bb..14dcdb392 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -0,0 +1,27 @@ +require 'date' + +require_relative 'front_desk' +require_relative 'reservation' + +module Hotel + class Room + + ROOM_ID = (1..20) + + attr_reader :room_id, :status + + def initialize(room) + @room_id = room[:room_number] + @reserved_dates = room[:dates_reserved] + + unless @room_id =~ ROOM_ID + raise ArgumentError ("Invalid Room Number") + end + end + + def add_reservation(input) + + end + + end +end From c42673a6957071f3191e7092b1445f8cf00940b7 Mon Sep 17 00:00:00 2001 From: Ari Date: Wed, 7 Mar 2018 08:34:29 -0800 Subject: [PATCH 3/8] Add front_desk spec file --- lib/front_desk.rb | 23 ++++++++------------- lib/reservation.rb | 16 +++++++-------- lib/room.rb | 13 +++++------- specs/front_desk_spec.rb | 44 ++++++++++++++++++++++++++++++++++++++++ specs/spec_helper.rb | 3 +++ 5 files changed, 68 insertions(+), 31 deletions(-) create mode 100644 specs/front_desk_spec.rb diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 4654f8b27..859792c6d 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -4,30 +4,25 @@ require_relative 'room' module Hotel - class Front_Desk + class Front_desk - attr_reader :rooms, :reservations + attr_reader :total_rooms, :reservations def initialize # an array of rooms - @rooms = [] + @total_rooms = [] count = 1 Room::ROOM_ID.each do |room| - @rooms << Room.new( - { - room_number: count, - dates_reserved: [] - } - ) + @total_rooms << Room.new([count]) count += 1 end - @reservation = [] + @reservations = [] end # list of all rooms def room_data - @rooms.each do |room| - return room + @total_rooms.each do |r| + return "#{r.room_id}" end end @@ -45,7 +40,7 @@ def add_room(start_date, end_date) new_ticket[:start_date] = Date.parse(start_date) new_ticket[:end_date] = Date.parse(end_date) - new_reserve = Reservaton.new(new_ticket) + new_reserve = Hotel::Reservation.new(new_ticket) @reservations << new_reserve return new_reserve @@ -54,7 +49,7 @@ def add_room(start_date, end_date) # to check availablity def check_date(date) check_day = Date.parse(date) - @rooms.each do |room| + @total_rooms.each do |room| room[:date_range].each do |day| if room[:date_range].include(check_day) return "Room ##{[:room_number]} is reserved" diff --git a/lib/reservation.rb b/lib/reservation.rb index 6b981f15e..cd6ee0d91 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -11,19 +11,17 @@ def initialize(input) @start_date = input[:start_date] @end_date = input[:end_date] @room = input[:room_id] - # @total_cost = input[:total_cost] == nil ? 0 : input[:total_cost] - if @end_date < @start_date - raise ArgumentError('Invalid Date Range') - end - end + # if @end_date < @start_date + # raise ArgumentError('Invalid Date Range') + # end - def total_cost - duration = end_date - start_date - return ((duration - 1) * 200) end - new_ticket[:total_cost] = total_cost(start_date, end_date) + # def total_cost + # duration = end_date - start_date + # return ((duration - 1) * 200) + # end end end diff --git a/lib/room.rb b/lib/room.rb index 14dcdb392..7784ccb6d 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,8 +1,5 @@ require 'date' -require_relative 'front_desk' -require_relative 'reservation' - module Hotel class Room @@ -11,12 +8,12 @@ class Room attr_reader :room_id, :status def initialize(room) - @room_id = room[:room_number] - @reserved_dates = room[:dates_reserved] + @room_id = room[0] + @dates_reserved = room[1] = nil ? [] : room[1] - unless @room_id =~ ROOM_ID - raise ArgumentError ("Invalid Room Number") - end + # unless @room_id =~ ROOM_ID + # raise ArgumentError ("Invalid Room Number") + # end end def add_reservation(input) diff --git a/specs/front_desk_spec.rb b/specs/front_desk_spec.rb new file mode 100644 index 000000000..9ba1796b2 --- /dev/null +++ b/specs/front_desk_spec.rb @@ -0,0 +1,44 @@ +require_relative 'spec_helper' +require 'pry' + + +describe 'Front_desk' do + + describe 'Initialize' do + it 'creates a list of 20 rooms' do + new_room = Hotel::Front_desk.new + new_room.total_rooms.must_be_kind_of Array + new_room.total_rooms.length.must_equal 20 + + new_room.total_rooms.each do |room| + room.must_be_instance_of Hotel::Room + end + end + it 'creates a list of reservations' do + new_room = Hotel::Front_desk.new + new_room.reservations.must_be_kind_of Array + end + end + + describe 'room data' do + it 'returns a list of all rooms' do + end + # room = Hotel::Front_desk.new + # room.room_data.must_be_kind_of Array + end + + describe 'reservation data' do + it 'can return a list of reservations' do + end + end + + describe 'Add Room' do + it 'can create a reservation' do + room = Hotel::Front_desk.new + + new_date = room.add_room('3rd Feb 2001', '6th Feb 2001') + # new_date.must_be_instance_of Hotel::Reservation + room.reservations.must_include new_date + end + end +end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index a23c7ae39..a0a9680ee 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -5,6 +5,9 @@ require 'minitest' require 'minitest/autorun' require 'minitest/reporters' +require_relative '../lib/front_desk' +require_relative '../lib/room' +require_relative '../lib/reservation' # Add simplecov Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From 4858afeb9dd4c4768618e1182c6309760f63f276 Mon Sep 17 00:00:00 2001 From: Ari Date: Mon, 19 Mar 2018 16:47:39 -0700 Subject: [PATCH 4/8] Wave 2 tbd --- lib/front_desk.rb | 71 ++++++++++++++++++++++++---------------- lib/reservation.rb | 40 +++++++++++++++++----- lib/room.rb | 27 ++++++++------- specs/front_desk_spec.rb | 6 ++-- 4 files changed, 93 insertions(+), 51 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 859792c6d..29ea3efe9 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -8,55 +8,68 @@ class Front_desk attr_reader :total_rooms, :reservations + ROOM_ID = (1..20) + def initialize # an array of rooms - @total_rooms = [] - count = 1 - Room::ROOM_ID.each do |room| - @total_rooms << Room.new([count]) - count += 1 - end - @reservations = [] + @total_rooms = room_generator end # list of all rooms - def room_data - @total_rooms.each do |r| - return "#{r.room_id}" + def room_generator + count = 1 + ROOM_ID.each do |room| + @total_rooms << Room.new(count) + count += 1 end end + def list_rooms + return @total_rooms + end # list of all reservations def reservation_data - @reservations.each do |reserved| - return "#{reserved}, Total Cost: #{reserved.total_cost}" - end + return Hotel::Reservation.all + end + + def valid_date?(str, format = "%m/%d/%Y") + Date.strptime(str,format) rescue false end # to create a reservation def add_room(start_date, end_date) - new_ticket = {} - new_ticket[:ticket_id] = @reservations.length + 1 - new_ticket[:start_date] = Date.parse(start_date) - new_ticket[:end_date] = Date.parse(end_date) + if valid_date?(start_date) + if valid_date?(end_date) + new_ticket = {} + new_ticket[:ticket_id] = reservation_data.length + 1 + new_ticket[:start_date] = Date.parse(start_date) + new_ticket[:end_date] = Date.parse(end_date) - new_reserve = Hotel::Reservation.new(new_ticket) + @total_rooms.find do |room| + new_ticket[:room_id] = room.sample + end - @reservations << new_reserve - return new_reserve + reservaton_data.each do |room| + unless room.overlap?(start_date, end_date) + new_ticket[:room_id] = room.room_id + end + end + + reserved = Hotel::Reservation.new(new_ticket) + @reservations << reserved + return reserved + else + raise ArgumentError("INVALID END DATE") + end + else + raise ArgumentError("INVALID START DATE") + end end + # to check availablity def check_date(date) - check_day = Date.parse(date) - @total_rooms.each do |room| - room[:date_range].each do |day| - if room[:date_range].include(check_day) - return "Room ##{[:room_number]} is reserved" - end - end - return "No reservations." - end + # check_day = Date.parse(date) end diff --git a/lib/reservation.rb b/lib/reservation.rb index cd6ee0d91..9f0f7fde9 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -4,24 +4,48 @@ module Hotel class Reservation - attr_reader :ticket_id, :start_date, :end_date, :total_cost + attr_reader :ticket_id, :start_date, :end_date def initialize(input) @ticket_id = input[:ticket_id] @start_date = input[:start_date] @end_date = input[:end_date] @room = input[:room_id] + @reservations = [] - # if @end_date < @start_date - # raise ArgumentError('Invalid Date Range') - # end + if @end_date < @start_date + raise ArgumentError('Invalid Date Range') + end + @reservations << input end - # def total_cost - # duration = end_date - start_date - # return ((duration - 1) * 200) - # end + def self.all + return @reservations + end + + def overlap?(sdate, edate) + # (StartA <= EndB) and (EndA >= StartB) + return if start_date <= edate && end_date >= sdate + end + + def total_cost + duration = end_date - start_date + return ((duration - 1) * 200) + end + + def check_cost(ticket_number) + @reservation.each do |room| + if ticket_number == room.ticket_id + return room.total_cost + else + raise ArgumentError('INVALID TICKET NUMBER') + end + end + + end + + end end diff --git a/lib/room.rb b/lib/room.rb index 7784ccb6d..e4df89280 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -3,22 +3,25 @@ module Hotel class Room - ROOM_ID = (1..20) - attr_reader :room_id, :status + attr_reader :room_id, :date_range def initialize(room) - @room_id = room[0] - @dates_reserved = room[1] = nil ? [] : room[1] - - # unless @room_id =~ ROOM_ID - # raise ArgumentError ("Invalid Room Number") - # end - end - - def add_reservation(input) - + @room_id = room[:room_id] + @date_range = [] +# + unless Front_desk::ROOM_ID.include?(@room_id) + raise StandardError("INVALID ID") + end end +# +# def available(start_date, end_date) +# end +# +# def add_reservation(input) +# +# end +# end end diff --git a/specs/front_desk_spec.rb b/specs/front_desk_spec.rb index 9ba1796b2..3d86a4c7e 100644 --- a/specs/front_desk_spec.rb +++ b/specs/front_desk_spec.rb @@ -23,8 +23,10 @@ describe 'room data' do it 'returns a list of all rooms' do end - # room = Hotel::Front_desk.new - # room.room_data.must_be_kind_of Array + admin = Hotel::Front_desk.new + room = Hotel::Room.new([1]) + admin.room_data.must_respond_to room + admin.room_data.must_output 1 end describe 'reservation data' do From f8627cd933c7e8480413152b9b44be86373b63be Mon Sep 17 00:00:00 2001 From: Ari Date: Sun, 1 Apr 2018 14:11:42 -0700 Subject: [PATCH 5/8] Added count to reservation class --- lib/front_desk.rb | 17 +++++++++-------- lib/reservation.rb | 31 ++++++++++--------------------- lib/room.rb | 15 ++++----------- 3 files changed, 23 insertions(+), 40 deletions(-) diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 29ea3efe9..356599e7e 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -13,6 +13,7 @@ class Front_desk def initialize # an array of rooms @total_rooms = room_generator + @total_reservations = [] end # list of all rooms @@ -22,28 +23,28 @@ def room_generator @total_rooms << Room.new(count) count += 1 end + return @total_rooms end def list_rooms return @total_rooms end # list of all reservations - def reservation_data - return Hotel::Reservation.all + def list_reservations + return @total_reservations end - def valid_date?(str, format = "%m/%d/%Y") - Date.strptime(str,format) rescue false + def available_rooms(start_date, end_date) + first_date = DateTime.parse(start_date) + = end # to create a reservation def add_room(start_date, end_date) - if valid_date?(start_date) - if valid_date?(end_date) new_ticket = {} new_ticket[:ticket_id] = reservation_data.length + 1 - new_ticket[:start_date] = Date.parse(start_date) - new_ticket[:end_date] = Date.parse(end_date) + new_ticket[:start_date] = DateTime.parse(start_date) + new_ticket[:end_date] = DateTime.parse(end_date) @total_rooms.find do |room| new_ticket[:room_id] = room.sample diff --git a/lib/reservation.rb b/lib/reservation.rb index 9f0f7fde9..d4986803d 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -6,23 +6,24 @@ class Reservation attr_reader :ticket_id, :start_date, :end_date + @@count = 1 + def initialize(input) - @ticket_id = input[:ticket_id] - @start_date = input[:start_date] - @end_date = input[:end_date] + @ticket_id = @@count + @start_date = DateTime.parse(input[:start_date]) + @end_date = DateTime.parse(input[:end_date]) @room = input[:room_id] - @reservations = [] + @@count += 1 + + correct_date + end + def correct_date if @end_date < @start_date raise ArgumentError('Invalid Date Range') end - - @reservations << input end - def self.all - return @reservations - end def overlap?(sdate, edate) # (StartA <= EndB) and (EndA >= StartB) @@ -34,18 +35,6 @@ def total_cost return ((duration - 1) * 200) end - def check_cost(ticket_number) - @reservation.each do |room| - if ticket_number == room.ticket_id - return room.total_cost - else - raise ArgumentError('INVALID TICKET NUMBER') - end - end - - end - - end end diff --git a/lib/room.rb b/lib/room.rb index e4df89280..a6f3947d3 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -4,24 +4,17 @@ module Hotel class Room - attr_reader :room_id, :date_range + attr_reader :room_id, :price, :reservations def initialize(room) - @room_id = room[:room_id] - @date_range = [] + @room_id = number + @price = 200 + @reservations = [] # unless Front_desk::ROOM_ID.include?(@room_id) raise StandardError("INVALID ID") end end -# -# def available(start_date, end_date) -# end -# -# def add_reservation(input) -# -# end -# end end From 4d9b2eb9632f2ea39e57dbc0ded6d96ee44fc4a6 Mon Sep 17 00:00:00 2001 From: Ari Date: Sun, 1 Apr 2018 20:34:39 -0700 Subject: [PATCH 6/8] Fixed testing for front desk class --- .gitignore | 2 +- lib/front_desk.rb | 72 ++++++++++++++++++++-------------------- lib/reservation.rb | 11 ++---- lib/room.rb | 2 +- specs/front_desk_spec.rb | 63 +++++++++++++++++++++++++---------- specs/spec_helper.rb | 5 +-- 6 files changed, 89 insertions(+), 66 deletions(-) diff --git a/.gitignore b/.gitignore index 5e1422c9c..54a0fc95a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ /test/tmp/ /test/version_tmp/ /tmp/ - +coverage # Used by dotenv library to load environment variables. # .env diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 356599e7e..0078084b2 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -1,12 +1,12 @@ require 'date' -require_relative 'reservation' -require_relative 'room' +require_relative '../lib/reservation.rb' +require_relative '../lib/room.rb' module Hotel class Front_desk - attr_reader :total_rooms, :reservations + attr_reader :total_rooms, :total_reservations ROOM_ID = (1..20) @@ -18,12 +18,13 @@ def initialize # list of all rooms def room_generator + new_room = [] count = 1 ROOM_ID.each do |room| - @total_rooms << Room.new(count) + new_room << Room.new(count) count += 1 end - return @total_rooms + return new_room end def list_rooms @@ -34,43 +35,42 @@ def list_reservations return @total_reservations end - def available_rooms(start_date, end_date) - first_date = DateTime.parse(start_date) - = - end + def available?(start_date, end_date) + available_rooms = [] + first_day = DateTime.parse(start_date) + last_day = DateTime.parse(end_date) + # (StartA <= EndB) and (EndA >= StartB) - # to create a reservation - def add_room(start_date, end_date) - new_ticket = {} - new_ticket[:ticket_id] = reservation_data.length + 1 - new_ticket[:start_date] = DateTime.parse(start_date) - new_ticket[:end_date] = DateTime.parse(end_date) - - @total_rooms.find do |room| - new_ticket[:room_id] = room.sample - end - - reservaton_data.each do |room| - unless room.overlap?(start_date, end_date) - new_ticket[:room_id] = room.room_id - end - end - - reserved = Hotel::Reservation.new(new_ticket) - @reservations << reserved - return reserved - else - raise ArgumentError("INVALID END DATE") + @total_reservations.each do |reserve| + if first_day <= (reserve.end_date - 1) && last_day >= reserve.start_date + open_room = reserve.room + @total_rooms.reject! { |room| room.room_id == open_room } end - else - raise ArgumentError("INVALID START DATE") end + + @total_rooms.each do |room| + available_rooms << room.room_id + end + return available_rooms end + # to create a reservation + def add_room(start_date, end_date) + new_ticket = {} + new_ticket[:ticket_id] = 0 + + available = available?(start_date, end_date) + + new_ticket[:room_id] = available[0] + + new_ticket[:start_date] = DateTime.parse(start_date) + new_ticket[:end_date] = DateTime.parse(end_date) + + reserved = Hotel::Reservation.new(new_ticket) + + @total_reservations << reserved - # to check availablity - def check_date(date) - # check_day = Date.parse(date) + return reserved end diff --git a/lib/reservation.rb b/lib/reservation.rb index d4986803d..ae5bf09b7 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -4,14 +4,14 @@ module Hotel class Reservation - attr_reader :ticket_id, :start_date, :end_date + attr_reader :ticket_id, :start_date, :end_date, :room @@count = 1 def initialize(input) @ticket_id = @@count - @start_date = DateTime.parse(input[:start_date]) - @end_date = DateTime.parse(input[:end_date]) + @start_date = input[:start_date] + @end_date = input[:end_date] @room = input[:room_id] @@count += 1 @@ -25,11 +25,6 @@ def correct_date end - def overlap?(sdate, edate) - # (StartA <= EndB) and (EndA >= StartB) - return if start_date <= edate && end_date >= sdate - end - def total_cost duration = end_date - start_date return ((duration - 1) * 200) diff --git a/lib/room.rb b/lib/room.rb index a6f3947d3..e1c297b6d 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -7,7 +7,7 @@ class Room attr_reader :room_id, :price, :reservations def initialize(room) - @room_id = number + @room_id = room @price = 200 @reservations = [] # diff --git a/specs/front_desk_spec.rb b/specs/front_desk_spec.rb index 3d86a4c7e..5cfd6a5e1 100644 --- a/specs/front_desk_spec.rb +++ b/specs/front_desk_spec.rb @@ -1,46 +1,73 @@ require_relative 'spec_helper' require 'pry' - describe 'Front_desk' do describe 'Initialize' do it 'creates a list of 20 rooms' do - new_room = Hotel::Front_desk.new - new_room.total_rooms.must_be_kind_of Array - new_room.total_rooms.length.must_equal 20 + admin = Hotel::Front_desk.new + admin.total_rooms.must_be_kind_of Array + admin.total_rooms.length.must_equal 20 - new_room.total_rooms.each do |room| + admin.total_rooms.each do |room| room.must_be_instance_of Hotel::Room end end + it 'creates a list of reservations' do - new_room = Hotel::Front_desk.new - new_room.reservations.must_be_kind_of Array + admin = Hotel::Front_desk.new + admin.total_reservations.must_be_kind_of Array + + admin.total_reservations.each do |room| + room.must_be_instance_of Hotel::Reservation + end end end - describe 'room data' do + describe 'list of rooms' do it 'returns a list of all rooms' do + admin = Hotel::Front_desk.new + admin.list_rooms.must_be_kind_of Array + admin.list_rooms[10].must_be_kind_of Hotel::Room + admin.list_rooms[0].must_be_kind_of Hotel::Room + admin.list_rooms[21].must_be_nil end - admin = Hotel::Front_desk.new - room = Hotel::Room.new([1]) - admin.room_data.must_respond_to room - admin.room_data.must_output 1 - end + end - describe 'reservation data' do + describe 'list of reservations' do it 'can return a list of reservations' do + admin = Hotel::Front_desk.new + admin.add_room('3rd Feb 2020', '6th Feb 2020') + admin.total_reservations.must_be_kind_of Array + admin.total_reservations[0].must_be_instance_of Hotel::Reservation + admin.total_reservations[1].must_be_nil + end + end + + describe 'available?' do + it 'returns a list of available rooms within the given dates' do + + admin = Hotel::Front_desk.new + admin.add_room('4th Feb 2020', '6th Feb 2020') + admin.add_room('1st Feb 2020', '3rd Feb 2020') + admin.add_room('20th Mar 2020', '31st Mar 2020') + + available_rooms = admin.available?('1st Feb 2020', '5th Feb 2020') + + available_rooms.wont_include 1 + available_rooms.must_be_kind_of Array end end + describe 'Add Room' do it 'can create a reservation' do - room = Hotel::Front_desk.new + admin = Hotel::Front_desk.new + new_date = admin.add_room('3rd Feb 2020', '6th Feb 2020') - new_date = room.add_room('3rd Feb 2001', '6th Feb 2001') - # new_date.must_be_instance_of Hotel::Reservation - room.reservations.must_include new_date + admin.total_reservations.must_include new_date + new_date.must_be_kind_of Hotel::Reservation end end + end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index a0a9680ee..a71f96d5d 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -5,9 +5,10 @@ require 'minitest' require 'minitest/autorun' require 'minitest/reporters' + +Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new + require_relative '../lib/front_desk' require_relative '../lib/room' require_relative '../lib/reservation' # Add simplecov - -Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From 3e0dd54c10f74ba40d910cd192f13a1bdeb5261e Mon Sep 17 00:00:00 2001 From: Ari Date: Sun, 1 Apr 2018 22:24:09 -0700 Subject: [PATCH 7/8] Test for reservation class fixed --- lib/front_desk.rb | 1 - lib/reservation.rb | 10 ++++------ lib/room.rb | 6 ------ specs/reservation_spec.rb | 17 +++++++++++++++++ specs/room_spec.rb | 13 +++++++++++++ 5 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 specs/reservation_spec.rb create mode 100644 specs/room_spec.rb diff --git a/lib/front_desk.rb b/lib/front_desk.rb index 0078084b2..6605a4f40 100644 --- a/lib/front_desk.rb +++ b/lib/front_desk.rb @@ -58,7 +58,6 @@ def available?(start_date, end_date) def add_room(start_date, end_date) new_ticket = {} new_ticket[:ticket_id] = 0 - available = available?(start_date, end_date) new_ticket[:room_id] = available[0] diff --git a/lib/reservation.rb b/lib/reservation.rb index ae5bf09b7..9c59e41f5 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -9,19 +9,17 @@ class Reservation @@count = 1 def initialize(input) + @ticket_id = @@count @start_date = input[:start_date] @end_date = input[:end_date] @room = input[:room_id] @@count += 1 - correct_date - end - - def correct_date - if @end_date < @start_date - raise ArgumentError('Invalid Date Range') + unless @end_date > @start_date + raise StandardError('Invalid Date Range') end + end diff --git a/lib/room.rb b/lib/room.rb index e1c297b6d..4254070e5 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -3,17 +3,11 @@ module Hotel class Room - attr_reader :room_id, :price, :reservations def initialize(room) @room_id = room @price = 200 - @reservations = [] -# - unless Front_desk::ROOM_ID.include?(@room_id) - raise StandardError("INVALID ID") - end end end diff --git a/specs/reservation_spec.rb b/specs/reservation_spec.rb new file mode 100644 index 000000000..6a991cdeb --- /dev/null +++ b/specs/reservation_spec.rb @@ -0,0 +1,17 @@ +require_relative 'spec_helper' +require 'pry' + +describe 'Reservation class' do + + describe 'Initialize' do + it 'can create a new reservation' do + new_ticket = Hotel::Reservation.new({ start_date: DateTime.parse('3rd Feb 2020'), end_date: DateTime.parse('6th Feb 2020'), room_id: 1}) + + new_ticket.must_be_instance_of Hotel::Reservation + end + + it 'will raise an Error if date range is invalid' do + proc { Hotel::Reservation.new({ start_date: '10th Feb 2020', end_date: '6th Feb 2020', room_id: 1}) }.must_raise StandardError + end + end +end diff --git a/specs/room_spec.rb b/specs/room_spec.rb new file mode 100644 index 000000000..e616fd44f --- /dev/null +++ b/specs/room_spec.rb @@ -0,0 +1,13 @@ +require_relative 'spec_helper' + + +describe 'Room' do + describe 'Initialize' do + it 'can create a new room' do + new_room = Hotel::Room.new(21) + new_room.room_id.must_equal 21 + new_room.must_be_instance_of Hotel::Room + end + end + +end From a85f113240fb30527a4d83e4a3b069ade6ad8dbd Mon Sep 17 00:00:00 2001 From: Ari Date: Sun, 1 Apr 2018 22:37:29 -0700 Subject: [PATCH 8/8] Fixed Standard Error --- lib/reservation.rb | 2 +- specs/reservation_spec.rb | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 9c59e41f5..57bf7c761 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -16,7 +16,7 @@ def initialize(input) @room = input[:room_id] @@count += 1 - unless @end_date > @start_date + if @end_date < @start_date raise StandardError('Invalid Date Range') end diff --git a/specs/reservation_spec.rb b/specs/reservation_spec.rb index 6a991cdeb..8693ab079 100644 --- a/specs/reservation_spec.rb +++ b/specs/reservation_spec.rb @@ -11,7 +11,16 @@ end it 'will raise an Error if date range is invalid' do - proc { Hotel::Reservation.new({ start_date: '10th Feb 2020', end_date: '6th Feb 2020', room_id: 1}) }.must_raise StandardError + proc { Hotel::Reservation.new({ start_date: DateTime.parse('10th Feb 2020'), end_date: DateTime.parse('6th Feb 2020'), room_id: 1}) }.must_raise StandardError end end + + describe 'total cost' do + it 'can calculate the total cost of a reservation' do + new_ticket = Hotel::Reservation.new({ start_date: DateTime.parse('2nd Feb 2020'), end_date: DateTime.parse('6th Feb 2020'), room_id: 1}) + + new_ticket.total_cost.must_equal 600 + end + end + end