ruby_omx 0.0.19 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. data/lib/ruby_omx/base.rb +3 -18
  2. data/lib/ruby_omx/connection.rb +3 -5
  3. data/lib/ruby_omx/exceptions.rb +16 -54
  4. data/lib/ruby_omx/items.rb +32 -56
  5. data/lib/ruby_omx/memos.rb +4 -4
  6. data/lib/ruby_omx/node.rb +30 -0
  7. data/lib/ruby_omx/orders.rb +13 -13
  8. data/lib/ruby_omx/purchase_orders.rb +5 -4
  9. data/lib/ruby_omx/request/custom_item_info_request.rb +17 -0
  10. data/lib/ruby_omx/request/item_info_request.rb +16 -0
  11. data/lib/ruby_omx/request/item_update_request.rb +37 -0
  12. data/lib/ruby_omx/request/memo_submission_request.rb +21 -0
  13. data/lib/ruby_omx/request/order_info_request.rb +22 -0
  14. data/lib/ruby_omx/request/purchase_order_update_request.rb +21 -0
  15. data/lib/ruby_omx/request/udoa_request.rb +84 -0
  16. data/lib/ruby_omx/request.rb +24 -0
  17. data/lib/ruby_omx/response/custom_item_info_response.rb +24 -0
  18. data/lib/ruby_omx/response/item_info_response.rb +4 -18
  19. data/lib/ruby_omx/response/item_update_response.rb +15 -0
  20. data/lib/ruby_omx/response/memo_submission_response.rb +1 -1
  21. data/lib/ruby_omx/response/order_info_response.rb +25 -15
  22. data/lib/ruby_omx/response/purchase_order_update_response.rb +1 -4
  23. data/lib/ruby_omx/response/response_error.rb +3 -9
  24. data/lib/ruby_omx/response/smart_report_response.rb +2 -2
  25. data/lib/ruby_omx/response/udoa_response.rb +7 -8
  26. data/lib/ruby_omx/response.rb +26 -41
  27. data/lib/ruby_omx/version.rb +1 -1
  28. data/lib/ruby_omx.rb +3 -18
  29. data/test/base_test.rb +4 -13
  30. data/test/items_test.rb +76 -19
  31. data/test/orders_test.rb +11 -12
  32. data/test/purchase_orders_test.rb +5 -9
  33. data/test/real_config.yml +8 -0
  34. data/test/real_test.rb +61 -0
  35. metadata +17 -7
  36. data/lib/ruby_omx/response/custom_item_attr_info_response.rb +0 -43
  37. data/lib/ruby_omx/response/memo_submission_request.rb +0 -33
  38. data/lib/ruby_omx/response/order_info_request.rb +0 -29
  39. data/lib/ruby_omx/response/purchase_order_update_request.rb +0 -33
  40. data/lib/ruby_omx/response/udoa_request.rb +0 -94
@@ -0,0 +1,24 @@
1
+ module RubyOmx
2
+
3
+ class AttributeGroup < Node
4
+ xml_name "AttributeGroup"
5
+ xml_reader :name, :from=>'@name'
6
+ xml_reader :group_id, :from=>'@groupID'
7
+ xml_reader :attributes, :as => [CustomItemAttribute]
8
+ end
9
+
10
+ class CIAIResponseItem < Node
11
+ xml_name "Item"
12
+ xml_reader :item_code, :from => '@itemCode'
13
+ xml_reader :active, :from => '@active'
14
+ xml_reader :attribute_groups, :as=>[AttributeGroup]
15
+ end
16
+
17
+ class CustomItemInfoResponse < Response
18
+ xml_name "CustomItemAttributeInformationResponse"
19
+ xml_reader :items, :as => [CIAIResponseItem], :in => "Items"
20
+ xml_reader :success
21
+ xml_reader :errors, :as=>[Error], :in=>'ErrorData'
22
+ end
23
+
24
+ end
@@ -1,37 +1,23 @@
1
1
  module RubyOmx
2
2
 
3
- class ItemInfoCustomItemAttribute < Response
4
- xml_name "Attribute"
5
- xml_reader :attribute_id, :from => '@attributeID'
6
- xml_reader :name, :from => '@name'
7
- xml_reader :value, :from => :content
8
- end
9
-
10
- class ItemInformationResponse < Response
3
+ class ItemInfoResponse < Response
11
4
  xml_name "ItemInformationResponse"
12
5
 
13
6
  xml_reader :item_code, :from => '@itemCode', :in => "Item"
14
7
  xml_reader :active, :from => '@active', :in => "Item"
15
8
  xml_reader :incomplete, :from => '@incomplete', :in => "Item"
16
9
  xml_reader :parent_item_code, :from => '@parentItemCode', :in => "Item"
17
-
18
-
19
10
  xml_reader :product_name, :in => "Item"
20
- xml_reader :available_inventory, :as => Integer, :in => "Item"
21
- #xml_reader :sub_item_count, :as => Integer, :in => "Item"
22
- #xml_reader :last_updated_date, :as => DateTime, :in => "Item"
23
- #xml_reader :weight, :as => Float, :in => "Item"
24
-
11
+ xml_reader :available_inventory, :as => Integer, :in => "Item"
25
12
  xml_reader :price_type, :from => '@priceType', :in => 'Item/PriceData'
26
13
  xml_reader :quantity_type, :from => '@quantityType', :in => 'Item/PriceData'
27
14
  xml_reader :price_quantity, :from => '@quantity', :in => 'Item/PriceData/Price', :as => Integer
28
15
  xml_reader :price_multiplier, :from => '@multiplier', :in => 'Item/PriceData/Price'
29
-
30
16
  xml_reader :price_amount, :from => 'Amount', :in => 'Item/PriceData/Price', :as => Float
31
17
  xml_reader :price_addl_sh, :from => 'AdditionalSH', :in => 'Item/PriceData/Price', :as => Float
32
18
  xml_reader :price_bonus, :from => 'Bonus', :in => 'Item/PriceData/Price', :as => Float
33
-
34
- xml_reader :custom_attributes, :as => [ItemInfoCustomItemAttribute], :in => 'Item/CustomItemAttribute'
19
+ xml_reader :custom_attributes, :as => [CustomItemAttribute], :in => 'Item/CustomItemAttribute'
20
+ xml_reader :errors, :as=>[Error], :in=>'ErrorData'
35
21
  end
36
22
 
37
23
  end
@@ -0,0 +1,15 @@
1
+ module RubyOmx
2
+
3
+ class ItemUpdateResponse < Response
4
+ xml_name "ItemUpdateResponse"
5
+ xml_reader :success
6
+ xml_reader :errors, :as=>[Error], :in=>'ErrorData'
7
+
8
+ def to_s
9
+ error_string = self.errors.collect{ |e| e.message.to_s }.join(',')
10
+ return "success: #{success}, errors: #{error_string}"
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -5,7 +5,7 @@ module RubyOmx
5
5
  class MemoSubmissionResponse < Response
6
6
  xml_name "MemoSubmissionResponse"
7
7
  xml_reader :success
8
- xml_accessor :errors, :as=>[RubyOmx::ErrorData], :in=>'ErrorData'
8
+ xml_accessor :errors, :as=>[Error], :in=>'ErrorData'
9
9
  end
10
10
 
11
11
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module RubyOmx
4
4
 
5
- class OrderInfoLineStatus < Response
5
+ class OrderInfoLineStatus < Node
6
6
  xml_name "LineStatus"
7
7
  #<LineStatus date="2/9/2006 2:47:00 PM" text="OK">40</LineStatus>
8
8
  xml_reader :text, :from => '@text' # C/L means cancelled, OK with a date means processing
@@ -10,16 +10,16 @@ module RubyOmx
10
10
  xml_reader :value, :from => :content, :as=>Integer
11
11
  end
12
12
 
13
- class OrderInfoOrderHeader < Response
14
- xml_name "OrderHeader"
15
- xml_reader :order_id
16
- xml_reader :order_number
17
- xml_reader :order_status_code, :from => '@statusCode', :in=>'OrderStatus'
18
- xml_reader :order_status_date, :as=>DateTime
19
- xml_reader :order_date, :as=>DateTime
20
- end
13
+ #class OrderInfoOrderHeader < Node
14
+ # xml_name "OrderHeader"
15
+ # xml_reader :order_id
16
+ # xml_reader :order_number
17
+ # xml_reader :order_status_code, :from => '@statusCode', :in=>'OrderStatus'
18
+ # xml_reader :order_status_date, :as=>DateTime
19
+ # xml_reader :order_date, :as=>DateTime
20
+ #end
21
21
 
22
- class OrderInfoLineItem < Response
22
+ class OrderInfoLineItem < Node
23
23
  xml_name "LineItem"
24
24
  xml_reader :item_code
25
25
  xml_reader :product_name
@@ -47,17 +47,27 @@ module RubyOmx
47
47
  # 7 shipped?
48
48
  end
49
49
 
50
- class OrderInformationResponse < Response
50
+ class OrderInfoResponse < Response
51
51
  xml_name "OrderInformationResponse"
52
- xml_reader :success
52
+ xml_reader :success
53
+
54
+ xml_reader :order_id, :in=>'OrderHeader'
55
+ xml_reader :order_number, :in=>'OrderHeader'
56
+ xml_reader :order_status_code, :from => '@statusCode', :in=>'OrderHeader/OrderStatus'
57
+ xml_reader :order_status_date, :as=>DateTime, :in=>'OrderHeader'
58
+ xml_reader :order_date, :as=>DateTime, :in=>'OrderHeader'
53
59
 
54
- xml_reader :order_header, :as=>OrderInfoOrderHeader
55
- #xml_reader :shipping_information, :as=>OrderInfoShippingInfo
60
+ #xml_reader :order_header, :as=>OrderInfoOrderHeader
56
61
  xml_reader :line_items, :as => [OrderInfoLineItem], :in=>'OrderDetail'
57
-
58
62
  xml_reader :customer_number, :from=>'@number', :in=>'Customer'
59
63
  xml_reader :tracking_number, :in=>'ShippingInformation/Shipment'
60
64
  xml_reader :ship_date, :in=>'ShippingInformation/Shipment',:as=>DateTime # if populated, it means all items have shipped
65
+ xml_reader :errors, :as=>[Error], :in=>'ErrorData'
66
+
67
+ def to_s
68
+ error_string = errors.collect { |e| e.to_s }.join(',')
69
+ "Status #{order_status_code} for order #{order_number} with errors #{error_string}"
70
+ end
61
71
  end
62
72
 
63
73
  end
@@ -1,17 +1,14 @@
1
- #OrderInformationRequest (OIR200) This request type provides the ShippingInformationRequest (SIR) result for the order as a whole.
2
1
  module RubyOmx
3
2
 
4
3
  class PurchaseOrderUpdateResponse < Response
5
4
  xml_name "PurchaseOrderUpdateResponse"
6
5
  xml_reader :success
7
- #xml_accessor :purchase_order, :as => RubyOmx::PurchaseOrderResponse
8
6
  xml_accessor :po_number, :from=>'@PONumber', :in=>'PurchaseOrder' #<PurchaseOrder PONumber="16651" SupplierID="76">
9
7
  xml_accessor :supplier_id, :from=>'@SupplierID', :in=>'PurchaseOrder'
10
-
11
8
  xml_accessor :po_date, :from=>'PODate', :as=>DateTime
12
9
  xml_accessor :total_amount, :as=>Float
13
10
  xml_accessor :action
14
- xml_accessor :errors, :as=>[RubyOmx::ErrorData], :in=>'ErrorData'
11
+ xml_accessor :errors, :as=>[Error], :in=>'ErrorData'
15
12
  end
16
13
 
17
14
  end
@@ -7,17 +7,11 @@ module RubyOmx
7
7
 
8
8
  class ResponseError < Response
9
9
  xml_name "ErrorResponse"
10
-
11
- #xml_reader :type, :in => "Error"
12
- #xml_reader :code, :in => "Error"
13
- #xml_reader :message, :in => "Error"
14
- #xml_reader :detail, :in => "Error"
15
- #xml_reader :request_id
16
10
  xml_reader :success
17
- xml_reader :errors, :as=>[ErrorMessage]
18
-
11
+ xml_reader :error_messages, :as=>[ErrorMessage], :in=>'ErrorData'
12
+
19
13
  def to_s
20
- self.errors.join(',')
14
+ self.errors.collect{ |e| e.message.to_s }.join(',')
21
15
  end
22
16
 
23
17
  end
@@ -1,12 +1,12 @@
1
1
  module RubyOmx
2
2
 
3
- class SmartReportField < Response
3
+ class SmartReportField < Node
4
4
  xml_name "Field"
5
5
  xml_reader :id, :from=>'@fieldID'
6
6
  xml_reader :value, :from=>:content
7
7
  end
8
8
 
9
- class SmartReportRow < Response
9
+ class SmartReportRow < Node
10
10
  xml_name "Row"
11
11
  xml_reader :fields, :as=>[SmartReportField]
12
12
  #1 Order Number
@@ -1,12 +1,11 @@
1
1
  module RubyOmx
2
2
 
3
- class UDOAResponse < Response
4
- xml_name "UDOAResponse"
5
-
6
- xml_reader :success, :as => Integer
7
- xml_reader :OMX
8
- xml_reader :order_number, :in => "UDOARequest/Header"
9
- xml_reader :error_data
10
- end
3
+ class UDOAResponse < Response
4
+ xml_name "UDOAResponse"
5
+ xml_reader :success, :as => Integer
6
+ xml_reader :OMX
7
+ xml_reader :order_number, :in => "UDOARequest/Header"
8
+ xml_accessor :errors, :as=>[Error], :in=>'ErrorData'
9
+ end
11
10
 
12
11
  end
@@ -1,13 +1,23 @@
1
1
  module RubyOmx
2
-
3
- class Response
2
+
3
+ # ErrorData appears in responses
4
+ class Error < Node
5
+ xml_name 'Error'
6
+ xml_accessor :error_id, :from=>'@errorID'
7
+ xml_accessor :error_severity, :from=>'@errorSeverity'
8
+ xml_accessor :error_detail_0, :from=>'@errorDetail0'
9
+ xml_accessor :error_detail_1, :from=>'@errorDetail1'
10
+ xml_accessor :message, :from=>:content
11
+
12
+ def to_s
13
+ "#{error_id}: #{error_severity} #{error_detail_0} #{error_detail_1} #{message}"
14
+ end
15
+ end
16
+
17
+ class Response < Node
4
18
  include ROXML
5
19
  xml_convention :camelcase
6
20
 
7
- def initialize(object_attribute_hash=nil)
8
- object_attribute_hash.map { |(k, v)| send("#{k}=", v) } if object_attribute_hash.present?
9
- end
10
-
11
21
  # This is the factoryish method that is called!, not new
12
22
  def self.format(response)
13
23
  if response.content_type =~ /xml/ || response.body =~ /<?xml/
@@ -25,50 +35,25 @@ module RubyOmx
25
35
  return self.from_xml(response.body)
26
36
  end
27
37
  end
28
-
29
- def accessors
30
- roxml_references.map {|r| r.accessor}
31
- end
32
-
33
- # render a ROXML object as a normal hash, eliminating the @ and some unneeded admin fields
34
- def as_hash
35
- obj_hash = {}
36
- self.instance_variables.each do |v|
37
- m = v.to_s.sub('@','')
38
- if m != 'roxml_references' && m!= 'promotion_ids'
39
- obj_hash[m.to_sym] = self.instance_variable_get(v)
40
- end
41
- end
42
- obj_hash
43
- end
44
-
45
38
  end
46
39
 
47
- # Shared classes
48
-
49
- class UDIParameter < Response
50
- xml_name "Parameter"
51
- xml_accessor :key, :from => '@key'
52
- xml_accessor :value, :from => :content
53
- end
54
-
55
- class LineItem < Response
40
+ # LineItems appear in requests and responses
41
+ class LineItem < Node
56
42
  xml_name "LineItem"
57
43
  xml_accessor :line_number, :from => '@lineNumber'
58
44
  xml_accessor :item_code
59
45
  xml_accessor :quantity, :as => Integer
60
46
  xml_accessor :unit_price, :as => Float
61
47
  xml_accessor :price, :as => Float
48
+ xml_accessor :update_standard_price # default to 'False'
62
49
  xml_accessor :cancel_line
63
50
  end
64
-
65
- class ErrorData < Response
66
- xml_name 'Error'
67
- xml_accessor :error_id, :from=>'@errorID'
68
- xml_accessor :error_severity, :from=>'@errorSeverity'
69
- xml_accessor :error_detail_0, :from=>'@errorDetail0'
70
- xml_accessor :error_detail_1, :from=>'@errorDetail1'
71
- xml_accessor :message, :from=>:content
51
+
52
+ class CustomItemAttribute < Node
53
+ xml_name "Attribute"
54
+ xml_reader :attribute_id, :from => '@attributeID'
55
+ xml_reader :name, :from => '@name'
56
+ xml_reader :value, :from => :content
72
57
  end
73
-
58
+
74
59
  end
@@ -1,3 +1,3 @@
1
1
  module RubyOmx
2
- VERSION = "0.0.19"
2
+ VERSION = "0.0.20"
3
3
  end
data/lib/ruby_omx.rb CHANGED
@@ -1,4 +1,3 @@
1
- #require 'rubygems'
2
1
  require 'cgi'
3
2
  require 'uri'
4
3
  require 'openssl'
@@ -12,29 +11,15 @@ require 'roxml'
12
11
 
13
12
  $:.unshift(File.dirname(__FILE__))
14
13
 
15
- module RubyOmx
16
-
17
- module_function
18
- def add_child_helper(parent_node,child_name,key,value,content)
19
- new_node = parent_node.add_child(Nokogiri::XML::Node.new child_name, parent_node)
20
- if !key.nil? && !value.nil?
21
- new_node[key] = value
22
- end
23
- if !content.nil?
24
- new_node.content = content
25
- end
26
- return new_node
27
- end
28
-
29
- end
30
-
31
-
14
+ require 'ruby_omx/node'
32
15
  require 'ruby_omx/response'
16
+ require 'ruby_omx/request'
33
17
  require 'ruby_omx/orders'
34
18
  require 'ruby_omx/items'
35
19
  require 'ruby_omx/purchase_orders'
36
20
  require 'ruby_omx/memos'
37
21
  Dir.glob(File.join(File.dirname(__FILE__), 'ruby_omx/response/*.rb')).each {|f| require f }
22
+ Dir.glob(File.join(File.dirname(__FILE__), 'ruby_omx/request/*.rb')).each {|f| require f }
38
23
 
39
24
  require 'ruby_omx/base'
40
25
  require 'ruby_omx/version'
data/test/base_test.rb CHANGED
@@ -3,19 +3,10 @@ require 'test_helper'
3
3
  class BaseTest < MiniTest::Unit::TestCase
4
4
 
5
5
  def test_connection
6
-
7
- begin
8
- @connection = RubyOmx::Base.new()
9
- rescue RubyOmx::MissingAccessKey
10
- end
11
-
12
- begin
13
- @connection = RubyOmx::Base.new(:udi_auth_token=>'asdfasdf')
14
- rescue RubyOmx::MissingAccessKey
15
- end
16
-
6
+ @connection = RubyOmx::Base.new() rescue RubyOmx::MissingAccessKey
7
+ @connection = RubyOmx::Base.new(:udi_auth_token=>'asdfasdf') rescue RubyOmx::MissingAccessKey
17
8
  @config = YAML.load_file( File.join(File.dirname(__FILE__), 'test_config.yml') )['test']
18
- @connection = RubyOmx::Base.new(@config)
19
-
9
+ @connection = RubyOmx::Base.new(@config)
20
10
  end
11
+
21
12
  end
data/test/items_test.rb CHANGED
@@ -6,14 +6,39 @@ class ItemsTest < MiniTest::Unit::TestCase
6
6
  @connection = RubyOmx::Base.new(@config)
7
7
  end
8
8
 
9
+ def test_item_info_request_from_xml
10
+ request = RubyOmx::ItemInfoRequest.format(xml_for('ItemInformationRequest(1.00)',200))
11
+ assert_equal '1.00', request.version
12
+ assert_equal 'ItemCode', request.udi_parameters.last.key
13
+ assert_equal '01-114', request.udi_parameters.last.value
14
+
15
+ request = RubyOmx::CustomItemInfoRequest.format(xml_for('CustomItemAttributeInformationRequest(2.00)',200))
16
+ assert_equal '2.00', request.version
17
+
18
+ assert_equal 'AttributeGroupID', request.udi_parameters[3].key
19
+ assert_equal '5', request.udi_parameters[3].value
20
+
21
+ assert_equal 'ItemCode', request.udi_parameters[2].key
22
+ assert_equal 'DANKITEM4-1', request.udi_parameters[2].value
23
+ end
24
+
25
+ def test_item_info_request_to_xml
26
+ request_attrs = { :item_code => '01-114' }
27
+ request = @connection.build_item_info_request(request_attrs)
28
+ request2 = RubyOmx::ItemInfoRequest.format(xml_for('ItemInformationRequest(1.00)',200))
29
+ assert_equal request.to_xml.to_s, request2.to_xml.to_s
30
+
31
+ request_attrs = { :item_code => 'DANKITEM4-1', :attribute_group_id=>'5' }
32
+ request = @connection.build_custom_item_info_request(request_attrs)
33
+ request2 = RubyOmx::CustomItemInfoRequest.format(xml_for('CustomItemAttributeInformationRequest(2.00)',200))
34
+ assert_equal request.to_xml.to_s, request2.to_xml.to_s
35
+ end
36
+
9
37
  def test_get_item_information
10
38
  @connection.stubs(:post).returns(xml_for('ItemInformationResponse(1.00)',200))
11
- begin
12
- response = @connection.get_item_info()
13
- rescue MissingItemOptions
14
- end
15
-
16
- response = @connection.get_item_info(:item_code=>'01-114')
39
+ response = @connection.get_item_info() rescue MissingRequestOptions
40
+
41
+ response = @connection.get_item_info({:item_code=>'01-114'})
17
42
  assert_equal '01-114', response.item_code
18
43
  assert_equal 'True', response.active
19
44
  assert_equal 'Driver', response.product_name
@@ -28,29 +53,61 @@ class ItemsTest < MiniTest::Unit::TestCase
28
53
  assert_equal 6, response.custom_attributes.length
29
54
  assert_equal "1", response.custom_attributes.first.attribute_id
30
55
  assert_equal "MYAttribute1", response.custom_attributes.first.value
31
-
32
56
  assert_kind_of Hash, response.as_hash
33
57
  end
34
58
 
35
59
  def test_get_custom_item_attribute_information
36
- @connection.stubs(:post).returns(xml_for('CustomItemAttributeInformationResponse(1.00)',200))
37
- begin
38
- response = @connection.get_custom_item_attribute_info()
39
- rescue MissingItemOptions
40
- end
60
+ @connection.stubs(:post).returns(xml_for('CustomItemAttributeInformationResponse(2.00)',200))
61
+ response = @connection.get_custom_item_info() rescue MissingRequestOptions
41
62
 
42
- response = @connection.get_custom_item_attribute_info(:item_code=>'00001')
63
+ response = @connection.get_custom_item_info(:item_code=>'00001')
43
64
  assert_kind_of Hash, response.as_hash
44
65
  assert_equal '1', response.success
45
66
  i = response.items.first
46
- assert_equal '10100', i.item_code
67
+ assert_equal '00001', i.item_code
47
68
  assert_equal 'True', i.active
48
- i_attrs = i.attributes
49
- assert_equal 20, i_attrs.length
50
- assert_equal '1', i_attrs.first.attribute_id
51
- assert_equal 'Keycode', i_attrs.first.name
52
-
69
+ i_attrs = i.attribute_groups.first.attributes
70
+ assert_equal 1, i_attrs.length
71
+ assert_equal '3', i_attrs.first.attribute_id
72
+ assert_equal 'otrofield', i_attrs.first.name
53
73
  assert_kind_of Hash, response.as_hash
54
74
  end
55
75
 
76
+
77
+ def test_item_update_request_from_xml
78
+ request = RubyOmx::ItemUpdateRequest.format(xml_for('ItemUpdateRequest(2.00)',200))
79
+ assert_equal '2.00', request.version
80
+ assert_equal 1, request.items.length
81
+ item = request.items.first
82
+ assert_equal 'APPLE', item.item_code
83
+ end
84
+
85
+ def test_item_update_request_to_xml
86
+
87
+ request_attrs = {:items=> [{
88
+ :item_code => 'APPLE',
89
+ :product_status=>'True',
90
+ :incomplete_flag=>'False',
91
+ :product_name=>'Apple Product',
92
+ :product_group=>45,
93
+ :cost_of_goods=>10,
94
+ :upc_code=>'234234234',
95
+ :allow_order_line_info=>'True',
96
+ :launch_date=>'2/23/2006',
97
+ :file_sub_code=>20,
98
+ :inventory_product_flag=>'True',
99
+ :tax_code=>'TC4',
100
+ :inventory_type=>3 }]}
101
+
102
+
103
+ request = @connection.build_item_update_request(request_attrs)
104
+ assert_instance_of String, request.to_xml.to_s
105
+
106
+ @connection.stubs(:post).returns(xml_for('ItemUpdateResponse(2.00)',200))
107
+ response = @connection.append_item rescue MissingRequestOptions
108
+
109
+ response = @connection.append_item(request_attrs)
110
+ assert_equal '1', response.success
111
+ end
112
+
56
113
  end
data/test/orders_test.rb CHANGED
@@ -165,7 +165,7 @@ class OrdersTest < MiniTest::Unit::TestCase
165
165
  # Missing Order Options
166
166
  begin
167
167
  response = @connection.send_udoa_request(order_data)
168
- rescue MissingOrderOptions
168
+ rescue MissingRequestOptions
169
169
  end
170
170
 
171
171
  order_data[:line_items][0].merge!({ :item_code => 'SKU' })
@@ -190,14 +190,13 @@ class OrdersTest < MiniTest::Unit::TestCase
190
190
  def test_send_info_request1
191
191
  @connection.stubs(:post).returns(xml_for('OrderInformationResponse(1.00)',200))
192
192
  response = @connection.send_info_request({ :order_number => '16651' })
193
- assert_kind_of OrderInformationResponse, response
194
- assert !response.accessors.include?("code")
193
+ assert_kind_of OrderInfoResponse, response
195
194
 
196
195
  assert_equal DateTime.parse('2006-02-09 14:47:00'), response.ship_date
197
196
  assert_equal '11229', response.customer_number
198
197
  assert_equal "", response.tracking_number
199
- assert_equal '16651', response.order_header.order_number
200
- assert_equal DateTime.parse('2005-06-20 14:25:00'), response.order_header.order_date
198
+ assert_equal '16651', response.order_number
199
+ assert_equal DateTime.parse('2005-06-20 14:25:00'), response.order_date
201
200
  assert_equal 1, response.line_items.length
202
201
  assert_equal '16651-1', response.line_items[0].shipment_number
203
202
  assert_equal 6.52, response.line_items[0].line_cogs
@@ -214,16 +213,16 @@ class OrdersTest < MiniTest::Unit::TestCase
214
213
  def test_send_info_request2
215
214
  @connection_alt.stubs(:post).returns(xml_for('OrderInformationResponse(2.00)',200))
216
215
  response = @connection_alt.send_info_request({ :order_number => '24603', :version=>'2.00' })
217
- assert_kind_of OrderInformationResponse, response
216
+ assert_kind_of OrderInfoResponse, response
218
217
 
219
218
  assert_nil response.ship_date
220
219
  assert_equal "", response.tracking_number
221
220
 
222
- assert_nil response.order_header.order_id
223
- assert_equal '24603', response.order_header.order_number
224
- assert_equal DateTime.parse('2003-04-01 22:15:00'), response.order_header.order_date
225
- assert_equal DateTime.parse('2010-05-31 05:36:00'), response.order_header.order_status_date
226
- assert_equal '4', response.order_header.order_status_code
221
+ assert_nil response.order_id
222
+ assert_equal '24603', response.order_number
223
+ assert_equal DateTime.parse('2003-04-01 22:15:00'), response.order_date
224
+ assert_equal DateTime.parse('2010-05-31 05:36:00'), response.order_status_date
225
+ assert_equal '4', response.order_status_code
227
226
 
228
227
  assert_equal '11552', response.customer_number
229
228
  assert_equal 2, response.line_items.length
@@ -242,7 +241,7 @@ class OrdersTest < MiniTest::Unit::TestCase
242
241
  assert_kind_of Hash, response.as_hash
243
242
 
244
243
  response = @connection_alt.send_info_request({ :order_id=> 'AZ-43253-234', :store_code=>'XX01', :version=>'2.00' })
245
- assert_kind_of OrderInformationResponse, response
244
+ assert_kind_of OrderInfoResponse, response
246
245
  end
247
246
 
248
247
  def test_send_smart_report_request
@@ -23,17 +23,12 @@ class PurchaseOrdersTest < MiniTest::Unit::TestCase
23
23
  assert_equal 'UDIAuthToken', request.udi_parameters[0].key
24
24
  assert_equal @config['udi_auth_token'], request.udi_parameters[0].value
25
25
  end
26
-
26
+
27
27
  def test_send_purchase_order_update_request
28
28
  @connection.stubs(:post).returns(xml_for('PurchaseOrderUpdateResponse(1.00)',200))
29
- request = PurchaseOrderUpdateRequest.new
30
-
31
- # TODO why is this necessary
32
- l1 = RubyOmx::LineItem.new(:item_code=>'WATCH-1', :quantity=>1, :price=>122.50)
33
- l2 = RubyOmx::LineItem.new(:item_code=>'APPLE-12', :quantity=>31, :price=>1.50)
34
29
 
35
- po_data = { :po_number => '16651',
36
- :line_items => [l1, l2],
30
+ po_data = { :po_number => '16651', # actually would not have both po number and supplier id
31
+ :line_items => [@line1, @line2],
37
32
  :supplier_id => '76'
38
33
  }
39
34
  r = @connection.build_purchase_order_update_request(po_data)
@@ -42,7 +37,7 @@ class PurchaseOrdersTest < MiniTest::Unit::TestCase
42
37
  # Missing Order Options
43
38
  begin
44
39
  response = @connection.send_purchase_order_update_request({})
45
- rescue MissingPurchaseOrderOptions
40
+ rescue MissingRequestOptions
46
41
  end
47
42
 
48
43
  response = @connection.send_purchase_order_update_request(po_data)
@@ -61,4 +56,5 @@ class PurchaseOrdersTest < MiniTest::Unit::TestCase
61
56
  assert_kind_of PurchaseOrderUpdateResponse, response
62
57
  assert_equal '16651', response.po_number
63
58
  end
59
+
64
60
  end
@@ -0,0 +1,8 @@
1
+ real:
2
+ http_biz_id: KbmCrvnukGKUosDSTVhWbhrYBlggjNYxGqsujuglguAJhXeKBYDdpwyiRcywvmiUrpHilblPqKgiPAOIfxOfvFOmZLUiNuIfeDrKJxvjeeblkhphUhgPixbvaCJADgIfaDjHWFHXePIFchOjQciNRdrephpJFEfGoUaSFAOcjHmhfgZidlmUsCBdXgmmxIBKhgRjxjJaTcrnCgSkghRWvRwjZgVeVvhHqALceQpdJLphwDlfFXgIHYjCGjCiwZW
3
+ udi_auth_token: 7509fd470db4004809083c0048ef983102d6325b27730421704c1b0899109ab51de58e4dfd80acff062f8042360b5ae01ed4851f50a5d5fe38a10e81c0471a089f20799ddf11c81cc541a10a014fe04e190aee6049efdf97699096bd79db0a9fd04ca90b2a90f63925c223d236fbe97b047c104b900b7e1010fbb39453e0920
4
+
5
+ real_alt:
6
+ http_biz_id: KbmCrvnukGKUosDSTVhWbhrYBlggjNYxGqsujuglguAJhXeKBYDdpwyiRcywvmiUrpHilblPqKgiPAOIfxOfvFOmZLUiNuIfeDrKJxvjeeblkhphUhgPixbvaCJADgIfaDjHWFHXePIFchOjQciNRdrephpJFEfGoUaSFAOcjHmhfgZidlmUsCBdXgmmxIBKhgRjxjJaTcrnCgSkghRWvRwjZgVeVvhHqALceQpdJLphwDlfFXgIHYjCGjCiwZW
7
+ udi_auth_token: 7509fd470db4004809083c0048ef983102d6325b27730421704c1b0899109ab51de58e4dfd80acff062f8042360b5ae01ed4851f50a5d5fe38a10e81c0471a089f20799ddf11c81cc541a10a014fe04e190aee6049efdf97699096bd79db0a9fd04ca90b2a90f63925c223d236fbe97b047c104b900b7e1010fbb39453e0920
8
+ server: https://api.omx.ordermotion.com/OM2/udi.ashx