sale_test.rb
2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
require 'test_helper'
class BscPlugin::SaleTest < ActiveSupport::TestCase
def setup
@sale = BscPlugin::Sale.new
end
attr_accessor :sale
should 'validate presence of product and contract' do
sale.valid?
assert sale.errors.invalid?(:product)
assert sale.errors.invalid?(:contract)
product = Product.new
contract = BscPlugin::Contract.new
sale.product = product
sale.contract = contract
assert !sale.errors.invalid?(product)
assert !sale.errors.invalid?(contract)
end
should 'validate uniqueness of product and contract composed' do
product = fast_create(Product)
contract = BscPlugin::Contract.create!(:bsc => BscPlugin::Bsc.new, :client_name => 'Marvin')
sale1 = BscPlugin::Sale.create!(:product => product, :contract => contract, :quantity => 1)
sale2 = BscPlugin::Sale.new(:product => product, :contract => contract, :quantity => 1)
sale2.valid?
assert sale2.errors.invalid?(:product_id)
end
should 'validate quantity as a positive integer' do
sale.quantity = -1
sale.valid?
assert sale.errors.invalid?(:quantity)
sale.quantity = 1.5
sale.valid?
assert sale.errors.invalid?(:quantity)
sale.quantity = 3
sale.valid?
assert !sale.errors.invalid?(:quantity)
end
should 'set default price as product price if no price indicated' do
product = fast_create(Product, :price => 3.50)
contract = BscPlugin::Contract.create!(:bsc => BscPlugin::Bsc.new, :client_name => 'Marvin')
sale.product = product
sale.contract = contract
sale.quantity = 1
sale.save!
assert_equal product.price, sale.price
end
should 'not overwrite with the product price if price informed' do
product = fast_create(Product, :price => 3.50)
contract = BscPlugin::Contract.create!(:bsc => BscPlugin::Bsc.new, :client_name => 'Marvin')
sale.product = product
sale.contract = contract
sale.quantity = 1
sale.price = 2.50
sale.save!
assert_equal 2.50, sale.price
end
should 'have default value for price' do
product1 = fast_create(Product, :price => 1)
product2 = fast_create(Product, :price => 1)
product3 = fast_create(Product)
contract = BscPlugin::Contract.create!(:bsc => BscPlugin::Bsc.new, :client_name => 'Marvin')
sale1 = BscPlugin::Sale.create!(:price => 2, :product => product1, :contract => contract, :quantity => 1)
sale2 = BscPlugin::Sale.create!(:product => product2, :contract => contract, :quantity => 1)
sale3 = BscPlugin::Sale.create!(:product => product3, :contract => contract, :quantity => 1)
assert_equal 2, sale1.price
assert_equal 1, sale2.price
assert_equal 0, sale3.price
end
end