Rails 4 testing bug?

Posted by Jamato on Stack Overflow See other posts from Stack Overflow or by Jamato
Published on 2014-06-01T00:56:28Z Indexed on 2014/06/01 9:25 UTC
Read the original article Hit count: 136

Filed under:
|

Situation: if we add two identic line items into a cart, we update line item quantity instead of adding a duplicate.In browser everything works fine but in unit testing section something fails because of an empty cycle in code. Which I wanted to use to update all prices. Why? Is that a unit test engine bug?

LineItem.all and cart.line_items in process of testing produce two DIFFERENT structures.

#<LineItem id: 980190964, product_id: 1, cart_id: 999, created_at: "2014-06-01 00:21:28",   updated_at: "2014-06-01 00:21:28", quantity: 2, price: #<BigDecimal:ba0fb544,'0.4E1',9(27)>>

#<LineItem id: 980190964, product_id: 1, cart_id: 999, created_at: "2014-06-01 00:21:28", updated_at: "2014-06-01 00:21:28", quantity: 1, price: #<BigDecimal:ba0d1b04,'0.4E1',9(27)>>

cart.line_items guy did not update quantity

Code itself (produces LineItem which is then saved in line_item_controller which calls this method)

class Cart < ActiveRecord::Base
has_many :line_items, dependent: :destroy
def add_product(product_id)
  # LOOK THIS CYCLE BREAKS UNIT TEST, SRSLY, I MEAN IT
line_items.each do |item|
end 

current_item = line_items.find_by(product_id: product_id)
fresh_price = Product.find_by(id: product_id).price 
if current_item
current_item.quantity += 1
else
current_item = line_items.build(product_id: product_id, price: fresh_price)
end

return current_item
end
...

Unit test code

test "non-unique item added" do
cart = Cart.new(:id => 999)
line_item0 = cart.add_product(2)
line_item0.save
line_item1 = cart.add_product(1)
line_item1.save 
assert_equal 2, cart.line_items.size #success
line_item2 = cart.add_product(1)
line_item2.save
assert_equal 2, cart.line_items.size, "what?"
assert cart.total_price > 15 #fail, prices are not enough, quantity of product1 = 1
#we get total price from quantity, it's  a simple method in model
end

And once again: IT DOES WORK in browser as it should. Even with cycle. I feel so dumb right now...

© Stack Overflow or respective owner

Related posts about ruby-on-rails

Related posts about ruby