simple_shipping 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.metrics +6 -0
  4. data/.rspec +4 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/.simplecov +43 -0
  8. data/Gemfile +26 -0
  9. data/Gemfile.lock +201 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.markdown +207 -0
  12. data/Rakefile +68 -0
  13. data/VERSION +1 -0
  14. data/coverage/.resultset.json +1579 -0
  15. data/lib/colorized_text.rb +34 -0
  16. data/lib/simple_shipping.rb +27 -0
  17. data/lib/simple_shipping/abstract.rb +11 -0
  18. data/lib/simple_shipping/abstract/builder.rb +47 -0
  19. data/lib/simple_shipping/abstract/client.rb +111 -0
  20. data/lib/simple_shipping/abstract/model.rb +40 -0
  21. data/lib/simple_shipping/abstract/request.rb +27 -0
  22. data/lib/simple_shipping/abstract/response.rb +26 -0
  23. data/lib/simple_shipping/address.rb +22 -0
  24. data/lib/simple_shipping/contact.rb +24 -0
  25. data/lib/simple_shipping/demo.rb +9 -0
  26. data/lib/simple_shipping/demo/base.rb +71 -0
  27. data/lib/simple_shipping/demo/fedex.rb +46 -0
  28. data/lib/simple_shipping/demo/ups.rb +68 -0
  29. data/lib/simple_shipping/exceptions.rb +40 -0
  30. data/lib/simple_shipping/fedex.rb +14 -0
  31. data/lib/simple_shipping/fedex/client.rb +41 -0
  32. data/lib/simple_shipping/fedex/package_builder.rb +24 -0
  33. data/lib/simple_shipping/fedex/party_builder.rb +50 -0
  34. data/lib/simple_shipping/fedex/request.rb +54 -0
  35. data/lib/simple_shipping/fedex/response.rb +5 -0
  36. data/lib/simple_shipping/fedex/shipment_builder.rb +123 -0
  37. data/lib/simple_shipping/fedex/shipment_request.rb +14 -0
  38. data/lib/simple_shipping/fedex/shipment_response.rb +12 -0
  39. data/lib/simple_shipping/package.rb +43 -0
  40. data/lib/simple_shipping/party.rb +21 -0
  41. data/lib/simple_shipping/shipment.rb +42 -0
  42. data/lib/simple_shipping/ups.rb +24 -0
  43. data/lib/simple_shipping/ups/client.rb +46 -0
  44. data/lib/simple_shipping/ups/package_builder.rb +101 -0
  45. data/lib/simple_shipping/ups/party_builder.rb +38 -0
  46. data/lib/simple_shipping/ups/request.rb +27 -0
  47. data/lib/simple_shipping/ups/response.rb +63 -0
  48. data/lib/simple_shipping/ups/ship_accept_request.rb +21 -0
  49. data/lib/simple_shipping/ups/ship_accept_response.rb +6 -0
  50. data/lib/simple_shipping/ups/ship_client.rb +70 -0
  51. data/lib/simple_shipping/ups/ship_confirm_request.rb +22 -0
  52. data/lib/simple_shipping/ups/ship_confirm_response.rb +6 -0
  53. data/lib/simple_shipping/ups/shipment_builder.rb +66 -0
  54. data/lib/simple_shipping/ups/shipment_request.rb +22 -0
  55. data/lib/simple_shipping/ups/shipment_response.rb +6 -0
  56. data/lib/simple_shipping/ups/void_client.rb +50 -0
  57. data/lib/simple_shipping/ups/void_request.rb +42 -0
  58. data/lib/simple_shipping/ups/void_response.rb +6 -0
  59. data/lib/tasks/demo.rake +58 -0
  60. data/script/ups_certification.rb +140 -0
  61. data/simple_shipping.gemspec +168 -0
  62. data/spec/fixtures/fedex_shipment_request.soap.xml.erb +85 -0
  63. data/spec/fixtures/fedex_shipment_response.soap.xml.erb +182 -0
  64. data/spec/fixtures/ups_shipment_request.soap.xml.erb +88 -0
  65. data/spec/fixtures/ups_shipment_response.soap.xml.erb +58 -0
  66. data/spec/fixtures/ups_shipment_response_with_faked_label_data.soap.xml.erb +54 -0
  67. data/spec/fixtures/ups_void_request.soap.xml.erb +29 -0
  68. data/spec/fixtures/ups_void_response.soap.xml.erb +21 -0
  69. data/spec/lib/simple_shipping/address_spec.rb +19 -0
  70. data/spec/lib/simple_shipping/contact_spec.rb +28 -0
  71. data/spec/lib/simple_shipping/exceptions_spec.rb +58 -0
  72. data/spec/lib/simple_shipping/fedex/package_builder_spec.rb +5 -0
  73. data/spec/lib/simple_shipping/fedex/party_builder_spec.rb +5 -0
  74. data/spec/lib/simple_shipping/fedex/response/shipment_reponse_spec.rb +5 -0
  75. data/spec/lib/simple_shipping/fedex/response_spec.rb +5 -0
  76. data/spec/lib/simple_shipping/fedex/shipment_builder_spec.rb +23 -0
  77. data/spec/lib/simple_shipping/package_spec.rb +32 -0
  78. data/spec/lib/simple_shipping/party_spec.rb +18 -0
  79. data/spec/lib/simple_shipping/shipment_spec.rb +35 -0
  80. data/spec/lib/simple_shipping/ups/package_builder_spec.rb +26 -0
  81. data/spec/lib/simple_shipping/ups/party_builder_spec.rb +47 -0
  82. data/spec/lib/simple_shipping/ups/response/shipment_response_spec.rb +5 -0
  83. data/spec/lib/simple_shipping/ups/response_spec.rb +33 -0
  84. data/spec/lib/simple_shipping/ups/shipment_builder_spec.rb +19 -0
  85. data/spec/requests/fedex_spec.rb +47 -0
  86. data/spec/requests/ups_spec.rb +75 -0
  87. data/spec/spec_helper.rb +47 -0
  88. data/spec/support/custom_matchers/basic_matcher.rb +13 -0
  89. data/spec/support/custom_matchers/have_attribute_matcher.rb +22 -0
  90. data/spec/support/custom_matchers/have_default_value_matcher.rb +26 -0
  91. data/spec/support/custom_matchers/have_errors_on_matcher.rb +23 -0
  92. data/spec/support/custom_matchers/validate_inclusion_of_matcher.rb +37 -0
  93. data/spec/support/custom_matchers/validate_presence_of_matcher.rb +24 -0
  94. data/spec/support/custom_matchers/validate_submodel_matcher.rb +44 -0
  95. data/spec/support/shared_behaviours/builders_behaviour.rb +9 -0
  96. data/spec/support/shared_behaviours/responses_behaviour.rb +10 -0
  97. data/tmp/metric_fu/_data/20131210.yml +9964 -0
  98. data/wsdl/fedex/ship_service_v10.wsdl +5566 -0
  99. data/wsdl/ups/Ship.wsdl +120 -0
  100. data/wsdl/ups/Void.wsdl +58 -0
  101. metadata +308 -0
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
3
+ <soapenv:Header/>
4
+ <soapenv:Body>
5
+ <ship:ShipmentResponse xmlns:ship="http://www.ups.com/XMLSchema/XOLTWS/Ship/v1.0">
6
+ <common:Response xmlns:common="http://www.ups.com/XMLSchema/XOLTWS/Common/v1.0">
7
+ <common:ResponseStatus>
8
+ <common:Code>1</common:Code>
9
+ <common:Description>Success</common:Description>
10
+ </common:ResponseStatus>
11
+ <common:TransactionReference/>
12
+ </common:Response>
13
+ <ship:ShipmentResults>
14
+ <ship:ShipmentCharges>
15
+ <ship:TransportationCharges>
16
+ <ship:CurrencyCode>USD</ship:CurrencyCode>
17
+ <ship:MonetaryValue>19.28</ship:MonetaryValue>
18
+ </ship:TransportationCharges>
19
+ <ship:ServiceOptionsCharges>
20
+ <ship:CurrencyCode>USD</ship:CurrencyCode>
21
+ <ship:MonetaryValue>0.00</ship:MonetaryValue>
22
+ </ship:ServiceOptionsCharges>
23
+ <ship:TotalCharges>
24
+ <ship:CurrencyCode>USD</ship:CurrencyCode>
25
+ <ship:MonetaryValue>19.28</ship:MonetaryValue>
26
+ </ship:TotalCharges>
27
+ </ship:ShipmentCharges>
28
+ <ship:BillingWeight>
29
+ <ship:UnitOfMeasurement>
30
+ <ship:Code>LBS</ship:Code>
31
+ <ship:Description>Pounds</ship:Description>
32
+ </ship:UnitOfMeasurement>
33
+ <ship:Weight>0.0</ship:Weight>
34
+ </ship:BillingWeight>
35
+ <ship:ShipmentIdentificationNumber>1Z35679R0294268838</ship:ShipmentIdentificationNumber>
36
+ <ship:PackageResults>
37
+ <ship:TrackingNumber>1Z35679R0294268838</ship:TrackingNumber>
38
+ <ship:ServiceOptionsCharges>
39
+ <ship:CurrencyCode>USD</ship:CurrencyCode>
40
+ <ship:MonetaryValue>0.00</ship:MonetaryValue>
41
+ </ship:ServiceOptionsCharges>
42
+ <ship:ShippingLabel>
43
+ <ship:ImageFormat>
44
+ <ship:Code>GIF</ship:Code>
45
+ <ship:Description>GIF</ship:Description>
46
+ </ship:ImageFormat>
47
+ <ship:GraphicImage>
48
+ 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
49
+ </ship:GraphicImage>
50
+ <ship:HTMLImage>
51
+ PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAzLjIvL0VOIj4KPGh0bWw+PGhlYWQ+PHRpdGxlPgpWaWV3L1ByaW50IExhYmVsPC90aXRsZT48L2hlYWQ+PHN0eWxlPgogICAgLnNtYWxsX3RleHQge2ZvbnQtc2l6ZTogODAlO30KICAgIC5sYXJnZV90ZXh0IHtmb250LXNpemU6IDExNSU7fQo8L3N0eWxlPgo8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIj4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjAwIj48dHI+Cjx0ZCBoZWlnaHQ9IjQxMCIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KPEIgY2xhc3M9ImxhcmdlX3RleHQiPlZpZXcvUHJpbnQgTGFiZWw8L0I+CiZuYnNwOzxicj4KJm5ic3A7PGJyPgo8b2wgY2xhc3M9InNtYWxsX3RleHQiPiA8bGk+PGI+UHJpbnQgdGhlIGxhYmVsOjwvYj4gJm5ic3A7ClNlbGVjdCBQcmludCBmcm9tIHRoZSBGaWxlIG1lbnUgaW4gdGhpcyBicm93c2VyIHdpbmRvdyB0byBwcmludCB0aGUgbGFiZWwgYmVsb3cuPGJyPjxicj48bGk+PGI+CkZvbGQgdGhlIHByaW50ZWQgbGFiZWwgYXQgdGhlIGRvdHRlZCBsaW5lLjwvYj4gJm5ic3A7ClBsYWNlIHRoZSBsYWJlbCBpbiBhIFVQUyBTaGlwcGluZyBQb3VjaC4gSWYgeW91IGRvIG5vdCBoYXZlIGEgcG91Y2gsIGFmZml4IHRoZSBmb2xkZWQgbGFiZWwgdXNpbmcgY2xlYXIgcGxhc3RpYyBzaGlwcGluZyB0YXBlIG92ZXIgdGhlIGVudGlyZSBsYWJlbC48YnI+PGJyPjxsaT48Yj5HRVRUSU5HIFlPVVIgU0hJUE1FTlQgVE8gVVBTPGJyPgpDdXN0b21lcnMgd2l0aG91dCBhIERhaWx5IFBpY2t1cDwvYj48dWw+PGxpPlRha2UgdGhpcyBwYWNrYWdlIHRvIGFueSBsb2NhdGlvbiBvZiBUaGUgVVBTIFN0b3JlriwgVVBTIERyb3AgQm94LCBVUFMgQ3VzdG9tZXIgQ2VudGVyLCBVUFMgQWxsaWFuY2VzIChPZmZpY2UgRGVwb3SuIG9yIFN0YXBsZXOuKSBvciBBdXRob3JpemVkIFNoaXBwaW5nIE91dGxldCBuZWFyIHlvdSBvciB2aXNpdCA8YSBocmVmPSJodHRwOi8vd3d3LnVwcy5jb20vY29udGVudC91cy9lbi9pbmRleC5qc3giPnd3dy51cHMuY29tL2NvbnRlbnQvdXMvZW4vaW5kZXguanN4PC9hPiBhbmQgc2VsZWN0IERyb3AgT2ZmLjxsaT4KQWlyIHNoaXBtZW50cyAoaW5jbHVkaW5nIFdvcmxkd2lkZSBFeHByZXNzIGFuZCBFeHBlZGl0ZWQpIGNhbiBiZSBwaWNrZWQgdXAgb3IgZHJvcHBlZCBvZmYuIFRvIHNjaGVkdWxlIGEgcGlja3VwLCBvciB0byBmaW5kIGEgZHJvcC1vZmYgbG9jYXRpb24sIHNlbGVjdCB0aGUgUGlja3VwIG9yIERyb3Atb2ZmIGljb24gZnJvbSB0aGUgVVBTIHRvb2wgYmFyLiAgPC91bD4gPGJyPiAKPGI+Q3VzdG9tZXJzIHdpdGggYSBEYWlseSBQaWNrdXA8L2I+PHVsPjxsaT4KWW91ciBkcml2ZXIgd2lsbCBwaWNrdXAgeW91ciBzaGlwbWVudChzKSBhcyB1c3VhbC4gPC91bD4KPC9vbD48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI2MDAiPgo8dHI+Cjx0ZCBjbGFzcz0ic21hbGxfdGV4dCIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KJm5ic3A7Jm5ic3A7Jm5ic3A7CjxhIG5hbWU9ImZvbGRIZXJlIj5GT0xEIEhFUkU8L2E+PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48aHI+CjwvdGQ+CjwvdHI+CjwvdGFibGU+Cgo8dGFibGU+Cjx0cj4KPHRkIGhlaWdodD0iMTAiPiZuYnNwOwo8L3RkPgo8L3RyPgo8L3RhYmxlPgoKPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjUwIiA+PHRyPgo8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KPElNRyBTUkM9Ii4vbGFiZWwxWjM1Njc5UjAyOTQyNjg4MzguZ2lmIiBoZWlnaHQ9IjM5MiIgd2lkdGg9IjY1MSI+CjwvdGQ+CjwvdHI+PC90YWJsZT4KPC9ib2R5Pgo8L2h0bWw+Cg==
52
+ </ship:HTMLImage>
53
+ </ship:ShippingLabel>
54
+ </ship:PackageResults>
55
+ </ship:ShipmentResults>
56
+ </ship:ShipmentResponse>
57
+ </soapenv:Body>
58
+ </soapenv:Envelope>
@@ -0,0 +1,54 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
3
+ <soapenv:Header/>
4
+ <soapenv:Body>
5
+ <ship:ShipmentResponse xmlns:ship="http://www.ups.com/XMLSchema/XOLTWS/Ship/v1.0">
6
+ <common:Response xmlns:common="http://www.ups.com/XMLSchema/XOLTWS/Common/v1.0">
7
+ <common:ResponseStatus>
8
+ <common:Code>1</common:Code>
9
+ <common:Description>Success</common:Description>
10
+ </common:ResponseStatus>
11
+ <common:TransactionReference/>
12
+ </common:Response>
13
+ <ship:ShipmentResults>
14
+ <ship:ShipmentCharges>
15
+ <ship:TransportationCharges>
16
+ <ship:CurrencyCode>USD</ship:CurrencyCode>
17
+ <ship:MonetaryValue>19.28</ship:MonetaryValue>
18
+ </ship:TransportationCharges>
19
+ <ship:ServiceOptionsCharges>
20
+ <ship:CurrencyCode>USD</ship:CurrencyCode>
21
+ <ship:MonetaryValue>0.00</ship:MonetaryValue>
22
+ </ship:ServiceOptionsCharges>
23
+ <ship:TotalCharges>
24
+ <ship:CurrencyCode>USD</ship:CurrencyCode>
25
+ <ship:MonetaryValue>19.28</ship:MonetaryValue>
26
+ </ship:TotalCharges>
27
+ </ship:ShipmentCharges>
28
+ <ship:BillingWeight>
29
+ <ship:UnitOfMeasurement>
30
+ <ship:Code>LBS</ship:Code>
31
+ <ship:Description>Pounds</ship:Description>
32
+ </ship:UnitOfMeasurement>
33
+ <ship:Weight>0.0</ship:Weight>
34
+ </ship:BillingWeight>
35
+ <ship:ShipmentIdentificationNumber>1Z35679R0294268838</ship:ShipmentIdentificationNumber>
36
+ <ship:PackageResults>
37
+ <ship:TrackingNumber>1Z35679R0294268838</ship:TrackingNumber>
38
+ <ship:ServiceOptionsCharges>
39
+ <ship:CurrencyCode>USD</ship:CurrencyCode>
40
+ <ship:MonetaryValue>0.00</ship:MonetaryValue>
41
+ </ship:ServiceOptionsCharges>
42
+ <ship:ShippingLabel>
43
+ <ship:ImageFormat>
44
+ <ship:Code>GIF</ship:Code>
45
+ <ship:Description>GIF</ship:Description>
46
+ </ship:ImageFormat>
47
+ <ship:GraphicImage>SU1BR0VfREFUQQ==</ship:GraphicImage>
48
+ <ship:HTMLImage>SFRNTF9JTUFHRV9EQVRB</ship:HTMLImage>
49
+ </ship:ShippingLabel>
50
+ </ship:PackageResults>
51
+ </ship:ShipmentResults>
52
+ </ship:ShipmentResponse>
53
+ </soapenv:Body>
54
+ </soapenv:Envelope>
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xmlns:upss="http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0"
4
+ xmlns:ship="http://www.ups.com/XMLSchema/XOLTWS/Ship/v1.0"
5
+ xmlns:void="http://www.ups.com/XMLSchema/XOLTWS/Void/v1.1"
6
+ xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
7
+ xmlns:common="http://www.ups.com/XMLSchema/XOLTWS/Common/v1.0">
8
+ <env:Header>
9
+ <upss:UPSSecurity>
10
+ <upss:UsernameToken>
11
+ <upss:Username><%= username %></upss:Username>
12
+ <upss:Password><%= password %></upss:Password>
13
+ </upss:UsernameToken>
14
+ <upss:ServiceAccessToken>
15
+ <upss:AccessLicenseNumber><%= access_license_number %></upss:AccessLicenseNumber>
16
+ </upss:ServiceAccessToken>
17
+ </upss:UPSSecurity>
18
+ </env:Header>
19
+ <env:Body>
20
+ <void:VoidShipmentRequest>
21
+ <common:Request>
22
+ <common:RequestOption>nonvalidate</common:RequestOption>
23
+ </common:Request>
24
+ <void:VoidShipment>
25
+ <void:ShipmentIdentificationNumber><%= shipment_identification_number %></void:ShipmentIdentificationNumber>
26
+ </void:VoidShipment>
27
+ </void:VoidShipmentRequest>
28
+ </env:Body>
29
+ </env:Envelope>
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
3
+ <soapenv:Header/>
4
+ <soapenv:Body>
5
+ <soapenv:Fault>
6
+ <faultcode>Client</faultcode>
7
+ <faultstring>An exception has been raised as a result of client data.</faultstring>
8
+ <detail>
9
+ <err:Errors xmlns:err="http://www.ups.com/XMLSchema/XOLTWS/Error/v1.1">
10
+ <err:ErrorDetail>
11
+ <err:Severity>Hard</err:Severity>
12
+ <err:PrimaryErrorCode>
13
+ <err:Code>190102</err:Code>
14
+ <err:Description>No shipment found within the allowed void period</err:Description>
15
+ </err:PrimaryErrorCode>
16
+ </err:ErrorDetail>
17
+ </err:Errors>
18
+ </detail>
19
+ </soapenv:Fault>
20
+ </soapenv:Body>
21
+ </soapenv:Envelope>
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleShipping::Address do
4
+ it { should be_kind_of SimpleShipping::Abstract::Model }
5
+
6
+ describe 'attributes' do
7
+ it { should have_attribute :country_code }
8
+ it { should have_attribute :state_code }
9
+ it { should have_attribute :city }
10
+ it { should have_attribute :street_line }
11
+ it { should have_attribute :street_line_2 }
12
+ it { should have_attribute :street_line_3 }
13
+ it { should have_attribute :postal_code }
14
+ end
15
+
16
+ describe 'validations' do
17
+ it {should validate_presence_of :country_code }
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleShipping::Contact do
4
+ it { should be_kind_of SimpleShipping::Abstract::Model }
5
+
6
+ describe 'attributes' do
7
+ it { should have_attribute :person_name }
8
+ it { should have_attribute :company_name }
9
+ it { should have_attribute :phone_number }
10
+ it { should have_attribute :email }
11
+ end
12
+
13
+ describe 'validations' do
14
+ it {should validate_presence_of :phone_number }
15
+
16
+ it 'person_name or company_name should be present' do
17
+ contact = SimpleShipping::Contact.new(:phone_number => '123')
18
+ contact.should_not be_valid
19
+
20
+ contact.person_name = "John"
21
+ contact.should be_valid
22
+
23
+ contact.person_name = nil
24
+ contact.company_name = "Osborn Inc"
25
+ contact.should be_valid
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleShipping::ValidationError do
4
+ describe "to_s" do
5
+ it "should create message with full messages from Abstract::Model argument" do
6
+ TestModel = Class.new(SimpleShipping::Abstract::Model)
7
+ model = TestModel.new
8
+
9
+ errors = double('ActiveModel::Errors')
10
+ full_messages = ["error one", "error two"]
11
+
12
+ model.should_receive(:errors).and_return(errors)
13
+ errors.should_receive(:full_messages).and_return(full_messages)
14
+
15
+ error = SimpleShipping::ValidationError.new(model)
16
+ error.to_s.should == "Invalid model TestModel. Validation errors: error one, error two"
17
+ end
18
+
19
+ it "should create message with given string" do
20
+ test = "test string"
21
+ error = SimpleShipping::ValidationError.new(test)
22
+ error.to_s.should == test
23
+ end
24
+ end
25
+ end
26
+
27
+ describe SimpleShipping::ValidationError do
28
+ describe "to_s" do
29
+ it "should create message with SOAP 1.1 faultcode information" do
30
+ fault = Hash.new
31
+ fault[:faultcode] = "faultcode"
32
+ fault[:faultstring] = "faultstring"
33
+
34
+ fault[:detail] = {
35
+ :errors => {
36
+ :error_detail => {
37
+ :primary_error_code => {
38
+ :description => "description",
39
+ :code => "12345"
40
+ }
41
+ }
42
+ }
43
+ }
44
+
45
+ error = SimpleShipping::RequestError.new(:fault => fault)
46
+ error.to_s.should == "faultstring (12345) description"
47
+ end
48
+
49
+ it "should create message with SOAP 1.2 faultcode information" do
50
+ fault = Hash.new
51
+ fault[:code] = {:value => "value"}
52
+ fault[:reason] = {:text => "reason"}
53
+
54
+ error = SimpleShipping::RequestError.new(:fault => fault)
55
+ error.to_s.should == "(value) reason"
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleShipping::Fedex::PackageBuilder do
4
+ it_should_behave_like "builders"
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleShipping::Fedex::PartyBuilder do
4
+ it_should_behave_like "builders"
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleShipping::Ups::ShipmentResponse do
4
+ it_should_behave_like "responses_with_labels"
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleShipping::Fedex::Response do
4
+ it_should_behave_like "responses"
5
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleShipping::Fedex::ShipmentBuilder do
4
+ it_should_behave_like "builders"
5
+
6
+ def build_it(opts = {})
7
+ shipment = SimpleShipping::Shipment.new
8
+ shipment.stub!(:valid? => true)
9
+ SimpleShipping::Fedex::ShipmentBuilder.build(shipment, opts)
10
+ end
11
+
12
+ describe 'validation' do
13
+ it 'validates inclusion of :dropoff_type' do
14
+ lambda { build_it(:dropoff_type => :bad_value) }.should raise_error SimpleShipping::ValidationError
15
+ lambda { build_it(:dropoff_type => :drop_box) }.should_not raise_error SimpleShipping::ValidationError
16
+ end
17
+
18
+ it 'validates inclusion of :service_type' do
19
+ lambda { build_it(:service_type => :bad_value) }.should raise_error SimpleShipping::ValidationError
20
+ lambda { build_it(:service_type => :fedex_ground ) }.should_not raise_error SimpleShipping::ValidationError
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleShipping::Package do
4
+ it { should be_kind_of SimpleShipping::Abstract::Model }
5
+
6
+ describe 'attributes' do
7
+ it { should have_attribute :length }
8
+ it { should have_attribute :width }
9
+ it { should have_attribute :height }
10
+ it { should have_attribute :dimension_units }
11
+ it { should have_attribute :weight }
12
+ it { should have_attribute :weight_units }
13
+ it { should have_attribute :packaging_type }
14
+ end
15
+
16
+ describe 'validations' do
17
+ it { should validate_presence_of :length }
18
+ it { should validate_presence_of :width }
19
+ it { should validate_presence_of :height }
20
+ it { should validate_presence_of :dimension_units }
21
+ it { should validate_presence_of :weight }
22
+ it { should validate_presence_of :weight_units }
23
+ it { should validate_inclusion_of(:weight_units).in(:kg, :lb) }
24
+ it { should validate_inclusion_of(:dimension_units).in(:cm, :in) }
25
+ it { should validate_inclusion_of(:packaging_type).in(:envelope, :pak, :tube, :your, :box, :box_10kg, :box_25kg) }
26
+ end
27
+
28
+ describe 'default values' do
29
+ it { should have_default_value(:in).for_attribute(:dimension_units) }
30
+ it { should have_default_value(:lb).for_attribute(:weight_units) }
31
+ end
32
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleShipping::Party do
4
+ it { should be_kind_of SimpleShipping::Abstract::Model }
5
+
6
+ describe 'attributes' do
7
+ it { should have_attribute :contact }
8
+ it { should have_attribute :address }
9
+ it { should have_attribute :account_number }
10
+ end
11
+
12
+ describe 'validations' do
13
+ it { should validate_presence_of :contact }
14
+ it { should validate_presence_of :address }
15
+ it { should validate_submodel(:address).as(SimpleShipping::Address) }
16
+ it { should validate_submodel(:contact).as(SimpleShipping::Contact) }
17
+ end
18
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleShipping::Shipment do
4
+ it { should be_kind_of SimpleShipping::Abstract::Model }
5
+
6
+ describe 'attributes' do
7
+ it { should have_attribute :shipper }
8
+ it { should have_attribute :recipient }
9
+ it { should have_attribute :package }
10
+ it { should have_attribute :payor }
11
+ end
12
+
13
+ describe 'validations' do
14
+ it { should validate_presence_of :shipper }
15
+ it { should validate_presence_of :recipient }
16
+ it { should validate_presence_of :package }
17
+ it { should validate_presence_of :payor }
18
+ it { should validate_inclusion_of(:payor).in(:shipper, :recipient) }
19
+ it { should validate_submodel(:shipper).as(SimpleShipping::Party) }
20
+ it { should validate_submodel(:recipient).as(SimpleShipping::Party) }
21
+ it { should validate_submodel(:package).as(SimpleShipping::Package) }
22
+
23
+ it 'validates payor account number' do
24
+ recipient = SimpleShipping::Party.new(:account_number => '123')
25
+ shipment = SimpleShipping::Shipment.new(:recipient => recipient, :payor => :recipient)
26
+ shipment.should_not have_errors_on(:abstract)
27
+ shipment.recipient.account_number = nil
28
+ shipment.should have_errors_on(:abstract)
29
+ end
30
+ end
31
+
32
+ describe 'default values' do
33
+ it { should have_default_value(:shipper).for_attribute(:payor) }
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ module SimpleShipping
4
+ describe Ups::PackageBuilder do
5
+ it_should_behave_like "builders"
6
+
7
+ describe ".build" do
8
+ before do
9
+ @package = Package.new(:weight => 1, :height => 1, :width => 1, :length => 1)
10
+ end
11
+ it "should include dimensions when packaging_type is 'your'" do
12
+ package = @package.packaging_type = :your
13
+ attributes = described_class.build(@package)
14
+ attributes.should have_key('Dimensions')
15
+ end
16
+
17
+ (Ups::PackageBuilder::PACKAGING_TYPES.keys - [:your]).each do |type|
18
+ it "should not include dimensions when packaging_type is '#{type}'" do
19
+ package = @package.packaging_type = :envelope
20
+ attributes = described_class.build(@package)
21
+ attributes.should_not have_key('Dimensions')
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end