require File.join(File.dirname(__FILE__), 'test_helper') class CalculatedAttributeTest < Test::Unit::TestCase fixtures :invoices, :line_items, :payments def test_subtotal assert_equal 10, invoices(:two_lines).subtotal assert_equal 5, invoices(:one_line_one_payment).subtotal end def test_paid assert_equal 0, invoices(:two_lines).paid assert_equal 2, invoices(:one_line_one_payment).paid end def test_total assert_equal 10, invoices(:two_lines).total assert_equal 5, invoices(:one_line_one_payment).total end def test_due assert_equal 10, invoices(:two_lines).due assert_equal 3, invoices(:one_line_one_payment).due end def test_subtotal_cached_on_save assert invoices(:two_lines).attributes['subtotal'].nil? invoices(:two_lines).save assert_equal 10, invoices(:two_lines).attributes['subtotal'] end def test_subtotal_setter_should_be_noop assert_equal 10, invoices(:two_lines).subtotal invoices(:two_lines).subtotal = 15 assert_equal 10, invoices(:two_lines).subtotal end def test_add_line_recalculates_subtotal invoices(:two_lines).save # cache subtotal assert_equal 10, invoices(:two_lines).attributes['subtotal'] invoices(:two_lines).line_items << LineItem.new(:total => 5) assert_equal 15, invoices(:two_lines).subtotal assert_equal 15, invoices(:two_lines).attributes['subtotal'] end def test_remove_line_recaches_subtotal invoices(:two_lines).save assert_equal 10, invoices(:two_lines).attributes['subtotal'] invoices(:two_lines).line_items.delete line_items(:li1) assert_equal 5, invoices(:two_lines).subtotal assert_equal 5, invoices(:two_lines).attributes['subtotal'] end end