ship_compliant 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +8 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +50 -0
- data/Rakefile +47 -0
- data/cucumber.yml +9 -0
- data/features/add_update_brand.feature +20 -0
- data/features/add_update_product.feature +24 -0
- data/features/check_compliance_of_sales_order_with_address_validations.feature +18 -0
- data/features/commit_sales_order.feature +6 -0
- data/features/get_inventory_details.feature +7 -0
- data/features/get_sales_order_extended.feature +15 -0
- data/features/search_sales_orders.feature +13 -0
- data/features/step_definitions/brand_steps.rb +73 -0
- data/features/step_definitions/commit_sales_order/all_shipments.rb +15 -0
- data/features/step_definitions/compliance_check/available_product_steps.rb +175 -0
- data/features/step_definitions/compliance_check/missing_product_steps.rb +102 -0
- data/features/step_definitions/compliance_check/noncompliant_product.rb +102 -0
- data/features/step_definitions/credential_steps.rb +8 -0
- data/features/step_definitions/inventory_steps.rb +36 -0
- data/features/step_definitions/product_steps.rb +140 -0
- data/features/step_definitions/sales_order_extended_steps.rb +79 -0
- data/features/step_definitions/search_order_steps.rb +87 -0
- data/features/step_definitions/void_order_steps.rb +27 -0
- data/features/support/env.rb +14 -0
- data/features/void_sales_order.feature +11 -0
- data/fixtures/vcr_cassettes/brand_already_exists.yml +1038 -0
- data/fixtures/vcr_cassettes/brand_ignore_existing.yml +1037 -0
- data/fixtures/vcr_cassettes/brand_update_existing.yml +1037 -0
- data/fixtures/vcr_cassettes/brand_valid.yml +1037 -0
- data/fixtures/vcr_cassettes/commit_salesorder_all_shipments.yml +1034 -0
- data/fixtures/vcr_cassettes/compliance_available_product.yml +1075 -0
- data/fixtures/vcr_cassettes/compliance_missing_product.yml +1046 -0
- data/fixtures/vcr_cassettes/compliance_noncompliant_product.yml +1082 -0
- data/fixtures/vcr_cassettes/ignore_existing_product.yml +1035 -0
- data/fixtures/vcr_cassettes/invalid_search_sales_orders.yml +1038 -0
- data/fixtures/vcr_cassettes/inventory_details_for_everything.yml +1037 -0
- data/fixtures/vcr_cassettes/product_already_exists.yml +1036 -0
- data/fixtures/vcr_cassettes/product_invalid_brand.yml +1036 -0
- data/fixtures/vcr_cassettes/product_valid_brand.yml +1035 -0
- data/fixtures/vcr_cassettes/sales_order_extended.yml +1042 -0
- data/fixtures/vcr_cassettes/sales_order_missing.yml +1034 -0
- data/fixtures/vcr_cassettes/search_sales_orders.yml +1039 -0
- data/fixtures/vcr_cassettes/update_product.yml +1035 -0
- data/fixtures/vcr_cassettes/void_order.yml +1033 -0
- data/fixtures/vcr_cassettes/void_voided_order.yml +1034 -0
- data/lib/ship_compliant.rb +62 -0
- data/lib/ship_compliant/add_update_brand.rb +50 -0
- data/lib/ship_compliant/add_update_brand_result.rb +6 -0
- data/lib/ship_compliant/add_update_product.rb +66 -0
- data/lib/ship_compliant/add_update_product_result.rb +6 -0
- data/lib/ship_compliant/address.rb +87 -0
- data/lib/ship_compliant/address/suggested_address.rb +37 -0
- data/lib/ship_compliant/base_result.rb +43 -0
- data/lib/ship_compliant/channel_details.rb +31 -0
- data/lib/ship_compliant/check_compliance.rb +41 -0
- data/lib/ship_compliant/check_compliance_result.rb +95 -0
- data/lib/ship_compliant/client.rb +54 -0
- data/lib/ship_compliant/commit_sales_order.rb +48 -0
- data/lib/ship_compliant/commit_sales_order_result.rb +30 -0
- data/lib/ship_compliant/compliance_rule.rb +30 -0
- data/lib/ship_compliant/configuration.rb +46 -0
- data/lib/ship_compliant/error_result.rb +41 -0
- data/lib/ship_compliant/freight_sales_tax_rate.rb +8 -0
- data/lib/ship_compliant/get_inventory_details.rb +31 -0
- data/lib/ship_compliant/get_inventory_details_result.rb +41 -0
- data/lib/ship_compliant/get_sales_order_extended.rb +23 -0
- data/lib/ship_compliant/get_sales_order_extended_result.rb +65 -0
- data/lib/ship_compliant/inventory_product.rb +95 -0
- data/lib/ship_compliant/order_search.rb +92 -0
- data/lib/ship_compliant/package.rb +13 -0
- data/lib/ship_compliant/product_attributes.rb +98 -0
- data/lib/ship_compliant/product_sales_tax_rate.rb +23 -0
- data/lib/ship_compliant/sales_tax_rate.rb +22 -0
- data/lib/ship_compliant/search_sales_order_summary.rb +30 -0
- data/lib/ship_compliant/search_sales_orders.rb +53 -0
- data/lib/ship_compliant/search_sales_orders_result.rb +106 -0
- data/lib/ship_compliant/shipment.rb +59 -0
- data/lib/ship_compliant/shipment_compliance.rb +28 -0
- data/lib/ship_compliant/shipment_sales_tax_rate.rb +15 -0
- data/lib/ship_compliant/version.rb +3 -0
- data/lib/ship_compliant/void_sales_order.rb +42 -0
- data/lib/ship_compliant/void_sales_order_result.rb +20 -0
- data/ship_compliant.gemspec +33 -0
- data/spec/fixtures/add_update_product.xml +22 -0
- data/spec/fixtures/check_compliance.xml +125 -0
- data/spec/fixtures/coreservice.wsdl +1341 -0
- data/spec/fixtures/search_sales_orders.xml +52 -0
- data/spec/fixtures/void_order_failure.xml +31 -0
- data/spec/fixtures/void_order_success.xml +22 -0
- data/spec/lib/ship_compliant/add_update_brand_result_spec.rb +7 -0
- data/spec/lib/ship_compliant/add_update_brand_spec.rb +58 -0
- data/spec/lib/ship_compliant/add_update_product_result_spec.rb +7 -0
- data/spec/lib/ship_compliant/add_update_product_spec.rb +52 -0
- data/spec/lib/ship_compliant/address/suggested_address_spec.rb +28 -0
- data/spec/lib/ship_compliant/address_spec.rb +123 -0
- data/spec/lib/ship_compliant/base_result_spec.rb +127 -0
- data/spec/lib/ship_compliant/channel_details_spec.rb +40 -0
- data/spec/lib/ship_compliant/check_compliance_result_spec.rb +135 -0
- data/spec/lib/ship_compliant/check_compliance_spec.rb +43 -0
- data/spec/lib/ship_compliant/client_spec.rb +73 -0
- data/spec/lib/ship_compliant/commit_sales_order_result_spec.rb +32 -0
- data/spec/lib/ship_compliant/commit_sales_order_spec.rb +38 -0
- data/spec/lib/ship_compliant/compliance_rule_spec.rb +47 -0
- data/spec/lib/ship_compliant/configuration_spec.rb +47 -0
- data/spec/lib/ship_compliant/error_result_spec.rb +47 -0
- data/spec/lib/ship_compliant/freight_sales_tax_rate_spec.rb +7 -0
- data/spec/lib/ship_compliant/get_inventory_details_result_spec.rb +87 -0
- data/spec/lib/ship_compliant/get_inventory_details_spec.rb +35 -0
- data/spec/lib/ship_compliant/get_sales_order_extended_result_spec.rb +84 -0
- data/spec/lib/ship_compliant/get_sales_order_extended_spec.rb +39 -0
- data/spec/lib/ship_compliant/inventory_product_spec.rb +116 -0
- data/spec/lib/ship_compliant/order_search_spec.rb +21 -0
- data/spec/lib/ship_compliant/package_spec.rb +26 -0
- data/spec/lib/ship_compliant/product_attributes_spec.rb +36 -0
- data/spec/lib/ship_compliant/product_sales_tax_rate_spec.rb +22 -0
- data/spec/lib/ship_compliant/sales_tax_rate_spec.rb +21 -0
- data/spec/lib/ship_compliant/search_sales_order_summary_spec.rb +56 -0
- data/spec/lib/ship_compliant/search_sales_orders_result_spec.rb +121 -0
- data/spec/lib/ship_compliant/search_sales_orders_spec.rb +42 -0
- data/spec/lib/ship_compliant/shipment_compliance_spec.rb +46 -0
- data/spec/lib/ship_compliant/shipment_sales_tax_rate_spec.rb +20 -0
- data/spec/lib/ship_compliant/shipment_spec.rb +106 -0
- data/spec/lib/ship_compliant/void_sales_order_result_spec.rb +7 -0
- data/spec/lib/ship_compliant/void_sales_order_spec.rb +41 -0
- data/spec/spec_helper.rb +50 -0
- metadata +366 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
3
|
+
<soap:Header>
|
4
|
+
<wsa:Action>action</wsa:Action>
|
5
|
+
<wsa:MessageID>message-id</wsa:MessageID>
|
6
|
+
<wsa:RelatesTo>relates-to</wsa:RelatesTo>
|
7
|
+
<wsa:To>http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous</wsa:To>
|
8
|
+
<wsse:Security>
|
9
|
+
<wsu:Timestamp wsu:Id="Timestamp-id">
|
10
|
+
<wsu:Created>2014-03-11T15:08:12Z</wsu:Created>
|
11
|
+
<wsu:Expires>2014-03-11T15:13:12Z</wsu:Expires>
|
12
|
+
</wsu:Timestamp>
|
13
|
+
</wsse:Security>
|
14
|
+
</soap:Header>
|
15
|
+
<soap:Body>
|
16
|
+
<SearchSalesOrdersResponse xmlns="http://ws.shipcompliant.com/">
|
17
|
+
<SearchSalesOrdersResult>
|
18
|
+
<CountMoreSalesOrdersAvailable>0</CountMoreSalesOrdersAvailable>
|
19
|
+
<CountSalesOrdersReturned>1</CountSalesOrdersReturned>
|
20
|
+
<PagingCookie>paging-cookie</PagingCookie>
|
21
|
+
<PagingCookieExpires>2014-01-02T09:07:55-06:00</PagingCookieExpires>
|
22
|
+
<ResponseStatus>Success</ResponseStatus>
|
23
|
+
<SalesOrders>
|
24
|
+
<SalesOrderSummary>
|
25
|
+
<PurchaseDate>2014-03-10T00:00:00+00:00</PurchaseDate>
|
26
|
+
<SalesOrderKey>ONL-1</SalesOrderKey>
|
27
|
+
<Shipments>
|
28
|
+
<ShipmentSummary>
|
29
|
+
<ComplianceStatus>LegacyCommitted</ComplianceStatus>
|
30
|
+
<FulfillmentExceptionReason/>
|
31
|
+
<FulfillmentExceptionType>None</FulfillmentExceptionType>
|
32
|
+
<FulfillmentHouse/>
|
33
|
+
<FulfillmentStatus>None</FulfillmentStatus>
|
34
|
+
<Packages/>
|
35
|
+
<RequestedShipDate>2014-03-11T00:00:00+00:00</RequestedShipDate>
|
36
|
+
<ShipDate>2014-03-11T00:00:00+00:00</ShipDate>
|
37
|
+
<ShipmentKey>0</ShipmentKey>
|
38
|
+
<ShipmentStatus>InProcess</ShipmentStatus>
|
39
|
+
<ShipTo>
|
40
|
+
<FirstName>John</FirstName>
|
41
|
+
<LastName>Doe</LastName>
|
42
|
+
<Zip1>90210</Zip1>
|
43
|
+
</ShipTo>
|
44
|
+
</ShipmentSummary>
|
45
|
+
</Shipments>
|
46
|
+
<Tags/>
|
47
|
+
</SalesOrderSummary>
|
48
|
+
</SalesOrders>
|
49
|
+
</SearchSalesOrdersResult>
|
50
|
+
</SearchSalesOrdersResponse>
|
51
|
+
</soap:Body>
|
52
|
+
</soap:Envelope>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
3
|
+
<soap:Header>
|
4
|
+
<wsa:Action>http://ws.shipcompliant.com/VoidSalesOrderResponse</wsa:Action>
|
5
|
+
<wsa:MessageID>uuid:ebdc1f5c-5f39-44b3-92c9-a9986b18fd06</wsa:MessageID>
|
6
|
+
<wsa:RelatesTo>uuid:2859b2a3-d425-46ab-befd-10db2cad7b79</wsa:RelatesTo>
|
7
|
+
<wsa:To>http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous</wsa:To>
|
8
|
+
<wsse:Security>
|
9
|
+
<wsu:Timestamp wsu:Id="Timestamp-0b819aaf-491d-475b-846a-81de016274e9">
|
10
|
+
<wsu:Created>2014-03-12T01:19:43Z</wsu:Created>
|
11
|
+
<wsu:Expires>2014-03-12T01:24:43Z</wsu:Expires>
|
12
|
+
</wsu:Timestamp>
|
13
|
+
</wsse:Security>
|
14
|
+
</soap:Header>
|
15
|
+
<soap:Body>
|
16
|
+
<VoidSalesOrderResponse xmlns="http://ws.shipcompliant.com/">
|
17
|
+
<VoidSalesOrderResult>
|
18
|
+
<Errors>
|
19
|
+
<Error>
|
20
|
+
<Code>200</Code>
|
21
|
+
<Key>ONS-1</Key>
|
22
|
+
<Message>SalesOrder does not exist [ONS-1].</Message>
|
23
|
+
<Target>SalesOrder</Target>
|
24
|
+
<Type>Validation</Type>
|
25
|
+
</Error>
|
26
|
+
</Errors>
|
27
|
+
<ResponseStatus>Failure</ResponseStatus>
|
28
|
+
</VoidSalesOrderResult>
|
29
|
+
</VoidSalesOrderResponse>
|
30
|
+
</soap:Body>
|
31
|
+
</soap:Envelope>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
3
|
+
<soap:Header>
|
4
|
+
<wsa:Action>http://ws.shipcompliant.com/VoidSalesOrderResponse</wsa:Action>
|
5
|
+
<wsa:MessageID>uuid:a894e5e3-90b9-421b-af83-d2b7ed384374</wsa:MessageID>
|
6
|
+
<wsa:RelatesTo>uuid:96461b87-360d-41b6-a626-a00d72e08736</wsa:RelatesTo>
|
7
|
+
<wsa:To>http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous</wsa:To>
|
8
|
+
<wsse:Security>
|
9
|
+
<wsu:Timestamp wsu:Id="Timestamp-adc998a5-2ef8-44ff-8ead-8fae965f5031">
|
10
|
+
<wsu:Created>2014-03-12T01:16:52Z</wsu:Created>
|
11
|
+
<wsu:Expires>2014-03-12T01:21:52Z</wsu:Expires>
|
12
|
+
</wsu:Timestamp>
|
13
|
+
</wsse:Security>
|
14
|
+
</soap:Header>
|
15
|
+
<soap:Body>
|
16
|
+
<VoidSalesOrderResponse xmlns="http://ws.shipcompliant.com/">
|
17
|
+
<VoidSalesOrderResult>
|
18
|
+
<ResponseStatus>Success</ResponseStatus>
|
19
|
+
</VoidSalesOrderResult>
|
20
|
+
</VoidSalesOrderResponse>
|
21
|
+
</soap:Body>
|
22
|
+
</soap:Envelope>
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module ShipCompliant
|
4
|
+
describe AddUpdateBrand do
|
5
|
+
|
6
|
+
before { savon.mock! }
|
7
|
+
after { savon.unmock! }
|
8
|
+
|
9
|
+
let(:message) do
|
10
|
+
{
|
11
|
+
'Request' => {
|
12
|
+
'Security' => {
|
13
|
+
'PartnerKey' => 'abc-123',
|
14
|
+
'Username' => 'bob@example.com',
|
15
|
+
'Password' => 'secret'
|
16
|
+
},
|
17
|
+
'Brand' => {
|
18
|
+
'Key' => 'WNDFL',
|
19
|
+
'Name' => 'Wonderful',
|
20
|
+
'Owner' => {
|
21
|
+
'Name' => 'Sam'
|
22
|
+
}
|
23
|
+
},
|
24
|
+
'UpdateMode' => 'DoWackaDo'
|
25
|
+
}
|
26
|
+
}
|
27
|
+
end
|
28
|
+
let(:response) { File.read('spec/fixtures/add_update_product.xml') }
|
29
|
+
context "brand" do
|
30
|
+
|
31
|
+
it "queries the client with an update mode" do
|
32
|
+
savon.expects(:add_update_brand)
|
33
|
+
.with(message: message).returns(response)
|
34
|
+
|
35
|
+
result = AddUpdateBrand.brand({
|
36
|
+
key: 'WNDFL',
|
37
|
+
name: 'Wonderful',
|
38
|
+
owner: { name: 'Sam' }
|
39
|
+
}, update_mode: 'DoWackaDo')
|
40
|
+
|
41
|
+
result.should be_kind_of(AddUpdateBrandResult)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "update mode defaults to ErrorOnExisting" do
|
45
|
+
message['Request']['UpdateMode'] = 'ErrorOnExisting'
|
46
|
+
savon.expects(:add_update_brand)
|
47
|
+
.with(message: message).returns(response)
|
48
|
+
|
49
|
+
AddUpdateBrand.brand({
|
50
|
+
key: 'WNDFL',
|
51
|
+
name: 'Wonderful',
|
52
|
+
owner: { name: 'Sam' }
|
53
|
+
})
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module ShipCompliant
|
4
|
+
describe AddUpdateProduct do
|
5
|
+
|
6
|
+
before { savon.mock! }
|
7
|
+
after { savon.unmock! }
|
8
|
+
|
9
|
+
let(:message) do
|
10
|
+
{
|
11
|
+
'Request' => {
|
12
|
+
'Security' => {
|
13
|
+
'PartnerKey' => 'abc-123',
|
14
|
+
'Username' => 'bob@example.com',
|
15
|
+
'Password' => 'secret'
|
16
|
+
},
|
17
|
+
'Product' => {
|
18
|
+
'BottleSizeML' => 123,
|
19
|
+
'DefaultWholesaleCasePrice' => 150
|
20
|
+
},
|
21
|
+
'UpdateMode' => 'DoWackaDo'
|
22
|
+
}
|
23
|
+
}
|
24
|
+
end
|
25
|
+
let(:response) { File.read('spec/fixtures/add_update_product.xml') }
|
26
|
+
|
27
|
+
context "product" do
|
28
|
+
it "queries the client with product an update mode" do
|
29
|
+
AddUpdateProduct.stub(:add_update_product) { {} }
|
30
|
+
|
31
|
+
result = AddUpdateProduct.product({
|
32
|
+
bottle_size_ml: 123,
|
33
|
+
default_wholesale_case_price: 150
|
34
|
+
}, update_mode: 'DoWackaDo')
|
35
|
+
|
36
|
+
result.should be_kind_of(AddUpdateProductResult)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "update mode defaults to ErrorOnExisting" do
|
40
|
+
message['Request']['UpdateMode'] = 'ErrorOnExisting'
|
41
|
+
savon.expects(:add_update_product)
|
42
|
+
.with(message: message).returns(response)
|
43
|
+
|
44
|
+
AddUpdateProduct.product({
|
45
|
+
bottle_size_ml: 123,
|
46
|
+
default_wholesale_case_price: 150
|
47
|
+
})
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module ShipCompliant
|
4
|
+
describe SuggestedAddress do
|
5
|
+
|
6
|
+
it { should be_kind_of(Address) }
|
7
|
+
|
8
|
+
context "details" do
|
9
|
+
it "gets the details" do
|
10
|
+
subject.details.should == { address_details: true }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context "parts" do
|
15
|
+
it "gets the parts" do
|
16
|
+
subject.parts.should == { address_parts: true }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
subject do
|
21
|
+
SuggestedAddress.new(
|
22
|
+
details: { address_details: true },
|
23
|
+
parts: { address_parts: true }
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module ShipCompliant
|
4
|
+
describe Address do
|
5
|
+
|
6
|
+
context "city" do
|
7
|
+
it "gets the city" do
|
8
|
+
subject.city.should == 'A City'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
context "county" do
|
13
|
+
it "gets the county" do
|
14
|
+
subject.county.should == 'A County'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "state" do
|
19
|
+
it "gets the state" do
|
20
|
+
subject.state.should == 'A State'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "country" do
|
25
|
+
it "gets the country" do
|
26
|
+
subject.country.should == 'A Country'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "street1" do
|
31
|
+
it "gets street1" do
|
32
|
+
subject.street1.should == 'Street 1'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "street2" do
|
37
|
+
it "gets street2" do
|
38
|
+
subject.street2.should == 'Street 2'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "zip1" do
|
43
|
+
it "gets zip1" do
|
44
|
+
subject.zip1.should == 12345
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "zip2" do
|
49
|
+
it "gets zip2" do
|
50
|
+
subject.zip2.should == 1234
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns nil when empty" do
|
54
|
+
subject.address[:zip2] = nil
|
55
|
+
subject.zip2.should be_nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "company" do
|
60
|
+
it "gets company" do
|
61
|
+
subject.company.should == 'Dippin Dots'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "date_of_birth" do
|
66
|
+
it "gets date_of_birth" do
|
67
|
+
subject.date_of_birth.should == Date.new(1967, 8, 12)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "email" do
|
72
|
+
it "gets email" do
|
73
|
+
subject.email.should == 'sogood@getdots.com'
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context "fax" do
|
78
|
+
it "gets fax" do
|
79
|
+
subject.fax.should == '(555) 123-8901'
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "phone" do
|
84
|
+
it "gets phone" do
|
85
|
+
subject.phone.should == '(555) 123-4567'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context "first_name" do
|
90
|
+
it "gets first_name" do
|
91
|
+
subject.first_name.should == 'Lt.'
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context "last_name" do
|
96
|
+
it "gets last_name" do
|
97
|
+
subject.last_name.should == 'Columbo'
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
subject do
|
102
|
+
Address.new(
|
103
|
+
city: 'A City',
|
104
|
+
county: 'A County',
|
105
|
+
country: 'A Country',
|
106
|
+
state: 'A State',
|
107
|
+
street1: 'Street 1',
|
108
|
+
street2: 'Street 2',
|
109
|
+
zip1: '12345',
|
110
|
+
zip2: '1234',
|
111
|
+
|
112
|
+
company: 'Dippin Dots',
|
113
|
+
date_of_birth: Date.new(1967, 8, 12),
|
114
|
+
email: 'sogood@getdots.com',
|
115
|
+
fax: '(555) 123-8901',
|
116
|
+
phone: '(555) 123-4567',
|
117
|
+
first_name: 'Lt.',
|
118
|
+
last_name: 'Columbo'
|
119
|
+
)
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module ShipCompliant
|
4
|
+
class FauxResult < Struct.new(:response)
|
5
|
+
include BaseResult
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module ShipCompliant
|
10
|
+
describe BaseResult do
|
11
|
+
|
12
|
+
let(:success_message) { {response_status: "Success"} }
|
13
|
+
let(:failure_message) do
|
14
|
+
{
|
15
|
+
errors: {
|
16
|
+
error: {
|
17
|
+
code: "404",
|
18
|
+
key: "OrderId",
|
19
|
+
message: "I'm smarter than the average bear, Boo Boo",
|
20
|
+
target: "SalesOrder",
|
21
|
+
type: "Validation"
|
22
|
+
}
|
23
|
+
},
|
24
|
+
response_status: "Failure"
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
context "success?" do
|
29
|
+
it "returns true for successful response status" do
|
30
|
+
result = FauxResult.new(success_message)
|
31
|
+
result.success?.should be_true
|
32
|
+
end
|
33
|
+
|
34
|
+
it "returns false for failed response status" do
|
35
|
+
result = FauxResult.new(failure_message)
|
36
|
+
result.success?.should be_false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "failure?" do
|
41
|
+
it "returns opposite of success?" do
|
42
|
+
result = FauxResult.new({})
|
43
|
+
result.stub(:success?) { false }
|
44
|
+
result.failure?.should be_true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "errors" do
|
49
|
+
it "returns an array of errors" do
|
50
|
+
result = FauxResult.new(failure_message)
|
51
|
+
result.errors.should == [
|
52
|
+
ErrorResult.new({
|
53
|
+
code: "404",
|
54
|
+
key: "OrderId",
|
55
|
+
message: "I'm smarter than the average bear, Boo Boo",
|
56
|
+
target: "SalesOrder",
|
57
|
+
type: "Validation"
|
58
|
+
})
|
59
|
+
]
|
60
|
+
end
|
61
|
+
|
62
|
+
it "doesn't break when errors is already an array" do
|
63
|
+
result = FauxResult.new({
|
64
|
+
response_status: 'Failure',
|
65
|
+
errors: [
|
66
|
+
{error: { code: '404' }},
|
67
|
+
{error: { code: '500' }}
|
68
|
+
]
|
69
|
+
})
|
70
|
+
|
71
|
+
result.errors.should == [
|
72
|
+
ErrorResult.new(code: '404'),
|
73
|
+
ErrorResult.new(code: '500')
|
74
|
+
]
|
75
|
+
end
|
76
|
+
|
77
|
+
it "returns an empty array for successful response" do
|
78
|
+
result = FauxResult.new(success_message)
|
79
|
+
result.errors.should == []
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "errors_count" do
|
84
|
+
it "counts the number of errors" do
|
85
|
+
result = FauxResult.new({})
|
86
|
+
result.stub(:errors) { [1, 2, 3 ] }
|
87
|
+
result.errors_count.should == 3
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# context "error_message" do
|
92
|
+
# it "gets the error message" do
|
93
|
+
# result = FauxResult.new(failure_message)
|
94
|
+
# result.error_message.should == "I'm smarter than the average bear, Boo Boo"
|
95
|
+
# end
|
96
|
+
|
97
|
+
# it "returns nil when successful" do
|
98
|
+
# result = FauxResult.new(success_message)
|
99
|
+
# result.error_message.should be_nil
|
100
|
+
# end
|
101
|
+
# end
|
102
|
+
|
103
|
+
# context "error_code" do
|
104
|
+
# it "gets the error code" do
|
105
|
+
# result = FauxResult.new(failure_message)
|
106
|
+
# result.error_code.should == 200
|
107
|
+
# end
|
108
|
+
|
109
|
+
# it "returns 0 when successful" do
|
110
|
+
# result = FauxResult.new(success_message)
|
111
|
+
# result.error_code.should == 0
|
112
|
+
# end
|
113
|
+
# end
|
114
|
+
|
115
|
+
# context "error_key" do
|
116
|
+
# it "gets the error key" do
|
117
|
+
# result = FauxResult.new(failure_message)
|
118
|
+
# result.error_key.should == "OrderId"
|
119
|
+
# end
|
120
|
+
|
121
|
+
# it "returns nil when successful" do
|
122
|
+
# result = FauxResult.new(success_message)
|
123
|
+
# result.error_key.should be_nil
|
124
|
+
# end
|
125
|
+
# end
|
126
|
+
end
|
127
|
+
end
|