Edit product test
This commit is contained in:
parent
a28c89469e
commit
e9d89c1e95
|
@ -24,7 +24,7 @@ class Product < ActiveRecord::Base
|
||||||
|
|
||||||
enum category: %w(food beverages other)
|
enum category: %w(food beverages other)
|
||||||
|
|
||||||
validates :name, presence: true
|
validates :name, presence: true, uniqueness: true
|
||||||
validates :price_cents, presence: true, numericality: { only_integer: true, greater_than: 0 }
|
validates :price_cents, presence: true, numericality: { only_integer: true, greater_than: 0 }
|
||||||
validates :stock, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
|
validates :stock, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
|
||||||
validates :calories, numericality: { only_integer: true, allow_nil: true, greater_than_or_equal_to: 0 }
|
validates :calories, numericality: { only_integer: true, allow_nil: true, greater_than_or_equal_to: 0 }
|
||||||
|
@ -40,8 +40,4 @@ class Product < ActiveRecord::Base
|
||||||
if value.is_a? String then value.sub!(',', '.') end
|
if value.is_a? String then value.sub!(',', '.') end
|
||||||
self.price_cents = (value.to_f * 100).to_int
|
self.price_cents = (value.to_f * 100).to_int
|
||||||
end
|
end
|
||||||
|
|
||||||
def take_out_of_sale!
|
|
||||||
update_attribute :deleted, true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,23 +26,38 @@ describe Product do
|
||||||
expect(@product).to be_valid
|
expect(@product).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'validations' do
|
############
|
||||||
it 'name should be present' do
|
# FIELDS #
|
||||||
@product.name = ''
|
############
|
||||||
expect(@product).to_not be_valid
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'price' do
|
describe 'fields' do
|
||||||
it 'should be positive' do
|
describe 'name' do
|
||||||
@product.price = -5
|
it 'should be present' do
|
||||||
|
@product.name = nil
|
||||||
expect(@product).to_not be_valid
|
expect(@product).to_not be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should be saved correctly' do
|
it 'shold be unique' do
|
||||||
@product.price = 1.20
|
expect(build :product, name: @product.name).to_not be_valid
|
||||||
@product.save
|
end
|
||||||
expect(@product.reload.price).to eq(1.20)
|
end
|
||||||
expect(@product.reload.price_cents).to eq(120)
|
|
||||||
|
describe 'price_cents' do
|
||||||
|
it 'should be present' do
|
||||||
|
@product.price_cents = nil
|
||||||
|
expect(@product).to_not be_valid
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be a number' do
|
||||||
|
@product.price_cents = "123abc"
|
||||||
|
expect(@product).to_not be_valid
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be strict positive' do
|
||||||
|
@product.price = -5
|
||||||
|
expect(@product).to_not be_valid
|
||||||
|
@product.price = 0
|
||||||
|
expect(@product).to_not be_valid
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -55,11 +70,13 @@ describe Product do
|
||||||
it 'should be positive' do
|
it 'should be positive' do
|
||||||
@product.stock = -5
|
@product.stock = -5
|
||||||
expect(@product).to_not be_valid
|
expect(@product).to_not be_valid
|
||||||
|
@product.stock = 0
|
||||||
|
expect(@product).to be_valid
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'calories' do
|
describe 'calories' do
|
||||||
it 'should not be present' do
|
it 'does not have to be present' do
|
||||||
@product.calories = nil
|
@product.calories = nil
|
||||||
expect(@product).to be_valid
|
expect(@product).to be_valid
|
||||||
end
|
end
|
||||||
|
@ -70,9 +87,39 @@ describe Product do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'avatar should be present' do
|
describe 'barcode' do
|
||||||
@product.avatar = nil
|
it 'should be present' do
|
||||||
expect(@product).to_not be_valid
|
@product.barcode = nil
|
||||||
|
expect(@product).to_not be_valid
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be unique' do
|
||||||
|
expect(build :product, barcode: @product.barcode).to_not be_valid
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'avatar' do
|
||||||
|
it 'should be present' do
|
||||||
|
@product.avatar = nil
|
||||||
|
expect(@product).to_not be_valid
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#############
|
||||||
|
# METHODS #
|
||||||
|
#############
|
||||||
|
|
||||||
|
describe 'price' do
|
||||||
|
it 'should read the correct value' do
|
||||||
|
expect(@product.price).to eq(@product.price_cents / 100.0)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should write the correct value' do
|
||||||
|
@product.price = 1.5
|
||||||
|
@product.save
|
||||||
|
expect(@product.reload.price_cents).to eq(150)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue