From a767ab27635a6c9a801d5516f95f950212ae91b1 Mon Sep 17 00:00:00 2001 From: Maryam Shitu Date: Tue, 4 Sep 2018 15:07:31 -0700 Subject: [PATCH 01/10] intial file set up spec files running --- lib/reservation.rb | 3 +++ lib/room.rb | 3 +++ spec/reservation_spec.rb | 18 ++++++++++++++++++ spec/room_spec.rb | 18 ++++++++++++++++++ spec/spec_helper.rb | 6 +++++- 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 lib/reservation.rb create mode 100644 lib/room.rb create mode 100644 spec/reservation_spec.rb create mode 100644 spec/room_spec.rb diff --git a/lib/reservation.rb b/lib/reservation.rb new file mode 100644 index 000000000..d1895053f --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,3 @@ +class Reservation + +end diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..6859a9e2c --- /dev/null +++ b/lib/room.rb @@ -0,0 +1,3 @@ +class Room + +end diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb new file mode 100644 index 000000000..ef5206d15 --- /dev/null +++ b/spec/reservation_spec.rb @@ -0,0 +1,18 @@ +require_relative 'spec_helper' +require 'minitest' +require 'minitest/autorun' +require 'minitest/reporters' + +Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new + +require_relative '../lib/room.rb' +require_relative '../lib/reservation.rb' +# Require_relative your lib files here! + +describe "Reservation" do + it "returns an instance of Reservation" do + new_room = Reservation.new + expect(new_room).must_be_kind_of Reservation + end + +end diff --git a/spec/room_spec.rb b/spec/room_spec.rb new file mode 100644 index 000000000..7004e7b80 --- /dev/null +++ b/spec/room_spec.rb @@ -0,0 +1,18 @@ +require_relative 'spec_helper' +require 'minitest' +require 'minitest/autorun' +require 'minitest/reporters' + +Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new + +require_relative '../lib/room.rb' +require_relative '../lib/reservation.rb' + + +describe "Room" do + it "returns an instance of Room" do + new_room = Room.new + expect(new_room).must_be_kind_of Room + end + +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 4d1e3fdc8..19448e311 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,8 +1,12 @@ +require 'simplecov' +SimpleCov.start require 'minitest' require 'minitest/autorun' require 'minitest/reporters' -# Add simplecov + Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new +require_relative '../lib/room.rb' +require_relative '../lib/reservation.rb' # Require_relative your lib files here! From 69157c85093353b158e675da49cf8d08db4845e2 Mon Sep 17 00:00:00 2001 From: Maryam Shitu Date: Thu, 6 Sep 2018 17:20:38 -0700 Subject: [PATCH 02/10] class straucture design --- lib/block_reservation.rb | 48 +++++++++++++++++++++++++++++++++++++ lib/hotel.rb | 41 +++++++++++++++++++++++++++++++ lib/reservation.rb | 52 +++++++++++++++++++++++++++++++++++++++- lib/room.rb | 18 +++++++++++++- spec/hotel_spec.rb | 17 +++++++++++++ 5 files changed, 174 insertions(+), 2 deletions(-) create mode 100644 lib/block_reservation.rb create mode 100644 lib/hotel.rb create mode 100644 spec/hotel_spec.rb diff --git a/lib/block_reservation.rb b/lib/block_reservation.rb new file mode 100644 index 000000000..261096f59 --- /dev/null +++ b/lib/block_reservation.rb @@ -0,0 +1,48 @@ +class BlockReservation + def initialize(number of rooms, start_time, end_time, rate) + number of rooms = integer + rate = integer + start_time - Time object + end_time - Time object + + id = integer - how will this be generated + block_reservations = [{}] + rooms - [array of room intance to accomate blocks] + cost - integer + #client -hash of client details + end + + + # def make_block_reservation(start_time, end_time) + # find room with stauts == avaible + # reservarions_list << BlockReservation.new(reservation_data) + # end + + def self.all + + block_reservations << all + returns list of all block reservations + end + + def list_block_reservations_by_date(date) + check block_reservations for reservation with start_time == date + end + + + def reservation_cost + cost == difference in days between end_time start_time * rate + end + + +end + +block_reservation_data = { + number_of_rooms: 1, + rate: 150.00, + start_time: 03-23-2019, + end_time: 03-26-2019, + rooms: room, + cost: 0 +} + +BlockRevservation.new(block_reservation_data) diff --git a/lib/hotel.rb b/lib/hotel.rb new file mode 100644 index 000000000..732d8e74f --- /dev/null +++ b/lib/hotel.rb @@ -0,0 +1,41 @@ +class Hotel + def initialize(reservarions, rooms) + reservarions = array of hashes that are instance of reservations + rooms = array of hashes that are instance of room + # list of block reservations - array of hashes that are instance of block reservations + end + + def make_reservation(checkin, checkout) + reserve_room + reservarions << Reservation.new(checkin, checkout) + end + + def rooms + rooms << 20.times generate Room + returns rooms + end + + def list_reservations + returns reservarions + end + + def list_rooms + returns rooms + end + + def find_reservation(date) + end + + def reserve_room => helper method? + find room with available status + changes room status + #add current_reservation + end + + # def reserve_block + # end + # + # def cancel_reservations + # end + +end diff --git a/lib/reservation.rb b/lib/reservation.rb index d1895053f..b6fbe0af4 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,3 +1,53 @@ class Reservation - + def initialize(start_time, end_time) + start_time = Time object + end_time = Time object + + # id = integer + room = [{room}] + cost = integer + reservarions_list = [{}] + block_reservations = [{}] + #client -hash of client details + end + + + def nights + # difference between checkin and checkout + # be mindful of checkout, no charge on that day + end + + def cost + # cost = nights * 200 + end + + + + # def make_block_reservation(number of rooms, start_time, end_time, rate) + # raise error of number of rooms > 5 + # assign 1 - 5 availble rooms to reservation + # cost = calculates discouted cost + # end + + end + +# Reservation.new(checkin, checkout) +# +# reservation_data = { +# checkin: 03-23-2019, +# checkout: 03-26-2019, +# +# # id = integer generate id? +# cost = integer # reservation_cost to generate cost +# room = room object +# } + +# block_reservation_data_ = { +# id: 1, +# start_time: 03-23-2019, +# end_time: 03-26-2019, +# rooms: [{room}, {room}, {room}], +# cost: 0 +# +# } diff --git a/lib/room.rb b/lib/room.rb index 6859a9e2c..e276a045b 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,3 +1,19 @@ class Room - + def initialize() + room_number = integer + #raise warning if room has number over 20 + reservations - [array of reservation hash] + status = symbol or string (avaible, unavaible, blocked) + end + + # def self.all_available(date) + # match reservation date and room availability + # returns all availble rooms found + # end + + + # def find_rooms(number_of_rooms) => helper method? + # find number_of_rooms that are availble + # assign to a reservation + # end end diff --git a/spec/hotel_spec.rb b/spec/hotel_spec.rb new file mode 100644 index 000000000..1c3a6a3f7 --- /dev/null +++ b/spec/hotel_spec.rb @@ -0,0 +1,17 @@ +require_relative 'spec_helper' +require 'minitest' +require 'minitest/autorun' +require 'minitest/reporters' + +Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new + +require_relative '../lib/room.rb' +require_relative '../lib/reservation.rb' + +describe "Hotel" do + it "returns an instance of Hotel" do + new_room = Room.new + expect(new_room).must_be_kind_of Hotel + end + +end From d59cc4eb0aaf8b8cd47a7aada6381905d5fc160d Mon Sep 17 00:00:00 2001 From: Maryam Shitu Date: Mon, 10 Sep 2018 12:26:40 -0700 Subject: [PATCH 03/10] creating a method to return a list of rooms by date --- lib/hotel.rb | 98 +++++++++++++++++++++++++++----------- lib/reservation.rb | 47 ++++++++---------- lib/room.rb | 15 ++++-- spec/hotel_spec.rb | 100 +++++++++++++++++++++++++++++++++++++-- spec/reservation_spec.rb | 30 ++++++++++-- spec/room_spec.rb | 7 ++- 6 files changed, 227 insertions(+), 70 deletions(-) diff --git a/lib/hotel.rb b/lib/hotel.rb index 732d8e74f..6e830f05d 100644 --- a/lib/hotel.rb +++ b/lib/hotel.rb @@ -1,41 +1,83 @@ +require 'date' class Hotel - def initialize(reservarions, rooms) - reservarions = array of hashes that are instance of reservations - rooms = array of hashes that are instance of room - # list of block reservations - array of hashes that are instance of block reservations + attr_reader :reservations, :rooms + # attr_accessor + def initialize(reservations = [], rooms = []) + @reservations = reservations # array of hashes that are instance of reservations + @rooms = generate_rooms # array of hashes that are instance of room + # @block_reservations = lock_reservations # array of hashes that are instance of block reservations end - def make_reservation(checkin, checkout) - reserve_room - reservarions << Reservation.new(checkin, checkout) + def make_reservation(check_in = Date.new(check_in), check_out = Date.new(check_out)) + # reserve_room + # check_in = Date.new(check_in) + # check_out = Date.new(check_out) + room = reserve_room + + reservation = Reservation.new(check_in, check_out, room) + @reservations << reservation + return reservation end - def rooms - rooms << 20.times generate Room - returns rooms + def generate_rooms + rooms = [] + room_number = 1 + until room_number == 21 + rooms << Room.new(room_number) + room_number += 1 end - def list_reservations - returns reservarions - end + return rooms + end + + def list_reservations + # returns reservarions + end + + def list_rooms_available(start_date, end_date) - def list_rooms - returns rooms - end + @rooms.each do |room| + if room.dates + # room.dates.include?(start_date) + end + end - def find_reservation(date) - end + def find_reservation(date) + @reservations.each do |reservation| + if reservation.check_in == date + return reservation + end + end + end + # compare directly to dates not status of room. + + # def find_available_rooms(check_in_search, check_out_search) + # @reservations.each do |reservation| + # # (reservation.check_in..reservation.check_out) == (check_in..check_out) || + # if reservation.check_out <= check_in_search + # return reservation.room + # end + # end + # end + + + def reserve_room # helper method + @rooms.each do |room| + if room.status == :available + room.status = :reserved + reserved_room = room + room.dates << reserved_room + return reserved_room + end + end + + # changes room status with helper method + end - def reserve_room => helper method? - find room with available status - changes room status - #add current_reservation - end + # def reserve_block + # end - # def reserve_block - # end - # - # def cancel_reservations - # end + # def cancel_reservations + # end end diff --git a/lib/reservation.rb b/lib/reservation.rb index b6fbe0af4..5f3e29d4b 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,27 +1,33 @@ class Reservation - def initialize(start_time, end_time) - start_time = Time object - end_time = Time object - - # id = integer - room = [{room}] - cost = integer - reservarions_list = [{}] - block_reservations = [{}] - #client -hash of client details + attr_reader :check_in, :check_out, :cost + # attr_accessor + def initialize(check_in, check_out, room) + @check_in = check_in + @check_out = check_out + @cost = reservation_cost + @room = room # turn to array of room object for block ? + + raise ArgumentError if check_in >= check_out + + # @block_reservation = block_reservation + # @id = integer + # @client = client # hash of client details end def nights - # difference between checkin and checkout - # be mindful of checkout, no charge on that day + nights = check_out - check_in + return nights end - def cost - # cost = nights * 200 + def reservation_cost + cost = nights * 200 + return cost end - + # def range + # return (check_in..check_out) + # end # def make_block_reservation(number of rooms, start_time, end_time, rate) # raise error of number of rooms > 5 @@ -32,16 +38,6 @@ def cost end -# Reservation.new(checkin, checkout) -# -# reservation_data = { -# checkin: 03-23-2019, -# checkout: 03-26-2019, -# -# # id = integer generate id? -# cost = integer # reservation_cost to generate cost -# room = room object -# } # block_reservation_data_ = { # id: 1, @@ -49,5 +45,4 @@ def cost # end_time: 03-26-2019, # rooms: [{room}, {room}, {room}], # cost: 0 -# # } diff --git a/lib/room.rb b/lib/room.rb index e276a045b..0fb14ef0b 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,9 +1,14 @@ class Room - def initialize() - room_number = integer - #raise warning if room has number over 20 - reservations - [array of reservation hash] - status = symbol or string (avaible, unavaible, blocked) + attr_reader :room_number, :dates + attr_accessor :status + def initialize(room_number, status = :available) + @room_number = room_number + @status = status # valid_status = [:available, :reserved, :blocked] + # @reservations = reservations # [array of reservation hash] + @dates = [] + + raise ArgumentError if room_number > 20 + end # def self.all_available(date) diff --git a/spec/hotel_spec.rb b/spec/hotel_spec.rb index 1c3a6a3f7..0089400c4 100644 --- a/spec/hotel_spec.rb +++ b/spec/hotel_spec.rb @@ -2,16 +2,106 @@ require 'minitest' require 'minitest/autorun' require 'minitest/reporters' +require 'pry' +require 'date' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new +require_relative '../lib/hotel.rb' require_relative '../lib/room.rb' require_relative '../lib/reservation.rb' -describe "Hotel" do - it "returns an instance of Hotel" do - new_room = Room.new - expect(new_room).must_be_kind_of Hotel +describe "Hotel Class" do ####### big describe opening + + describe "Initializer" do + before do + @hotel = Hotel.new + end + # let (:hotel) { hotel = Hotel.new + # } => this works but creates warnings => warning: assigned but unused variable - hotel + it "returns an instance of Hotel" do + expect(@hotel).must_be_kind_of Hotel + end + + it "initializes the correct data structure" do + expect(@hotel.rooms).must_be_kind_of Array + expect(@hotel.reservations).must_be_kind_of Array + end + + it "creates 20 rooms on initiation" do + expect(@hotel.rooms.length).must_equal 20 + end end -end + describe "Hotel#make_reservation" do + before do + @hotel = Hotel.new + end + + it "creates a reservation object" do + reservation = @hotel.make_reservation(2018923, 2018926) + expect(reservation).must_be_kind_of Reservation + end + + it "adds reservation to list of reservarions made" do + expect(@hotel.reservations).must_be_empty + @hotel.make_reservation(2018923, 2018926) + expect(@hotel.reservations.length).must_equal 1 + end + + it "reserves a room" do + expect(@hotel.reserve_room.room_number).must_equal 1 + expect(@hotel.reserve_room).must_be_kind_of Room + end + end + + describe "Hotel#find_reservation(date)" do + it "find a reservation using the date" do + hotel = Hotel.new + hotel.make_reservation(2018923, 2018926) + reservation_2 = hotel.make_reservation(20181023, 20181028) + + expect(hotel.find_reservation(2018923)).must_be_kind_of Reservation + expect(hotel.find_reservation(20181023)).must_equal reservation_2 + end + + it "finds the correct reservation using the date" do + hotel = Hotel.new + hotel.make_reservation(2018923, 2018926) + reservation_2 = hotel.make_reservation(20181023, 20181028) + + expect(hotel.find_reservation(2018923)).must_be_kind_of Reservation + expect(hotel.find_reservation(20181023)).must_equal reservation_2 + end + end + + describe "Hotel#list_rooms_available(start_date, end_date)" do + before do + @hotel = Hotel.new + @hotel.make_reservation(2018923, 2018926) + reservation_2 = @hotel.make_reservation(20181023, 20181028) + end + + it "finds room dates" do + binding.pry + expect(@hotel.list_rooms_available(2018923, 201892)) + end + end + # describe "Hotel#find_available_rooms(check_in, check_out)" do + # before do + # hotel = Hotel.new + # reservation_1 = hotel.make_reservation(2018923, 2018926) + # reservation_2 = hotel.make_reservation(2018923, 2018928) + # reservation_3 = hotel.make_reservation(2018925, 2018101) + # binding.pry + # end + # + # it "returns all rooms that are availble for given dates" do + # # binding.pry + # expect(hotel.find_available_rooms(2018923, 2018926)) + # end + # # + # end + + +end #######big describe closing diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index ef5206d15..7d5e9be54 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -2,17 +2,37 @@ require 'minitest' require 'minitest/autorun' require 'minitest/reporters' +require 'pry' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new require_relative '../lib/room.rb' require_relative '../lib/reservation.rb' -# Require_relative your lib files here! +require_relative '../lib/hotel.rb' + + +describe "Reservation Class" do + describe "initializer" do + before do + @hotel = Hotel.new + room = Room.new(2) + @new_reservation = Reservation.new(2018923, 2018926, room) + end + + it "returns an instance of Reservation" do + expect(@new_reservation).must_be_kind_of Reservation + end + + it "raises error when given invalid dates" do + room = Room.new(2) + expect {(Reservation.new(2018926, 2018923, room))}.must_raise ArgumentError + end + + it "calculates the reservation cost correctly" do + expect(@new_reservation.cost).must_equal 600 + end -describe "Reservation" do - it "returns an instance of Reservation" do - new_room = Reservation.new - expect(new_room).must_be_kind_of Reservation end + end diff --git a/spec/room_spec.rb b/spec/room_spec.rb index 7004e7b80..12adec3c1 100644 --- a/spec/room_spec.rb +++ b/spec/room_spec.rb @@ -11,8 +11,13 @@ describe "Room" do it "returns an instance of Room" do - new_room = Room.new + new_room = Room.new(13) expect(new_room).must_be_kind_of Room end + it "raises an error if room number is higher than 20" do + # new_room = Room.new(21) + expect{(Room.new(21))}.must_raise ArgumentError + end + end From c8e5bbf3143bcc433acac52ef6808c45d3a0af42 Mon Sep 17 00:00:00 2001 From: Maryam Shitu Date: Wed, 12 Sep 2018 09:34:24 -0700 Subject: [PATCH 04/10] methods updates --- lib/hotel.rb | 77 +++++++++++++++------------------------- lib/reservation.rb | 16 ++++----- lib/room.rb | 23 ++++++------ spec/hotel_spec.rb | 12 +++---- spec/reservation_spec.rb | 7 ++-- 5 files changed, 57 insertions(+), 78 deletions(-) diff --git a/lib/hotel.rb b/lib/hotel.rb index 6e830f05d..2d74bd5ab 100644 --- a/lib/hotel.rb +++ b/lib/hotel.rb @@ -3,77 +3,58 @@ class Hotel attr_reader :reservations, :rooms # attr_accessor def initialize(reservations = [], rooms = []) - @reservations = reservations # array of hashes that are instance of reservations - @rooms = generate_rooms # array of hashes that are instance of room - # @block_reservations = lock_reservations # array of hashes that are instance of block reservations + @reservations = reservations + @rooms = generate_rooms + # @block_reservations = lock_reservations end def make_reservation(check_in = Date.new(check_in), check_out = Date.new(check_out)) - # reserve_room - # check_in = Date.new(check_in) - # check_out = Date.new(check_out) - room = reserve_room - - reservation = Reservation.new(check_in, check_out, room) + # room = @rooms.select do + # |room| room.available?(check_in, check_out) + # end + # room = room.first # find correct syntax to merge wit above + reservation = Reservation.new(check_in, check_out) @reservations << reservation + binding.pry + room.reserve(reservation) return reservation end def generate_rooms - rooms = [] - room_number = 1 - until room_number == 21 - rooms << Room.new(room_number) - room_number += 1 + rooms = 20.times.map do |number| + Room.new(number) end - return rooms end - def list_reservations - # returns reservarions - end - - def list_rooms_available(start_date, end_date) - + def rooms_available(check_in, check_out) @rooms.each do |room| - if room.dates - # room.dates.include?(start_date) + room.available?(check_in, check_out) end end - def find_reservation(date) + def find_reservation(check_out, check_in) @reservations.each do |reservation| - if reservation.check_in == date - return reservation - end + return reservation if reservation.during?(check_out, check_in) + return "Reservation not found" end end - # compare directly to dates not status of room. - # def find_available_rooms(check_in_search, check_out_search) - # @reservations.each do |reservation| - # # (reservation.check_in..reservation.check_out) == (check_in..check_out) || - # if reservation.check_out <= check_in_search - # return reservation.room - # end + # def reserve_room # helper method + # @rooms.each do |room| + # + # available? + # if room.status == :available + # room.status = :reserved + # reserved_room = room + # room.dates << reserved_room + # return reserved_room + # end # end + # + # # changes room status with helper method # end - - def reserve_room # helper method - @rooms.each do |room| - if room.status == :available - room.status = :reserved - reserved_room = room - room.dates << reserved_room - return reserved_room - end - end - - # changes room status with helper method - end - # def reserve_block # end diff --git a/lib/reservation.rb b/lib/reservation.rb index 5f3e29d4b..1f88830c9 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,11 +1,11 @@ class Reservation - attr_reader :check_in, :check_out, :cost - # attr_accessor - def initialize(check_in, check_out, room) + attr_reader :check_in, :check_out, :cost, :date_range + def initialize(check_in, check_out)# room @check_in = check_in @check_out = check_out + @date_range = check_out..check_in @cost = reservation_cost - @room = room # turn to array of room object for block ? + @room = room raise ArgumentError if check_in >= check_out @@ -14,7 +14,6 @@ def initialize(check_in, check_out, room) # @client = client # hash of client details end - def nights nights = check_out - check_in return nights @@ -25,9 +24,10 @@ def reservation_cost return cost end - # def range - # return (check_in..check_out) - # end + def during?(check_out, check_in) + @date_range.include?(check_out) || @date_range.include?(end_date) + # What about intersecting reservarions + end # def make_block_reservation(number of rooms, start_time, end_time, rate) # raise error of number of rooms > 5 diff --git a/lib/room.rb b/lib/room.rb index 0fb14ef0b..413ef0537 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,24 +1,23 @@ class Room - attr_reader :room_number, :dates + attr_reader :room_number, :dates, :reservations attr_accessor :status def initialize(room_number, status = :available) @room_number = room_number @status = status # valid_status = [:available, :reserved, :blocked] - # @reservations = reservations # [array of reservation hash] - @dates = [] + @reservations = [] raise ArgumentError if room_number > 20 - end - # def self.all_available(date) - # match reservation date and room availability - # returns all availble rooms found - # end + def reserve(reservation) + @reservations << reservation + end + def available?(start_date, end_date) + # status == :available ? true : false + @reservarions.none? do |reservation| + reservation.during?(check_in, check_out) + end + end - # def find_rooms(number_of_rooms) => helper method? - # find number_of_rooms that are availble - # assign to a reservation - # end end diff --git a/spec/hotel_spec.rb b/spec/hotel_spec.rb index 0089400c4..32de2f58d 100644 --- a/spec/hotel_spec.rb +++ b/spec/hotel_spec.rb @@ -36,23 +36,23 @@ describe "Hotel#make_reservation" do before do @hotel = Hotel.new + reservation = @hotel.make_reservation(2018923, 2018926) end it "creates a reservation object" do - reservation = @hotel.make_reservation(2018923, 2018926) expect(reservation).must_be_kind_of Reservation end it "adds reservation to list of reservarions made" do - expect(@hotel.reservations).must_be_empty + # expect(@hotel.reservations).must_be_nil @hotel.make_reservation(2018923, 2018926) expect(@hotel.reservations.length).must_equal 1 end - it "reserves a room" do - expect(@hotel.reserve_room.room_number).must_equal 1 - expect(@hotel.reserve_room).must_be_kind_of Room - end + # TODO: + # it "reserves a room on reservation" do + # + # end end describe "Hotel#find_reservation(date)" do diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index 7d5e9be54..6eefce7a9 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -14,13 +14,12 @@ describe "Reservation Class" do describe "initializer" do before do - @hotel = Hotel.new room = Room.new(2) - @new_reservation = Reservation.new(2018923, 2018926, room) + @reservation = Reservation.new(2018923, 2018926, room) end it "returns an instance of Reservation" do - expect(@new_reservation).must_be_kind_of Reservation + expect(@reservation).must_be_kind_of Reservation end it "raises error when given invalid dates" do @@ -29,7 +28,7 @@ end it "calculates the reservation cost correctly" do - expect(@new_reservation.cost).must_equal 600 + expect(@reservation.cost).must_equal 600 end end From a47396c24bd0dfe2e0216e19e0730a822cbb1f23 Mon Sep 17 00:00:00 2001 From: Maryam Shitu Date: Wed, 12 Sep 2018 21:42:13 -0700 Subject: [PATCH 05/10] adjusting to refactor Hotel#Reservation tests, Reservation and Room tests --- lib/hotel.rb | 2 +- spec/hotel_spec.rb | 34 +++++++++++++++++++--------------- spec/reservation_spec.rb | 4 ++-- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/lib/hotel.rb b/lib/hotel.rb index 2d74bd5ab..243e161be 100644 --- a/lib/hotel.rb +++ b/lib/hotel.rb @@ -15,7 +15,7 @@ def make_reservation(check_in = Date.new(check_in), check_out = Date.new(check_o # room = room.first # find correct syntax to merge wit above reservation = Reservation.new(check_in, check_out) @reservations << reservation - binding.pry + room.reserve(reservation) return reservation end diff --git a/spec/hotel_spec.rb b/spec/hotel_spec.rb index 32de2f58d..648fcfd23 100644 --- a/spec/hotel_spec.rb +++ b/spec/hotel_spec.rb @@ -36,15 +36,17 @@ describe "Hotel#make_reservation" do before do @hotel = Hotel.new - reservation = @hotel.make_reservation(2018923, 2018926) + room = Room.new(2) + @reservation = @hotel.make_reservation(2018923, 2018926, room) end it "creates a reservation object" do - expect(reservation).must_be_kind_of Reservation + binding.pry + expect(@reservation).must_be_kind_of Reservation end it "adds reservation to list of reservarions made" do - # expect(@hotel.reservations).must_be_nil + expect(@hotel.reservations).must_be_nil @hotel.make_reservation(2018923, 2018926) expect(@hotel.reservations.length).must_equal 1 end @@ -58,6 +60,7 @@ describe "Hotel#find_reservation(date)" do it "find a reservation using the date" do hotel = Hotel.new + room = Room.new(2) hotel.make_reservation(2018923, 2018926) reservation_2 = hotel.make_reservation(20181023, 20181028) @@ -67,6 +70,7 @@ it "finds the correct reservation using the date" do hotel = Hotel.new + room = Room.new(2) hotel.make_reservation(2018923, 2018926) reservation_2 = hotel.make_reservation(20181023, 20181028) @@ -75,18 +79,18 @@ end end - describe "Hotel#list_rooms_available(start_date, end_date)" do - before do - @hotel = Hotel.new - @hotel.make_reservation(2018923, 2018926) - reservation_2 = @hotel.make_reservation(20181023, 20181028) - end - - it "finds room dates" do - binding.pry - expect(@hotel.list_rooms_available(2018923, 201892)) - end - end + # describe "Hotel#list_rooms_available(start_date, end_date)" do + # before do + # @hotel = Hotel.new + # @hotel.make_reservation(2018923, 2018926) + # reservation_2 = @hotel.make_reservation(20181023, 20181028) + # end + # + # it "finds room dates" do + # binding.pry + # expect(@hotel.list_rooms_available(2018923, 201892)) + # end + # end # describe "Hotel#find_available_rooms(check_in, check_out)" do # before do # hotel = Hotel.new diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index 6eefce7a9..66169d169 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -15,7 +15,7 @@ describe "initializer" do before do room = Room.new(2) - @reservation = Reservation.new(2018923, 2018926, room) + @reservation = Reservation.new(2018923, 2018926) end it "returns an instance of Reservation" do @@ -24,7 +24,7 @@ it "raises error when given invalid dates" do room = Room.new(2) - expect {(Reservation.new(2018926, 2018923, room))}.must_raise ArgumentError + expect {(Reservation.new(2018926, 2018923))}.must_raise ArgumentError end it "calculates the reservation cost correctly" do From 080b7367b52e7eddf41ee6065f3302006ed60bfe Mon Sep 17 00:00:00 2001 From: Maryam Shitu Date: Wed, 12 Sep 2018 22:14:06 -0700 Subject: [PATCH 06/10] creating tests Hotel#makereservation small progress --- lib/hotel.rb | 12 ++++++------ lib/reservation.rb | 4 ++-- spec/hotel_spec.rb | 2 +- spec/reservation_spec.rb | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/hotel.rb b/lib/hotel.rb index 243e161be..3793f4d8e 100644 --- a/lib/hotel.rb +++ b/lib/hotel.rb @@ -9,13 +9,13 @@ def initialize(reservations = [], rooms = []) end def make_reservation(check_in = Date.new(check_in), check_out = Date.new(check_out)) - # room = @rooms.select do - # |room| room.available?(check_in, check_out) - # end - # room = room.first # find correct syntax to merge wit above - reservation = Reservation.new(check_in, check_out) - @reservations << reservation + room = @rooms.select do + |room| room.available?(check_in, check_out) + end + room = room.first + reservation = Reservation.new(check_in, check_out, room) + @reservations << reservation room.reserve(reservation) return reservation end diff --git a/lib/reservation.rb b/lib/reservation.rb index 1f88830c9..f2ed50714 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,6 +1,6 @@ class Reservation - attr_reader :check_in, :check_out, :cost, :date_range - def initialize(check_in, check_out)# room + attr_reader :check_in, :check_out, :cost, :date_range, :room + def initialize(check_in, check_out, room)# room @check_in = check_in @check_out = check_out @date_range = check_out..check_in diff --git a/spec/hotel_spec.rb b/spec/hotel_spec.rb index 648fcfd23..c246ffbab 100644 --- a/spec/hotel_spec.rb +++ b/spec/hotel_spec.rb @@ -37,7 +37,7 @@ before do @hotel = Hotel.new room = Room.new(2) - @reservation = @hotel.make_reservation(2018923, 2018926, room) + @reservation = @hotel.make_reservation(2018923, 2018926) end it "creates a reservation object" do diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index 66169d169..6eefce7a9 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -15,7 +15,7 @@ describe "initializer" do before do room = Room.new(2) - @reservation = Reservation.new(2018923, 2018926) + @reservation = Reservation.new(2018923, 2018926, room) end it "returns an instance of Reservation" do @@ -24,7 +24,7 @@ it "raises error when given invalid dates" do room = Room.new(2) - expect {(Reservation.new(2018926, 2018923))}.must_raise ArgumentError + expect {(Reservation.new(2018926, 2018923, room))}.must_raise ArgumentError end it "calculates the reservation cost correctly" do From 787be5bc5bcca3a892959cdd98a79a8fd493fda7 Mon Sep 17 00:00:00 2001 From: Maryam Shitu Date: Wed, 12 Sep 2018 22:21:40 -0700 Subject: [PATCH 07/10] made some fixes --- lib/reservation.rb | 2 +- spec/hotel_spec.rb | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index f2ed50714..a17b91c2a 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,6 +1,6 @@ class Reservation attr_reader :check_in, :check_out, :cost, :date_range, :room - def initialize(check_in, check_out, room)# room + def initialize(check_in, check_out, room)# roomgit @check_in = check_in @check_out = check_out @date_range = check_out..check_in diff --git a/spec/hotel_spec.rb b/spec/hotel_spec.rb index c246ffbab..a93b63f56 100644 --- a/spec/hotel_spec.rb +++ b/spec/hotel_spec.rb @@ -60,7 +60,6 @@ describe "Hotel#find_reservation(date)" do it "find a reservation using the date" do hotel = Hotel.new - room = Room.new(2) hotel.make_reservation(2018923, 2018926) reservation_2 = hotel.make_reservation(20181023, 20181028) @@ -70,7 +69,6 @@ it "finds the correct reservation using the date" do hotel = Hotel.new - room = Room.new(2) hotel.make_reservation(2018923, 2018926) reservation_2 = hotel.make_reservation(20181023, 20181028) From c5f92fe25a4234c75b3fedb7420438d2cf8e5624 Mon Sep 17 00:00:00 2001 From: Maryam Shitu Date: Thu, 13 Sep 2018 00:07:21 -0700 Subject: [PATCH 08/10] create working tests fix how room gets reservation and available? methods --- lib/hotel.rb | 8 ++--- lib/reservation.rb | 21 +++---------- lib/room.rb | 19 ++++++----- spec/hotel_spec.rb | 78 +++++++++++++++++++++++----------------------- spec/room_spec.rb | 1 - 5 files changed, 56 insertions(+), 71 deletions(-) diff --git a/lib/hotel.rb b/lib/hotel.rb index 3793f4d8e..a8d550acb 100644 --- a/lib/hotel.rb +++ b/lib/hotel.rb @@ -9,10 +9,8 @@ def initialize(reservations = [], rooms = []) end def make_reservation(check_in = Date.new(check_in), check_out = Date.new(check_out)) - room = @rooms.select do - |room| room.available?(check_in, check_out) - end - room = room.first + + room = rooms_available(check_in, check_out).first reservation = Reservation.new(check_in, check_out, room) @reservations << reservation @@ -28,7 +26,7 @@ def generate_rooms end def rooms_available(check_in, check_out) - @rooms.each do |room| + free_rooms = @rooms.select do |room| room.available?(check_in, check_out) end end diff --git a/lib/reservation.rb b/lib/reservation.rb index a17b91c2a..27e66894c 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,6 +1,6 @@ class Reservation attr_reader :check_in, :check_out, :cost, :date_range, :room - def initialize(check_in, check_out, room)# roomgit + def initialize(check_in, check_out, room) @check_in = check_in @check_out = check_out @date_range = check_out..check_in @@ -10,8 +10,8 @@ def initialize(check_in, check_out, room)# roomgit raise ArgumentError if check_in >= check_out # @block_reservation = block_reservation - # @id = integer - # @client = client # hash of client details + # @id = id + # @client = client end def nights @@ -26,23 +26,12 @@ def reservation_cost def during?(check_out, check_in) @date_range.include?(check_out) || @date_range.include?(end_date) - # What about intersecting reservarions + # What about intersecting reservarions? end # def make_block_reservation(number of rooms, start_time, end_time, rate) # raise error of number of rooms > 5 # assign 1 - 5 availble rooms to reservation - # cost = calculates discouted cost + # cost = calculates using discouted cost # end - - end - - -# block_reservation_data_ = { -# id: 1, -# start_time: 03-23-2019, -# end_time: 03-26-2019, -# rooms: [{room}, {room}, {room}], -# cost: 0 -# } diff --git a/lib/room.rb b/lib/room.rb index 413ef0537..92e347fcf 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,10 +1,10 @@ class Room - attr_reader :room_number, :dates, :reservations - attr_accessor :status - def initialize(room_number, status = :available) + attr_reader :room_number, :dates + attr_accessor :status, :reservations + def initialize(room_number, status = :available, reservations = []) @room_number = room_number @status = status # valid_status = [:available, :reserved, :blocked] - @reservations = [] + @reservations = reservations raise ArgumentError if room_number > 20 end @@ -13,11 +13,10 @@ def reserve(reservation) @reservations << reservation end - def available?(start_date, end_date) - # status == :available ? true : false - @reservarions.none? do |reservation| - reservation.during?(check_in, check_out) - end - end + # def available?(check_in, check_out) + # @reservarions.none? do |reservation| + # reservation.during?(check_in, check_out) + # end + # end end diff --git a/spec/hotel_spec.rb b/spec/hotel_spec.rb index a93b63f56..2a579885b 100644 --- a/spec/hotel_spec.rb +++ b/spec/hotel_spec.rb @@ -11,7 +11,7 @@ require_relative '../lib/room.rb' require_relative '../lib/reservation.rb' -describe "Hotel Class" do ####### big describe opening +describe "Hotel Class" do describe "Initializer" do before do @@ -30,52 +30,52 @@ it "creates 20 rooms on initiation" do expect(@hotel.rooms.length).must_equal 20 - end - end - - describe "Hotel#make_reservation" do - before do - @hotel = Hotel.new - room = Room.new(2) - @reservation = @hotel.make_reservation(2018923, 2018926) - end - - it "creates a reservation object" do binding.pry - expect(@reservation).must_be_kind_of Reservation end + end - it "adds reservation to list of reservarions made" do - expect(@hotel.reservations).must_be_nil - @hotel.make_reservation(2018923, 2018926) - expect(@hotel.reservations.length).must_equal 1 - end + # describe "Hotel#make_reservation" do + # before do + # @hotel = Hotel.new + # end + # + # it "creates a reservation object" do + # reservation = @hotel.make_reservation(2018923, 2018926) + # expect(reservation).must_be_kind_of Reservation + # end + # + # it "adds reservation to list of reservarions made" do + # # expect(@hotel.reservations).must_be_nil + # @hotel.make_reservation(2018923, 2018926) + # binding.pry + # expect(@hotel.reservations.length).must_equal 1 + # end # TODO: # it "reserves a room on reservation" do # # end - end - - describe "Hotel#find_reservation(date)" do - it "find a reservation using the date" do - hotel = Hotel.new - hotel.make_reservation(2018923, 2018926) - reservation_2 = hotel.make_reservation(20181023, 20181028) - - expect(hotel.find_reservation(2018923)).must_be_kind_of Reservation - expect(hotel.find_reservation(20181023)).must_equal reservation_2 - end - - it "finds the correct reservation using the date" do - hotel = Hotel.new - hotel.make_reservation(2018923, 2018926) - reservation_2 = hotel.make_reservation(20181023, 20181028) + # end - expect(hotel.find_reservation(2018923)).must_be_kind_of Reservation - expect(hotel.find_reservation(20181023)).must_equal reservation_2 - end - end + # describe "Hotel#find_reservation(date)" do + # it "find a reservation using the date" do + # hotel = Hotel.new + # hotel.make_reservation(2018923, 2018926) + # reservation_2 = hotel.make_reservation(20181023, 20181028) + # + # expect(hotel.find_reservation(2018923)).must_be_kind_of Reservation + # expect(hotel.find_reservation(20181023)).must_equal reservation_2 + # end + # + # it "finds the correct reservation using the date" do + # hotel = Hotel.new + # hotel.make_reservation(2018923, 2018926) + # reservation_2 = hotel.make_reservation(20181023, 20181028) + # + # expect(hotel.find_reservation(2018923)).must_be_kind_of Reservation + # expect(hotel.find_reservation(20181023)).must_equal reservation_2 + # end + # end # describe "Hotel#list_rooms_available(start_date, end_date)" do # before do @@ -106,4 +106,4 @@ # end -end #######big describe closing +end diff --git a/spec/room_spec.rb b/spec/room_spec.rb index 12adec3c1..e5239d2c9 100644 --- a/spec/room_spec.rb +++ b/spec/room_spec.rb @@ -16,7 +16,6 @@ end it "raises an error if room number is higher than 20" do - # new_room = Room.new(21) expect{(Room.new(21))}.must_raise ArgumentError end From 1dcd8582c80be2a81978938862a68ef323b08eae Mon Sep 17 00:00:00 2001 From: Maryam Shitu Date: Tue, 25 Sep 2018 18:03:37 -0700 Subject: [PATCH 09/10] design-activity created and amswered --- design-activity.md | 68 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 design-activity.md diff --git a/design-activity.md b/design-activity.md new file mode 100644 index 000000000..e7333f00a --- /dev/null +++ b/design-activity.md @@ -0,0 +1,68 @@ +What classes does each implementation include? Are the lists the same? +Write down a sentence to describe each class. + + Implementation A + CartEntry class: initializes unit price and quantity variables + ShoppingCart class: initializes an array of entries + Order class: initializes a new shopping cart, calculates total price using cart entries and uses the unit price and quantity of each cart entry. + + + Implementation B + CartEntry class: initializes unit price and quantity variables, calculates the price of each cart entry + ShoppingCart class: initializes an array of entries, calculates price (cart total) using the sum of prices for all cart entries + Order class: initializes a new shopping cart, calculates total price, by adding sales tax and shopping cart price. + + The two implementations have the same list of classes. But the classes do different things, in implementation B. Calculations for prices and done within individual classes unlike A which does all the calculations in the Order class. + +How do the classes relate to each other? It might be helpful to draw a diagram on a whiteboard or piece of paper. + + ShoppingCart is populated with an array of CartEntry instances, it also calls the CartEntry method price and used in defining ShoppingCart#price. + + Order is populated with an instance of ShoppingCart. It has a method total price that calls the ShoppingCart#price method. + + +What data does each class store? How (if at all) does this differ between the two implementations? + + + CartEntry contains two integers variables (I'm assuming unit price and quantity will be integers). The class does not store data, it creates a CartEntry. + + ShoppingCart has an array stored in the @entires variable that stores instances of CartEntry. + + Order contains the @cart variable which is an instance of ShoppingCart. The class does not store any data + +What methods does each class have? How (if at all) does this differ between the two implementations? + + Implementation A + CartEntry has no methods + ShoppingCart has no methods + Order has total_price method + + Implementation B + CartEntry has a price method + ShoppingCart has a price method + Order has a total_price method + + +Consider the Order#total_price method. In each implementation: +Is logic to compute the price delegated to "lower level" classes like ShoppingCart and CartEntry, or is it retained in Order? + + Implementation A + The price logic is retained in Order + + Implementation B + The price logic is delegated to lower level classes + +Does total_price directly manipulate the instance variables of other classes? + + total_price does not directly manipulate the instance variables of other classes. + +If we decide items are cheaper if bought in bulk, how would this change the code? Which implementation is easier to modify? + + Implementation B will be easier to modify because it is loosely couple. + +Which implementation better adheres to the single responsibility principle? + Implementation B + + +Bonus question once you've read Metz ch. 3: Which implementation is more loosely coupled? + Implementation B is more loosely coupled because classes are responsible for their prices unlike in Implementation A. From bf64a4df58db10d1e64591de2006b1494e68235c Mon Sep 17 00:00:00 2001 From: Maryam Shitu Date: Mon, 8 Oct 2018 09:05:21 -0700 Subject: [PATCH 10/10] design writing --- design-activity.md | 7 ++- lib/reservation.rb | 3 +- lib/{hotel.rb => reservation_manager.rb} | 43 ++++++------- lib/room.rb | 16 +++-- ...el_spec.rb => reservation_manager_spec.rb} | 61 ++++++++++--------- spec/reservation_spec.rb | 2 +- spec/room_spec.rb | 4 -- 7 files changed, 70 insertions(+), 66 deletions(-) rename lib/{hotel.rb => reservation_manager.rb} (72%) rename spec/{hotel_spec.rb => reservation_manager_spec.rb} (63%) diff --git a/design-activity.md b/design-activity.md index e7333f00a..475aa56fa 100644 --- a/design-activity.md +++ b/design-activity.md @@ -58,11 +58,16 @@ Does total_price directly manipulate the instance variables of other classes? If we decide items are cheaper if bought in bulk, how would this change the code? Which implementation is easier to modify? - Implementation B will be easier to modify because it is loosely couple. + Implementation B will be easier to modify because it is loosely couple. Which implementation better adheres to the single responsibility principle? + Implementation B Bonus question once you've read Metz ch. 3: Which implementation is more loosely coupled? + Implementation B is more loosely coupled because classes are responsible for their prices unlike in Implementation A. + +I think it would lessen dependencies if each room does not know about all the reservations it has. I made it like this as a way to check if a room is available for a given date range. If I can think of a better design for how rooms are available, rooms won't need to know reservations. + diff --git a/lib/reservation.rb b/lib/reservation.rb index 27e66894c..63dc8ff47 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -25,8 +25,7 @@ def reservation_cost end def during?(check_out, check_in) - @date_range.include?(check_out) || @date_range.include?(end_date) - # What about intersecting reservarions? + @date_range.include?(check_out) end # def make_block_reservation(number of rooms, start_time, end_time, rate) diff --git a/lib/hotel.rb b/lib/reservation_manager.rb similarity index 72% rename from lib/hotel.rb rename to lib/reservation_manager.rb index a8d550acb..3a94fa54c 100644 --- a/lib/hotel.rb +++ b/lib/reservation_manager.rb @@ -1,36 +1,43 @@ require 'date' -class Hotel +class ReservationManager attr_reader :reservations, :rooms # attr_accessor def initialize(reservations = [], rooms = []) @reservations = reservations @rooms = generate_rooms - # @block_reservations = lock_reservations + # @block_reservations = block_reservations end - def make_reservation(check_in = Date.new(check_in), check_out = Date.new(check_out)) + def generate_rooms + rooms = 20.times.map do |number| + Room.new(number) + end + return rooms + end + def make_reservation(check_in = Date.new(check_in), check_out = Date.new(check_out)) room = rooms_available(check_in, check_out).first - reservation = Reservation.new(check_in, check_out, room) @reservations << reservation room.reserve(reservation) return reservation end - def generate_rooms - rooms = 20.times.map do |number| - Room.new(number) - end - return rooms - end - def rooms_available(check_in, check_out) free_rooms = @rooms.select do |room| room.available?(check_in, check_out) end + return free_rooms end +# rethinking design +# def rooms_available(check_in, check_out) +# free_rooms = @rooms.select do |room| +# room.room_availble?(check_in, check_out) +# end +# return free_rooms +# end + def find_reservation(check_out, check_in) @reservations.each do |reservation| return reservation if reservation.during?(check_out, check_in) @@ -38,19 +45,7 @@ def find_reservation(check_out, check_in) end end - # def reserve_room # helper method - # @rooms.each do |room| - # - # available? - # if room.status == :available - # room.status = :reserved - # reserved_room = room - # room.dates << reserved_room - # return reserved_room - # end - # end - # - # # changes room status with helper method + # def list_reservations(check_out, check_in) # end # def reserve_block diff --git a/lib/room.rb b/lib/room.rb index 92e347fcf..c6db0c906 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,10 +1,13 @@ class Room + # This class seems to mostly serve as a a container for reservations, which might be better served as a feature of your Hotel class. attr_reader :room_number, :dates attr_accessor :status, :reservations def initialize(room_number, status = :available, reservations = []) @room_number = room_number @status = status # valid_status = [:available, :reserved, :blocked] @reservations = reservations + # rethinking design + @dates_range = check_in..check_out raise ArgumentError if room_number > 20 end @@ -13,10 +16,13 @@ def reserve(reservation) @reservations << reservation end - # def available?(check_in, check_out) - # @reservarions.none? do |reservation| - # reservation.during?(check_in, check_out) - # end - # end + def available?(check_in, check_out) + @reservations.each do |reservation| + reservation.during?(check_in, check_out) + end + end + def room_availble?(check_in, check_out) + @date_range.include?(check_out) + end end diff --git a/spec/hotel_spec.rb b/spec/reservation_manager_spec.rb similarity index 63% rename from spec/hotel_spec.rb rename to spec/reservation_manager_spec.rb index 2a579885b..fdf5e0e3f 100644 --- a/spec/hotel_spec.rb +++ b/spec/reservation_manager_spec.rb @@ -7,55 +7,58 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new -require_relative '../lib/hotel.rb' +require_relative '../lib/reservation_manager.rb' require_relative '../lib/room.rb' require_relative '../lib/reservation.rb' -describe "Hotel Class" do +describe "ReservationManagers Class" do describe "Initializer" do before do - @hotel = Hotel.new + @reservation_manager = ReservationManager.new end - # let (:hotel) { hotel = Hotel.new - # } => this works but creates warnings => warning: assigned but unused variable - hotel - it "returns an instance of Hotel" do - expect(@hotel).must_be_kind_of Hotel + + it "returns an instance of ReservationManager" do + expect(@reservation_manager).must_be_kind_of ReservationManager end it "initializes the correct data structure" do - expect(@hotel.rooms).must_be_kind_of Array - expect(@hotel.reservations).must_be_kind_of Array + expect(@reservation_manager.rooms).must_be_kind_of Array + expect(@reservation_manager.reservations).must_be_kind_of Array end it "creates 20 rooms on initiation" do - expect(@hotel.rooms.length).must_equal 20 - binding.pry + expect(@reservation_manager.rooms.length).must_equal 20 end end - # describe "Hotel#make_reservation" do - # before do - # @hotel = Hotel.new - # end - # - # it "creates a reservation object" do - # reservation = @hotel.make_reservation(2018923, 2018926) - # expect(reservation).must_be_kind_of Reservation - # end + describe "ReservationManager#make_reservation" do + before do + @reservation_manager = ReservationManager.new + end + + it "creates a reservation" do + reservation = @reservation_manager.make_reservation(2018923, 2018926) + + expect(reservation).must_be_kind_of Reservation + reservation.check_in.must_equal 2018923 + + reservation_1 = @reservation_manager.make_reservation(2018910, 2018911) + + end # # it "adds reservation to list of reservarions made" do - # # expect(@hotel.reservations).must_be_nil - # @hotel.make_reservation(2018923, 2018926) - # binding.pry - # expect(@hotel.reservations.length).must_equal 1 + # + # @reservation_manager.make_reservation(2018923, 2018926) + # expect(@reservation_manager.reservations.length).must_equal 1 # end + end - # TODO: - # it "reserves a room on reservation" do - # - # end - # end + # TODO: + # That you can make a reservation + # That if you have a reservation in a date range, the next room is selected. + # If all rooms are booked, an error is produced. + # If a reservation ends on the new booking date, the room can be reserved. # describe "Hotel#find_reservation(date)" do # it "find a reservation using the date" do diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index 6eefce7a9..fc123eab2 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -32,6 +32,6 @@ end end - + # TODO: Test for nights and during? methods end diff --git a/spec/room_spec.rb b/spec/room_spec.rb index e5239d2c9..0e15b7414 100644 --- a/spec/room_spec.rb +++ b/spec/room_spec.rb @@ -15,8 +15,4 @@ expect(new_room).must_be_kind_of Room end - it "raises an error if room number is higher than 20" do - expect{(Room.new(21))}.must_raise ArgumentError - end - end