cxml-ruby 0.2.0
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.
- checksums.yaml +7 -0
- data/.github/workflows/ruby.yml +23 -0
- data/.gitignore +14 -0
- data/.rspec +1 -0
- data/.rubocop.yml +175 -0
- data/Gemfile +2 -0
- data/LICENSE +18 -0
- data/README.md +94 -0
- data/Rakefile +6 -0
- data/cxml-ruby.gemspec +27 -0
- data/lib/cxml/accounting.rb +27 -0
- data/lib/cxml/additional_cost.rb +10 -0
- data/lib/cxml/additional_deduction.rb +12 -0
- data/lib/cxml/address.rb +16 -0
- data/lib/cxml/bill_to.rb +10 -0
- data/lib/cxml/browser_form_post.rb +13 -0
- data/lib/cxml/charge.rb +9 -0
- data/lib/cxml/classification.rb +9 -0
- data/lib/cxml/confirmation_header.rb +16 -0
- data/lib/cxml/confirmation_item.rb +14 -0
- data/lib/cxml/confirmation_request.rb +25 -0
- data/lib/cxml/confirmation_status.rb +32 -0
- data/lib/cxml/contact.rb +16 -0
- data/lib/cxml/country.rb +9 -0
- data/lib/cxml/credential.rb +49 -0
- data/lib/cxml/credential_mac.rb +26 -0
- data/lib/cxml/deducted_price.rb +9 -0
- data/lib/cxml/deduction_amount.rb +9 -0
- data/lib/cxml/description.rb +9 -0
- data/lib/cxml/discount.rb +10 -0
- data/lib/cxml/discount_percent.rb +9 -0
- data/lib/cxml/distribution.rb +11 -0
- data/lib/cxml/document.rb +71 -0
- data/lib/cxml/document_node.rb +126 -0
- data/lib/cxml/document_reference.rb +9 -0
- data/lib/cxml/due_amount.rb +9 -0
- data/lib/cxml/email.rb +10 -0
- data/lib/cxml/errors.rb +7 -0
- data/lib/cxml/extrinsic.rb +10 -0
- data/lib/cxml/from.rb +9 -0
- data/lib/cxml/gross_amount.rb +9 -0
- data/lib/cxml/header.rb +29 -0
- data/lib/cxml/id_reference.rb +13 -0
- data/lib/cxml/invoice_detail_discount.rb +13 -0
- data/lib/cxml/invoice_detail_header_indicator.rb +11 -0
- data/lib/cxml/invoice_detail_header_order.rb +24 -0
- data/lib/cxml/invoice_detail_item.rb +55 -0
- data/lib/cxml/invoice_detail_item_reference.rb +17 -0
- data/lib/cxml/invoice_detail_line_indicator.rb +14 -0
- data/lib/cxml/invoice_detail_line_shipping.rb +11 -0
- data/lib/cxml/invoice_detail_line_special_handling.rb +11 -0
- data/lib/cxml/invoice_detail_order.rb +24 -0
- data/lib/cxml/invoice_detail_order_info.rb +10 -0
- data/lib/cxml/invoice_detail_order_summary.rb +32 -0
- data/lib/cxml/invoice_detail_request.rb +40 -0
- data/lib/cxml/invoice_detail_request_header.rb +54 -0
- data/lib/cxml/invoice_detail_shipping.rb +27 -0
- data/lib/cxml/invoice_detail_summary.rb +18 -0
- data/lib/cxml/invoice_id_info.rb +10 -0
- data/lib/cxml/invoice_partner.rb +10 -0
- data/lib/cxml/item_detail.rb +27 -0
- data/lib/cxml/item_id.rb +10 -0
- data/lib/cxml/item_in.rb +14 -0
- data/lib/cxml/item_out.rb +17 -0
- data/lib/cxml/master_agreement_reference.rb +9 -0
- data/lib/cxml/message.rb +13 -0
- data/lib/cxml/modification.rb +15 -0
- data/lib/cxml/modification_detail.rb +16 -0
- data/lib/cxml/modifications.rb +23 -0
- data/lib/cxml/money.rb +35 -0
- data/lib/cxml/name.rb +9 -0
- data/lib/cxml/net_amount.rb +9 -0
- data/lib/cxml/order_reference.rb +12 -0
- data/lib/cxml/order_request.rb +33 -0
- data/lib/cxml/order_request_header.rb +66 -0
- data/lib/cxml/parser.rb +37 -0
- data/lib/cxml/payment_term.rb +28 -0
- data/lib/cxml/period.rb +10 -0
- data/lib/cxml/postal_address.rb +35 -0
- data/lib/cxml/protocol.rb +57 -0
- data/lib/cxml/punch_out_order_message.rb +33 -0
- data/lib/cxml/punch_out_order_message_header.rb +20 -0
- data/lib/cxml/punch_out_setup_request.rb +31 -0
- data/lib/cxml/punch_out_setup_response.rb +9 -0
- data/lib/cxml/request.rb +21 -0
- data/lib/cxml/response.rb +20 -0
- data/lib/cxml/segment.rb +12 -0
- data/lib/cxml/sender.rb +10 -0
- data/lib/cxml/ship_to.rb +10 -0
- data/lib/cxml/shipping.rb +10 -0
- data/lib/cxml/shipping_amount.rb +10 -0
- data/lib/cxml/special_handling_amount.rb +11 -0
- data/lib/cxml/start_page.rb +13 -0
- data/lib/cxml/state.rb +9 -0
- data/lib/cxml/status.rb +27 -0
- data/lib/cxml/subtotal_amount.rb +9 -0
- data/lib/cxml/supplier_setup.rb +13 -0
- data/lib/cxml/tax.rb +42 -0
- data/lib/cxml/tax_adjustment_amount.rb +9 -0
- data/lib/cxml/tax_amount.rb +9 -0
- data/lib/cxml/tax_detail.rb +44 -0
- data/lib/cxml/tax_location.rb +9 -0
- data/lib/cxml/taxable_amount.rb +9 -0
- data/lib/cxml/to.rb +9 -0
- data/lib/cxml/total.rb +10 -0
- data/lib/cxml/total_allowances.rb +9 -0
- data/lib/cxml/total_amount_without_tax.rb +9 -0
- data/lib/cxml/total_charges.rb +9 -0
- data/lib/cxml/unit_price.rb +9 -0
- data/lib/cxml/version.rb +5 -0
- data/lib/cxml.rb +39 -0
- data/spec/credential_spec.rb +37 -0
- data/spec/cxml_spec.rb +6 -0
- data/spec/document_spec.rb +155 -0
- data/spec/fixtures/.gitkeep +0 -0
- data/spec/fixtures/envelope.xml +31 -0
- data/spec/fixtures/envelope2.xml +36 -0
- data/spec/fixtures/invoice_backed_and_unbacked_by_pos.xml +106 -0
- data/spec/fixtures/invoice_backed_by_multiple_pos.xml +97 -0
- data/spec/fixtures/invoice_taxes_at_line.xml +82 -0
- data/spec/fixtures/invoice_taxes_at_line_multiple_taxes.xml +403 -0
- data/spec/fixtures/invoice_taxes_at_total.xml +78 -0
- data/spec/fixtures/item_in.xml +11 -0
- data/spec/fixtures/order_request.cxml +121 -0
- data/spec/fixtures/punch_out_order_message_doc.xml +32 -0
- data/spec/fixtures/punch_out_setup_request_doc.xml +32 -0
- data/spec/fixtures/punch_out_setup_request_doc_coupa.xml +42 -0
- data/spec/fixtures/punch_out_setup_request_doc_with_ship_to.xml +46 -0
- data/spec/fixtures/purchase_order_request_200.xml +132 -0
- data/spec/fixtures/request_doc.xml +79 -0
- data/spec/fixtures/response_status_200.xml +11 -0
- data/spec/fixtures/response_status_400.xml +5 -0
- data/spec/header_spec.rb +54 -0
- data/spec/invoice_detail_request_spec.rb +88 -0
- data/spec/item_detail_spec.rb +44 -0
- data/spec/item_id_spec.rb +40 -0
- data/spec/item_in_spec.rb +41 -0
- data/spec/money_spec.rb +44 -0
- data/spec/parser_spec.rb +6 -0
- data/spec/protocol_spec.rb +16 -0
- data/spec/punch_out_order_message_header_spec.rb +36 -0
- data/spec/punch_out_order_message_spec.rb +43 -0
- data/spec/punch_out_setup_request_spec.rb +60 -0
- data/spec/purchase_order_request_spec.rb +40 -0
- data/spec/request_spec.rb +36 -0
- data/spec/response_spec.rb +58 -0
- data/spec/sender_spec.rb +32 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/status_spec.rb +44 -0
- data/spec/support/helpers.rb +5 -0
- metadata +317 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe CXML::PunchOutOrderMessageHeader do
|
|
6
|
+
it { should respond_to :total }
|
|
7
|
+
it { should respond_to :operation_allowed }
|
|
8
|
+
it { should respond_to :render }
|
|
9
|
+
|
|
10
|
+
let(:parser) { CXML::Parser.new }
|
|
11
|
+
let(:data) { parser.parse(fixture('punch_out_order_message_doc.xml')) }
|
|
12
|
+
let(:doc) { CXML::Document.new(data) }
|
|
13
|
+
let(:punch_out_order_message_header) { doc.message.punch_out_order_message.punch_out_order_message_header }
|
|
14
|
+
let(:builder) { doc.render }
|
|
15
|
+
|
|
16
|
+
describe '#initialize' do
|
|
17
|
+
it 'sets the mandatory attributes' do
|
|
18
|
+
punch_out_order_message_header.total.money.should be_instance_of(CXML::Money)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe '#render' do
|
|
23
|
+
let(:output_xml) { builder.to_xml }
|
|
24
|
+
let(:output_data) { parser.parse(output_xml) }
|
|
25
|
+
let(:punch_out_order_message_output_data) { output_data[:message][:punch_out_order_message] }
|
|
26
|
+
let(:punch_out_order_message_header_output_data) do
|
|
27
|
+
punch_out_order_message_output_data[:punch_out_order_message_header]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'contains the required nodes' do
|
|
31
|
+
punch_out_order_message_header_output_data[:operation_allowed].should_not be_empty
|
|
32
|
+
punch_out_order_message_header_output_data[:total].should_not be_empty
|
|
33
|
+
punch_out_order_message_header_output_data[:total][:money].should_not be_empty
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe CXML::PunchOutOrderMessage do
|
|
6
|
+
it { should respond_to :add_item }
|
|
7
|
+
it { should respond_to :buyer_cookie }
|
|
8
|
+
it { should respond_to :items_in }
|
|
9
|
+
it { should respond_to :render }
|
|
10
|
+
|
|
11
|
+
let(:parser) { CXML::Parser.new }
|
|
12
|
+
let(:data) { parser.parse(fixture('punch_out_order_message_doc.xml')) }
|
|
13
|
+
let(:doc) { CXML::Document.new(data) }
|
|
14
|
+
let(:punch_out_order_message) { doc.message.punch_out_order_message }
|
|
15
|
+
let(:builder) { doc.render }
|
|
16
|
+
|
|
17
|
+
describe '#initialize' do
|
|
18
|
+
it 'sets the mandatory attributes' do
|
|
19
|
+
punch_out_order_message.punch_out_order_message_header
|
|
20
|
+
.should be_an_instance_of CXML::PunchOutOrderMessageHeader
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe '#add_item' do
|
|
25
|
+
it 'adds items to the order' do
|
|
26
|
+
punch_out_order_message.add_item(build_item_in(parser))
|
|
27
|
+
punch_out_order_message.items_in.count.should == 1
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '#render' do
|
|
32
|
+
let(:output_xml) { builder.to_xml }
|
|
33
|
+
let(:output_data) { parser.parse(output_xml) }
|
|
34
|
+
let(:punch_out_order_message_output_data) { output_data[:message][:punch_out_order_message] }
|
|
35
|
+
|
|
36
|
+
it 'contains the required nodes' do
|
|
37
|
+
punch_out_order_message.add_item(build_item_in(parser))
|
|
38
|
+
punch_out_order_message_output_data[:punch_out_order_message_header].should_not be_empty
|
|
39
|
+
punch_out_order_message_output_data[:buyer_cookie].should_not be_empty
|
|
40
|
+
punch_out_order_message_output_data.should include(:item_in)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe CXML::PunchOutSetupRequest do
|
|
6
|
+
it { should respond_to :browser_form_post }
|
|
7
|
+
it { should respond_to :supplier_setup }
|
|
8
|
+
it { should respond_to :buyer_cookie }
|
|
9
|
+
it { should respond_to :ship_to }
|
|
10
|
+
it { should respond_to :extrinsics }
|
|
11
|
+
it { should respond_to :contact }
|
|
12
|
+
|
|
13
|
+
let(:parser) { CXML::Parser.new }
|
|
14
|
+
let(:data) { parser.parse(fixture('punch_out_setup_request_doc.xml')) }
|
|
15
|
+
let(:data_coupa) { parser.parse(fixture('punch_out_setup_request_doc_coupa.xml')) }
|
|
16
|
+
let(:doc) { CXML::Document.new(data) }
|
|
17
|
+
let(:doc_coupa) { CXML::Document.new(data_coupa) }
|
|
18
|
+
let(:request) { doc.request }
|
|
19
|
+
let(:request_coupa) { doc_coupa.request }
|
|
20
|
+
let(:punch_out_setup_request) { request.punch_out_setup_request }
|
|
21
|
+
let(:punch_out_setup_request_coupa) { request_coupa.punch_out_setup_request }
|
|
22
|
+
|
|
23
|
+
describe '#initialize' do
|
|
24
|
+
it 'sets the mandatory attributes' do
|
|
25
|
+
punch_out_setup_request.browser_form_post.url.should_not be_nil
|
|
26
|
+
punch_out_setup_request.supplier_setup.url.should_not be_nil
|
|
27
|
+
end
|
|
28
|
+
it 'sets the mandatory coupa attributes' do
|
|
29
|
+
punch_out_setup_request_coupa.browser_form_post.url.should_not be_nil
|
|
30
|
+
punch_out_setup_request_coupa.buyer_cookie.should_not be_nil
|
|
31
|
+
punch_out_setup_request_coupa.contact.email.should_not be_nil
|
|
32
|
+
punch_out_setup_request_coupa.extrinsics.should be_a Array
|
|
33
|
+
punch_out_setup_request_coupa.extrinsics.first.should be_a CXML::Extrinsic
|
|
34
|
+
punch_out_setup_request_coupa.extrinsics.first.name.should_not be_nil
|
|
35
|
+
end
|
|
36
|
+
it 'sets the shipping attributes when present' do
|
|
37
|
+
data = parser.parse(fixture('punch_out_setup_request_doc_with_ship_to.xml'))
|
|
38
|
+
doc = CXML::Document.new(data)
|
|
39
|
+
doc.request.punch_out_setup_request.ship_to.should_not be_nil
|
|
40
|
+
doc.request.punch_out_setup_request.ship_to.address.name.should_not be_nil
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe '#render' do
|
|
45
|
+
it 'contains the required nodes' do
|
|
46
|
+
parser = CXML::Parser.new
|
|
47
|
+
data = parser.parse(fixture('punch_out_setup_request_doc_with_ship_to.xml'))
|
|
48
|
+
doc = CXML::Document.new(data)
|
|
49
|
+
builder = doc.render
|
|
50
|
+
output_xml = builder.to_xml
|
|
51
|
+
output_data = parser.parse(output_xml)
|
|
52
|
+
output_data[:request][:punch_out_setup_request][:buyer_cookie]
|
|
53
|
+
.should eq data[:request][:punch_out_setup_request][:buyer_cookie]
|
|
54
|
+
output_data[:request][:punch_out_setup_request][:browser_form_post]
|
|
55
|
+
.should eq data[:request][:punch_out_setup_request][:browser_form_post]
|
|
56
|
+
output_data[:request][:punch_out_setup_request][:ship_to][:address]
|
|
57
|
+
.keys.sort.should eq data[:request][:punch_out_setup_request][:ship_to][:address].keys.sort
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe CXML::OrderRequest do
|
|
6
|
+
it { should respond_to :render }
|
|
7
|
+
it { should respond_to :order_request_header }
|
|
8
|
+
it { should respond_to :items_out }
|
|
9
|
+
|
|
10
|
+
let(:parser) { CXML::Parser.new }
|
|
11
|
+
let(:data) { parser.parse(fixture('purchase_order_request_200.xml')) }
|
|
12
|
+
let(:doc) { CXML::Document.new(data) }
|
|
13
|
+
let(:order_request) { doc.request.order_request }
|
|
14
|
+
let(:builder) { doc.render }
|
|
15
|
+
let(:output_xml) { builder.to_xml }
|
|
16
|
+
let(:output_data) { parser.parse(output_xml) }
|
|
17
|
+
let(:order_request_output_data) { output_data[:request][:order_request] }
|
|
18
|
+
|
|
19
|
+
describe '#render' do
|
|
20
|
+
it 'contains the required nodes' do
|
|
21
|
+
order_request_output_data[:order_request_header].should_not be_empty
|
|
22
|
+
order_request_output_data[:item_out].should be_a Array
|
|
23
|
+
order_request_output_data[:item_out].length.should eq 2
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
describe '#initialize' do
|
|
27
|
+
it 'sets the required nodes' do
|
|
28
|
+
order_request.order_request_header.should_not be_nil
|
|
29
|
+
order_request.order_request_header.order_id.should_not be_nil
|
|
30
|
+
order_request.items_out.first.should_not be_nil
|
|
31
|
+
end
|
|
32
|
+
it 'sets the required nodes via another order request' do
|
|
33
|
+
request = CXML::Document.new.from_xml(fixture('order_request.cxml')).request
|
|
34
|
+
request.order_request.order_request_header.should_not be_nil
|
|
35
|
+
request.order_request.order_request_header.order_id.should_not be_nil
|
|
36
|
+
request.order_request.items_out.first.should_not be_nil
|
|
37
|
+
request.order_request.items_out.first.item_detail.extrinsics.first.should_not be_nil
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe CXML::Request do
|
|
6
|
+
it { should respond_to :punch_out_setup_request }
|
|
7
|
+
it { should respond_to :id }
|
|
8
|
+
it { should respond_to :deployment_mode }
|
|
9
|
+
|
|
10
|
+
describe '#initialize' do
|
|
11
|
+
it 'sets punch_out_setup_request attributes' do
|
|
12
|
+
parser = CXML::Parser.new
|
|
13
|
+
data = parser.parse(fixture('punch_out_setup_request_doc.xml'))
|
|
14
|
+
doc = CXML::Document.new(data)
|
|
15
|
+
doc.request.deployment_mode.should_not be_nil
|
|
16
|
+
doc.request.punch_out_setup_request
|
|
17
|
+
.should be_an_instance_of CXML::PunchOutSetupRequest
|
|
18
|
+
end
|
|
19
|
+
it 'sets purchase_order_request attributes' do
|
|
20
|
+
parser = CXML::Parser.new
|
|
21
|
+
data = parser.parse(fixture('purchase_order_request_200.xml'))
|
|
22
|
+
doc = CXML::Document.new(data)
|
|
23
|
+
doc.request.deployment_mode.should_not be_nil
|
|
24
|
+
doc.request.order_request
|
|
25
|
+
.should be_an_instance_of CXML::OrderRequest
|
|
26
|
+
end
|
|
27
|
+
it 'sets invoice_detail_request attributes' do
|
|
28
|
+
parser = CXML::Parser.new
|
|
29
|
+
data = parser.parse(fixture('invoice_taxes_at_line.xml'))
|
|
30
|
+
doc = CXML::Document.new(data)
|
|
31
|
+
doc.request.deployment_mode.should_not be_nil
|
|
32
|
+
doc.request.invoice_detail_request
|
|
33
|
+
.should be_an_instance_of CXML::InvoiceDetailRequest
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe CXML::Response do
|
|
6
|
+
it { should respond_to :id }
|
|
7
|
+
it { should respond_to :status }
|
|
8
|
+
it { should respond_to :punch_out_setup_response }
|
|
9
|
+
|
|
10
|
+
let(:parser) { CXML::Parser.new }
|
|
11
|
+
let(:data) { parser.parse(fixture('response_status_200.xml')) }
|
|
12
|
+
let(:doc) { CXML::Document.new(data) }
|
|
13
|
+
let(:response) { doc.response }
|
|
14
|
+
let(:builder) { doc.render }
|
|
15
|
+
|
|
16
|
+
describe '#initialize' do
|
|
17
|
+
it 'sets the mandatory attributes' do
|
|
18
|
+
response.status.should be_an_instance_of CXML::Status
|
|
19
|
+
response.punch_out_setup_response.should be_an_instance_of CXML::PunchOutSetupResponse
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#render' do
|
|
24
|
+
let(:output_xml) { builder.to_xml }
|
|
25
|
+
let(:output_data) { parser.parse(output_xml) }
|
|
26
|
+
|
|
27
|
+
context 'when a valid response is rendered' do
|
|
28
|
+
let(:data) { parser.parse(fixture('response_status_200.xml')) }
|
|
29
|
+
|
|
30
|
+
it 'returns xml content' do
|
|
31
|
+
output_xml.should_not be_nil
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'outputs the response with a valid status code' do
|
|
35
|
+
output_data[:response].should_not be_empty
|
|
36
|
+
output_data[:response][:punch_out_setup_response].should_not be_empty
|
|
37
|
+
output_data[:response][:status][:code].should == '200'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'outputs the punch out setup response' do
|
|
41
|
+
output_data[:response][:punch_out_setup_response].should_not be_empty
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context 'when a invalid response is rendered' do
|
|
46
|
+
let(:data) { parser.parse(fixture('response_status_400.xml')) }
|
|
47
|
+
|
|
48
|
+
it 'returns xml content' do
|
|
49
|
+
output_xml.should_not be_nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'outputs the response with a valid status code' do
|
|
53
|
+
output_data[:response].should_not be_empty
|
|
54
|
+
output_data[:response][:status][:code].should == '400'
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
data/spec/sender_spec.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe CXML::Sender do
|
|
6
|
+
it { should respond_to :credential }
|
|
7
|
+
it { should respond_to :user_agent }
|
|
8
|
+
|
|
9
|
+
let(:parser) { CXML::Parser.new }
|
|
10
|
+
let(:data) { parser.parse(fixture('punch_out_order_message_doc.xml')) }
|
|
11
|
+
let(:doc) { CXML::Document.new(data) }
|
|
12
|
+
let(:sender) { doc.header.sender }
|
|
13
|
+
let(:builder) { doc.render }
|
|
14
|
+
|
|
15
|
+
describe '#initialize' do
|
|
16
|
+
it 'sets the mandatory attributes' do
|
|
17
|
+
sender.credential.should_not be_nil
|
|
18
|
+
sender.user_agent.should_not be_nil
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe '#render' do
|
|
23
|
+
let(:output_xml) { builder.to_xml }
|
|
24
|
+
let(:output_data) { parser.parse(output_xml) }
|
|
25
|
+
let(:sender_output_data) { output_data[:header][:sender] }
|
|
26
|
+
|
|
27
|
+
it 'contains the required nodes' do
|
|
28
|
+
sender_output_data[:user_agent].should_not be_empty
|
|
29
|
+
sender_output_data[:credential].should_not be_empty
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
$LOAD_PATH.unshift File.expand_path('..', __dir__)
|
|
4
|
+
|
|
5
|
+
require 'cxml'
|
|
6
|
+
require 'pry'
|
|
7
|
+
|
|
8
|
+
Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
|
|
9
|
+
|
|
10
|
+
RSpec.configure do |config|
|
|
11
|
+
config.expect_with(:rspec) { |c| c.syntax = :should }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def fixture_path(filename = nil)
|
|
15
|
+
path = File.expand_path('fixtures', __dir__)
|
|
16
|
+
filename.nil? ? path : File.join(path, filename)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def fixture(file)
|
|
20
|
+
File.read(File.join(fixture_path, file))
|
|
21
|
+
end
|
data/spec/status_spec.rb
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe CXML::Status do
|
|
6
|
+
describe 'instance' do
|
|
7
|
+
it { should respond_to :code }
|
|
8
|
+
it { should respond_to :text }
|
|
9
|
+
it { should respond_to :xml_lang }
|
|
10
|
+
it { should respond_to :success? }
|
|
11
|
+
it { should respond_to :failure? }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe '#initialize' do
|
|
15
|
+
it 'assigns attributes from hash' do
|
|
16
|
+
hash = { 'xml_lang' => 'en-US', 'code' => '200', 'text' => 'OK' }
|
|
17
|
+
status = CXML::Status.new(hash)
|
|
18
|
+
|
|
19
|
+
status.code.should eq(200)
|
|
20
|
+
status.xml_lang.should eq('en-US')
|
|
21
|
+
status.text.should eq('OK')
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe '#success?' do
|
|
26
|
+
it 'returns true on 2xx codes' do
|
|
27
|
+
CXML::Status.new('code' => '200').success?.should be true
|
|
28
|
+
CXML::Status.new('code' => '201').success?.should be true
|
|
29
|
+
CXML::Status.new('code' => '281').success?.should be true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'returns false on non 2xx codes' do
|
|
33
|
+
CXML::Status.new('code' => '400').success?.should be false
|
|
34
|
+
CXML::Status.new('code' => '475').success?.should be false
|
|
35
|
+
CXML::Status.new('code' => '500').success?.should be false
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe '#failure?' do
|
|
40
|
+
it 'returns false on 2xx codes' do
|
|
41
|
+
CXML::Status.new('code' => '200').failure?.should be false
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|