Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
/test/tmp/
/test/version_tmp/
/tmp/

coverage
# Used by dotenv library to load environment variables.
# .env

Expand Down
9 changes: 9 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -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
Empty file removed lib/.keep
Empty file.
77 changes: 77 additions & 0 deletions lib/front_desk.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
require 'date'

require_relative '../lib/reservation.rb'
require_relative '../lib/room.rb'

module Hotel
class Front_desk

attr_reader :total_rooms, :total_reservations

ROOM_ID = (1..20)

def initialize
# an array of rooms
@total_rooms = room_generator
@total_reservations = []
end

# list of all rooms
def room_generator
new_room = []
count = 1
ROOM_ID.each do |room|
new_room << Room.new(count)
count += 1
end
return new_room
end

def list_rooms
return @total_rooms
end
# list of all reservations
def list_reservations
return @total_reservations
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)

@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
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

return reserved
end


end
end
33 changes: 33 additions & 0 deletions lib/reservation.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
require 'date'


module Hotel
class Reservation

attr_reader :ticket_id, :start_date, :end_date, :room

@@count = 1

def initialize(input)

@ticket_id = @@count
@start_date = input[:start_date]
@end_date = input[:end_date]
@room = input[:room_id]
@@count += 1

if @end_date < @start_date
raise StandardError('Invalid Date Range')
end

end


def total_cost
duration = end_date - start_date
return ((duration - 1) * 200)
end


end
end
14 changes: 14 additions & 0 deletions lib/room.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
require 'date'

module Hotel
class Room

attr_reader :room_id, :price, :reservations

def initialize(room)
@room_id = room
@price = 200
end

end
end
Empty file removed specs/.keep
Empty file.
73 changes: 73 additions & 0 deletions specs/front_desk_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
require_relative 'spec_helper'
require 'pry'

describe 'Front_desk' do

describe 'Initialize' do
it 'creates a list of 20 rooms' do
admin = Hotel::Front_desk.new
admin.total_rooms.must_be_kind_of Array
admin.total_rooms.length.must_equal 20

admin.total_rooms.each do |room|
room.must_be_instance_of Hotel::Room
end
end

it 'creates a list of reservations' do
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 '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
end

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
admin = Hotel::Front_desk.new
new_date = admin.add_room('3rd Feb 2020', '6th Feb 2020')

admin.total_reservations.must_include new_date
new_date.must_be_kind_of Hotel::Reservation
end
end

end
26 changes: 26 additions & 0 deletions specs/reservation_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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: 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
13 changes: 13 additions & 0 deletions specs/room_spec.rb
Original file line number Diff line number Diff line change
@@ -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
14 changes: 14 additions & 0 deletions specs/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
require 'simplecov'
SimpleCov.start

require 'time'
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