Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save FaisalAl-Tameemi/69fcb5f549cbf5af895636746bc4fa54 to your computer and use it in GitHub Desktop.
Save FaisalAl-Tameemi/69fcb5f549cbf5af895636746bc4fa54 to your computer and use it in GitHub Desktop.
require './bartender.rb'
require './restaurant.rb'
require './review.rb'
describe Bartender do
before :each do
@bartender = Bartender.new('John', 6)
end
describe '.new' do
it 'should have a name' do
expect(@bartender.name).to eql('John')
end
it 'should have a skill_level' do
expect(@bartender.skill_level).to eql(6)
end
it 'should have skillz' do
expect(@bartender.skillz).to eql('Good')
end
end
describe 'skillz' do
before do
@horrible = Bartender.new('John', 1)
@meh = Bartender.new('John', 3)
@good = Bartender.new('John', 6)
@awesome = Bartender.new('John', 9)
end
it 'skillz should match skill_level' do
expect(@horrible.skillz).to eql('Horrible')
expect(@meh.skillz).to eql('Meh')
expect(@good.skillz).to eql('Good')
expect(@awesome.skillz).to eql('Awesome!')
end
end
describe 'skillz with stubbing' do
before do
@bartender = Bartender.new('John', 1)
end
it 'skillz should match skill_level' do
expect(@bartender).to receive(:skill_level).at_least(1).times.and_return(6)
expect(@bartender.skillz).to eql('Good')
end
end
describe 'practice' do
it 'increases skill_level with practice' do
@bartender = Bartender.new('John', 1)
expect(@bartender.skill_level).to eql(1)
@bartender.practice
expect(@bartender.skill_level).to eql(2)
end
it 'cannot increase skill level past 10' do
@bartender = Bartender.new('Ace', 9)
@bartender.practice
expect(@bartender.skill_level).to eql(10)
@bartender.practice
expect(@bartender.skill_level).to eql(10)
end
end
end
describe 'Restaurant' do
before :each do
@restaurant = Restaurant.new("McDonald's", "fast-food", '$', true, ['hamburgers', 'fries', 'trans-fats', 'heart attack'])
end
describe '.new' do
it 'should have readers that work' do
expect(@restaurant.name).to eql("McDonald's")
expect(@restaurant.style).to eql("fast-food")
expect(@restaurant.price_range).to eql("$")
end
it '#kid_friendly?' do
expect(@restaurant.kid_friendly?).to eql(true)
end
it 'should have formatted_tags' do
expect(@restaurant.formatted_tags).to eql("hamburgers, fries, trans-fats, heart attack")
end
end
describe 'reviews' do
before do
@restaurant = Restaurant.new("McDonald's", "fast-food", '$', true, ['hamburgers', 'fries', 'trans-fats', 'heart attack'])
end
it 'can add a review' do
@review1 = Review.new(7, 'Pretty good.')
@review2 = Review.new(5, 'Meh.')
@restaurant.add_review(@review1)
@restaurant.add_review(@review2)
expect(@restaurant.reviews).to eq([@review1, @review2])
end
it 'should raise an exception if review is the wrong class' do
expect {@restaurant.add_review("Not a review!")}.to raise_error(Restaurant::RestaurantError)
end
end
describe '#average_rating' do
before do
@restaurant = Restaurant.new("Good'os", "good")
end
it 'returns nil if there are no ratings' do
expect(@restaurant.average_rating).to eql(nil)
end
it 'returns the average rating if there are ratings' do
@review1 = Review.new(0, 'Argh')
@review2 = Review.new(10, 'Amazing!!!11!!eleven!')
@restaurant.add_review(@review1)
@restaurant.add_review(@review2)
expect(@restaurant.average_rating).to eql(5.0)
end
end
end
describe 'Review' do
before :each do
@review = Review.new(6, "They tried, but mostly failed.")
end
describe '.new' do
it 'should have readers that work' do
expect(@review.rating).to eq(6)
expect(@review.comment).to eq("They tried, but mostly failed.")
end
it 'should have accessor that work' do
@review.rating = 1
expect(@review.rating).to eq(1)
end
end
end
class Bartender
attr_reader :name, :skill_level
def initialize(name, skill_level)
@name = name
@skill_level = skill_level
end
def skillz
if skill_level < 3
'Horrible'
elsif skill_level < 6
'Meh'
elsif skill_level < 9
'Good'
else
'Awesome!'
end
end
def practice
@skill_level += 1 if skill_level < 10
end
end
class Restaurant
attr_reader :name, :style, :price_range, :reviews
class RestaurantError < StandardError
end
def initialize(name, style, price_range = '$', kid_friendly = true, menu_items = [])
@name = name
@style = style
@price_range = price_range
@kid_friendly = kid_friendly
@menu_items = menu_items
@reviews = []
end
def kid_friendly?
@kid_friendly
end
def formatted_tags
@menu_items.join(', ')
end
def add_review(review)
raise RestaurantError unless review.is_a? Review
@reviews << review
end
def average_rating
return nil if @reviews.size == 0
sum_ratings = @reviews.inject(0){|sum, review| sum += review.rating }
sum_ratings / @reviews.size.to_f
end
end
class Review
attr_reader :comment
attr_accessor :rating
def initialize(rating, comment)
@rating = rating
@comment = comment
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment