Sha256: 227f622f5549d215f82b4f5a6339ff69a8ea1d81400573e0908dfaf727c85514

Contents?: true

Size: 1.72 KB

Versions: 31

Compression:

Stored size: 1.72 KB

Contents

class Order

  attr_accessor :shipped_on

  def total_cost
    line_items.inject(0) { |total, line_item| total + line_item.price } + shipping_cost
  end

  def total_weight
    line_items.inject(0) { |total, line_item| total + line_item.weight }
  end

  def shipping_cost
    total_weight * 5 + 10
  end

  class << self

    def find_all
      # Database.connection.execute('select * from orders...
    end
  
    def number_shipped_since(date)
      find_all.select { |order| order.shipped_on > date }.length
    end

    def unshipped_value
      find_all.inject(0) { |total, order| order.shipped_on ? total : total + order.total_cost }
    end

  end

end

require 'test/unit'
require 'rubygems'
require 'mocha'

class OrderTest < Test::Unit::TestCase

  # illustrates stubbing instance method
  def test_should_calculate_shipping_cost_based_on_total_weight
    order = Order.new
    order.stubs(:total_weight).returns(10)
    assert_equal 60, order.shipping_cost
  end

  # illustrates stubbing class method
  def test_should_count_number_of_orders_shipped_after_specified_date
    now = Time.now; week_in_secs = 7 * 24 * 60 * 60
    order_1 = Order.new; order_1.shipped_on = now - 1 * week_in_secs
    order_2 = Order.new; order_2.shipped_on = now - 3 * week_in_secs
    Order.stubs(:find_all).returns([order_1, order_2])
    assert_equal 1, Order.number_shipped_since(now - 2 * week_in_secs)
  end

  # illustrates stubbing instance method for all instances of a class
  def test_should_calculate_value_of_unshipped_orders
    Order.stubs(:find_all).returns([Order.new, Order.new, Order.new])
    Order.any_instance.stubs(:shipped_on).returns(nil)
    Order.any_instance.stubs(:total_cost).returns(10)
    assert_equal 30, Order.unshipped_value
  end

end

Version data entries

31 entries across 31 versions & 6 rubygems

Version Path
floehopper-mocha-0.9.3.20081220175348 examples/stubba.rb
floehopper-mocha-0.9.3.20081230175553 examples/stubba.rb
floehopper-mocha-0.9.4.20090128164727 examples/stubba.rb
floehopper-mocha-0.9.5.20090201123802 examples/stubba.rb
gsterndale-warrant-0.2.0 test/rails_root/vendor/gems/mocha-0.9.4/examples/stubba.rb
gsterndale-warrant-0.3.0 test/rails_root/vendor/gems/mocha-0.9.4/examples/stubba.rb
hashrocket-clearance-0.4.0 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
hashrocket-clearance-0.4.1 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
hashrocket-clearance-0.4.2 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
hashrocket-clearance-0.4.3 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
thewoolleyman-mocha-0.9.3.20081219131457 examples/stubba.rb
thoughtbot-clearance-0.2.2 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
thoughtbot-clearance-0.2.3 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
thoughtbot-clearance-0.2.4 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
thoughtbot-clearance-0.2.5 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
thoughtbot-clearance-0.2.6 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
thoughtbot-clearance-0.2.7 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
thoughtbot-clearance-0.2.8 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
thoughtbot-clearance-0.2.9 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb
thoughtbot-clearance-0.3.0 test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb