parsley/spec/models/recipe_spec.rb

104 lines
2.5 KiB
Ruby
Raw Normal View History

2016-01-12 18:43:00 -06:00
require 'rails_helper'
RSpec.describe Recipe, type: :model do
2018-09-11 17:13:22 -05:00
describe '#yields_list' do
it 'always has "1 recipe" as a yield' do
r = create(:recipe, yields: '')
l = r.yields_list
expect(l.length).to eq 1
expect(l.first).to be_a UnitConversion::ValueUnit
expect(l.first.value.value).to eq 1
expect(l.first.unit.unit).to eq 'recipe'
end
it 'caches the list and resets it when yield is changed' do
r = create(:recipe, yields: '3 cups')
l1 = r.yields_list
l2 = r.yields_list
expect(l1.first).to equal(l2.first)
r.yields = '4 cups'
l2 = r.yields_list
expect(l1.first).not_to equal(l2.first)
end
end
2016-09-28 17:08:43 -05:00
describe '#update_rating!' do
it 'should set rating to nil with no ratings' do
r = create(:recipe)
r.update_rating!
expect(r.rating).to be_nil
create(:log, rating: nil, source_recipe: r)
r.update_rating!
expect(r.rating).to be_nil
end
it 'should set rating based on user logs' do
user = create(:user)
other_user = create(:user)
r = create(:recipe, user: user)
create(:log, rating: 2, source_recipe: r, user: user)
create(:log, rating: 4, source_recipe: r, user: user)
create(:log, rating: 5, source_recipe: r, user: other_user)
r.update_rating!
expect(r.rating).to eq 3
end
end
2016-10-20 15:48:33 -05:00
describe '#tag_names' do
it 'should return tag names' do
t1 = create(:tag, name: 'one')
t2 = create(:tag, name: 'two')
r = create(:recipe)
r.tags = [t1, t2]
r.save
expect(r.tag_names).to contain_exactly('one', 'two')
end
it 'should set existing tags' do
t1 = create(:tag, name: 'one')
t2 = create(:tag, name: 'two')
r = create(:recipe)
r.tag_names = ['one', 'two']
expect(r.tags).to contain_exactly(t1, t2)
end
it 'should set new tags' do
r = create(:recipe)
r.tag_names = ['one', 'two']
expect(r.tags.length).to eq 2
expect(r.tags.first.persisted?).to be_truthy
end
it 'should set new and existing tags' do
t1 = create(:tag, name: 'one')
t2 = create(:tag, name: 'two')
r = create(:recipe)
r.tag_names = ['One', 'TWO', 'three']
expect(r.tags).to include(t1, t2)
expect(r.tags.length).to eq 3
expect(r.tags.detect {|t| t.is?('THREE')}).not_to be_nil
end
it 'ignores empty elements' do
r = create(:recipe)
r.tag_names = ['one', 'two', nil, '']
expect(r.tags.length).to eq 2
end
end
2016-01-12 18:43:00 -06:00
end