require File.expand_path('../../test_helper', __FILE__) module Paid class OrderItemTest < Test::Unit::TestCase setup do @order_item_url = "#{Paid.api_base}/order_items" end context 'OrderItem class' do should 'be retrieveable' do id = "order_item_id" @mock.expects(:get).once.with("#{@order_item_url}/#{id}", anything, anything).returns(test_response(test_order_item)) order_item = Paid::OrderItem.retrieve(id) assert(order_item.is_a?(Paid::OrderItem)) end should 'be createable' do @mock.expects(:post).once.with(@order_item_url, anything, test_order_item).returns(test_response(test_order_item)) order_item = Paid::OrderItem.create(test_order_item) assert(order_item.is_a?(Paid::OrderItem)) assert_equal(test_order_item[:id], order_item.id) end should 'be listable' do @mock.expects(:get).once.returns(test_response(test_order_item_list)) order_items = Paid::OrderItem.all assert(order_items.is_a?(Paid::APIList)) order_items.each do |order_item| assert(order_item.is_a?(Paid::OrderItem)) end end end context 'OrderItem instance' do should 'be refreshable' do @mock.expects(:get).once.with("#{@order_item_url}/#{test_order_item[:id]}", anything, anything).returns(test_response(test_order_item)) order_item = Paid::OrderItem.new(test_order_item[:id]) order_item.refresh assert_equal(test_order_item[:order], order_item.order) end should 'be updateable' do order_item = Paid::OrderItem.new(test_order_item) order_item.product = "prod_123abc" @mock.expects(:put).once.with do |url, headers, params| !params.nil? && url == "#{@order_item_url}/#{order_item.id}" end.returns(test_response(test_order_item)) # This should update this instance with test_order_item since it was returned order_item.save assert_equal(test_order_item[:product], order_item.product) end end context 'Retrieved Paid::OrderItem instance' do setup do @order_item = Paid::OrderItem.new(test_order_item) end should 'have the id attribute' do assert_equal(test_order_item[:id], @order_item.id) end should 'have the object attribute' do assert_equal(test_order_item[:object], @order_item.object) end should 'have the order attribute' do assert_equal(test_order_item[:order], @order_item.order) end should 'have the plan_item attribute' do assert_equal(test_order_item[:plan_item], @order_item.plan_item) end should 'have the product attribute' do assert_equal(test_order_item[:product], @order_item.product) end should 'have the service_ends_on attribute' do assert_equal(test_order_item[:service_ends_on], @order_item.service_ends_on) end should 'have the service_starts_on attribute' do assert_equal(test_order_item[:service_starts_on], @order_item.service_starts_on) end should 'have the transaction attribute' do assert_equal(test_order_item[:transaction], @order_item.transaction) end end should 'be registered' do assert(APIResource.api_subclasses.include?(Paid::OrderItem)) assert_equal(Paid::OrderItem, APIResource.api_subclass_fetch("order_item")) end end end