Created
July 28, 2016 17:31
-
-
Save FaisalAl-Tameemi/69fcb5f549cbf5af895636746bc4fa54 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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