click_and_send 0.1.1 → 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.
@@ -1,3 +1,3 @@
1
1
  module ClickAndSend
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -72,6 +72,22 @@ module ClickAndSend
72
72
  end
73
73
  end
74
74
 
75
+ def item_pdf_url(ref)
76
+ ref = ref.to_s
77
+ tracking_numbers = find_tracking_numbers([ref])[ref] || {}
78
+ case tracking_numbers.length
79
+ when 0 then raise(Errors::APIError, "Not found: '#{ref}'")
80
+ when 1 then tracking_number = tracking_numbers.first
81
+ else
82
+ raise(Errors::APIError, "Expected 1 but found #{tracking_numbers.length} tracking numbers for '#{ref}': #{tracking_numbers.join(', ')}")
83
+ end
84
+ hash = ActiveSupport::OrderedHash.new
85
+ hash['PrintFormat' ] = 'LINK'
86
+ hash['CustTransactionID'] = ref
87
+ hash['TrackingNumber' ] = tracking_number
88
+ Request::PrintItem.new(hash).result
89
+ end
90
+
75
91
  def item_summary
76
92
  Request::ItemSummary.new.result.fetch(:item_summary_transaction)
77
93
  end
@@ -91,23 +107,22 @@ module ClickAndSend
91
107
  ClickAndSend::Request::ManifestItems.new(options).result
92
108
  end
93
109
 
94
- def pdf_url(ref)
95
- ref = ref.to_s
96
- tracking_numbers = find_tracking_numbers([ref])[ref] || {}
97
- case tracking_numbers.length
98
- when 0 then raise(Errors::APIError, "Not found: '#{ref}'")
99
- when 1 then tracking_number = tracking_numbers.first
100
- else
101
- raise(Errors::APIError, "Expected 1 but found #{tracking_numbers.length} tracking numbers for '#{ref}': #{tracking_numbers.join(', ')}")
102
- end
103
- hash = ActiveSupport::OrderedHash.new
104
- hash['PrintFormat' ] = 'LINK'
105
- hash['CustTransactionID'] = ref
106
- hash['TrackingNumber' ] = tracking_number
107
- Request::PrintItem.new(hash).result
110
+ def manifest_items_by_refs(refs)
111
+ tracking_numbers = find_tracking_numbers(refs)
112
+ options = {
113
+ 'ManifestItems' => refs.collect do |ref|
114
+ {
115
+ 'ManifestItem' => ActiveSupport::OrderedHash.new.tap do |hash|
116
+ hash['CustTransactionID'] = ref.to_s
117
+ hash['TrackingNumber' ] = tracking_numbers[ref.to_s].first
118
+ end
119
+ }
120
+ end
121
+ }
122
+ manifest_items(options)
108
123
  end
109
124
 
110
- def print_manifest(options)
125
+ def manifest_pdf_url(options)
111
126
  ensure_keys_present(options, %w(PrintFormat PrintDetails ManifestNumber))
112
127
  ClickAndSend::Request::PrintManifest.new(options).result.fetch(:manifest_http_link)
113
128
  end
@@ -36,8 +36,8 @@ describe ClickAndSend, :acceptance do
36
36
  end
37
37
  end
38
38
 
39
- describe '.pdf_url' do
40
- subject { ClickAndSend.pdf_url(ref) }
39
+ describe '.item_pdf_url' do
40
+ subject { ClickAndSend.item_pdf_url(ref) }
41
41
  it "returns URL for PDF" do
42
42
  subject.should be_a(String)
43
43
  open(subject).content_type.should eq('application/pdf')
@@ -119,8 +119,8 @@ describe ClickAndSend, :acceptance do
119
119
  end
120
120
  end
121
121
 
122
- describe '.print_manifest' do
123
- let(:print_manifest) { ClickAndSend.print_manifest(options) }
122
+ describe '.manifest_pdf_url' do
123
+ let(:manifest_pdf_url) { ClickAndSend.manifest_pdf_url(options) }
124
124
  let(:options) do
125
125
  ActiveSupport::OrderedHash.new.tap do |hash|
126
126
  hash['PrintFormat'] = 'LINK'
@@ -130,9 +130,22 @@ describe ClickAndSend, :acceptance do
130
130
  end
131
131
 
132
132
  it "returns URL for PDF" do
133
- print_manifest.should be_a(String)
134
- open(print_manifest).content_type.should eq('application/pdf')
133
+ manifest_pdf_url.should be_a(String)
134
+ open(manifest_pdf_url).content_type.should eq('application/pdf')
135
135
  end
136
136
  end
137
137
  end
138
+
139
+ describe '.manifest_items_by_refs' do
140
+ subject { ClickAndSend.manifest_items_by_refs(refs) }
141
+ let(:items_created) { ClickAndSend.create_items('Transactions' => attributes_for('Transaction')) }
142
+ let(:ref) { items_created.fetch(:cust_transaction_id) }
143
+ let(:refs) { [ref] }
144
+
145
+ it "returns manifest number and total charges/taxes" do
146
+ expect { subject }.not_to raise_error
147
+ subject.should be_a(Hash)
148
+ subject.keys.should =~ [:manifest_number, :total_charge, :total_taxes]
149
+ end
150
+ end
138
151
  end
@@ -143,34 +143,8 @@ describe ClickAndSend do
143
143
  end
144
144
  end
145
145
 
146
- describe '.item_summary' do
147
- subject { ClickAndSend.item_summary }
148
- it "fetches :item_summary_transaction from ItemSummary result" do
149
- ClickAndSend::Request::ItemSummary.should_receive(:new) do
150
- stub(:result => {:item_summary_transaction => 'items'})
151
- end
152
- subject.should eq('items')
153
- end
154
- end
155
-
156
- describe '.manifest_items' do
157
- subject { ClickAndSend.manifest_items(options) }
158
- let(:required_inputs) { %w(ManifestItems) }
159
- it_behaves_like "data required"
160
-
161
- context "when input has valid keys" do
162
- it "calls ManifestItems result" do
163
- manifest_items = stub
164
- options = {'ManifestItems' => stub}
165
- ClickAndSend::Request::ManifestItems.should_receive(:new).with(options) { manifest_items }
166
- manifest_items.should_receive(:result)
167
- ClickAndSend.manifest_items(options)
168
- end
169
- end
170
- end
171
-
172
- describe '.pdf_url' do
173
- subject { ClickAndSend.pdf_url('REF') }
146
+ describe '.item_pdf_url' do
147
+ subject { ClickAndSend.item_pdf_url('REF') }
174
148
  let(:options) do
175
149
  {
176
150
  'PrintFormat' => 'LINK',
@@ -178,7 +152,7 @@ describe ClickAndSend do
178
152
  'TrackingNumber' => tracking_numbers.first
179
153
  }
180
154
  end
181
- let(:pdf_url) { 'http://example.com/paperwork.pdf' }
155
+ let(:item_pdf_url) { 'http://example.com/paperwork.pdf' }
182
156
  before do
183
157
  ClickAndSend.stub(:find_tracking_numbers).with(['REF']) do
184
158
  {'REF' => tracking_numbers}
@@ -189,9 +163,9 @@ describe ClickAndSend do
189
163
  let(:tracking_numbers) { ['xyz'] }
190
164
  specify "requests URL from PrintItem" do
191
165
  ClickAndSend::Request::PrintItem.should_receive(:new).with(options) do
192
- stub(:result => pdf_url)
166
+ stub(:result => item_pdf_url)
193
167
  end
194
- subject.should eq(pdf_url)
168
+ subject.should eq(item_pdf_url)
195
169
  end
196
170
  end
197
171
 
@@ -210,23 +184,76 @@ describe ClickAndSend do
210
184
  end
211
185
  end
212
186
 
213
- describe '.print_manifest' do
214
- subject { ClickAndSend.print_manifest(options) }
187
+ describe '.item_summary' do
188
+ subject { ClickAndSend.item_summary }
189
+ it "fetches :item_summary_transaction from ItemSummary result" do
190
+ ClickAndSend::Request::ItemSummary.should_receive(:new) do
191
+ stub(:result => {:item_summary_transaction => 'items'})
192
+ end
193
+ subject.should eq('items')
194
+ end
195
+ end
196
+
197
+ describe '.manifest_items' do
198
+ subject { ClickAndSend.manifest_items(options) }
199
+ let(:required_inputs) { %w(ManifestItems) }
200
+ it_behaves_like "data required"
201
+
202
+ context "when input has valid keys" do
203
+ it "calls ManifestItems result" do
204
+ manifest_items = stub
205
+ options = {'ManifestItems' => stub}
206
+ ClickAndSend::Request::ManifestItems.should_receive(:new).with(options) { manifest_items }
207
+ manifest_items.should_receive(:result)
208
+ ClickAndSend.manifest_items(options)
209
+ end
210
+ end
211
+ end
212
+
213
+ describe '.manifest_items_by_refs' do
214
+ subject { ClickAndSend.manifest_items_by_refs(refs, options) }
215
+ let(:manifest_items) do
216
+ {
217
+ 'ManifestItems' => [
218
+ {
219
+ 'ManifestItem' => ActiveSupport::OrderedHash.new.tap do |hash|
220
+ hash['CustTransactionID'] = ref
221
+ hash['TrackingNumber' ] = tracking_number
222
+ end
223
+ }
224
+ ]
225
+ }
226
+ end
227
+ let(:options) { stub }
228
+ let(:print_manifest) { stub }
229
+ let(:ref) { stub.tap { |ref| ref.stub(:to_s) { ref } } }
230
+ let(:refs) { [ref] }
231
+ let(:tracking_number) { stub }
232
+
233
+ it "retrieves tracking numbers and calls manifest_items" do
234
+ ClickAndSend.should_receive(:find_tracking_numbers).with(refs) { {ref => [tracking_number]} }
235
+ ClickAndSend.should_receive(:manifest_items).with(manifest_items) { print_manifest }
236
+ ClickAndSend.manifest_items_by_refs(refs).should eq(print_manifest)
237
+ end
238
+ end
239
+
240
+ describe '.manifest_pdf_url' do
241
+ subject { ClickAndSend.manifest_pdf_url(options) }
215
242
  let(:required_inputs) { %w(PrintFormat PrintDetails ManifestNumber) }
216
243
  it_behaves_like "data required"
217
244
 
218
245
  context "when input has valid keys" do
219
246
  it "calls PrintManifest result" do
220
247
  result = stub
221
- print_manifest = stub(:result => result)
248
+ manifest_pdf_url = stub(:result => result)
222
249
  result.stub(:fetch).with(:manifest_http_link) { 'the link' }
223
250
  options = ActiveSupport::OrderedHash.new.tap do |hash|
224
251
  required_inputs.each do |required_input|
225
252
  hash[required_input] = stub
226
253
  end
227
254
  end
228
- ClickAndSend::Request::PrintManifest.should_receive(:new).with(options) { print_manifest }
229
- ClickAndSend.print_manifest(options).should eq('the link')
255
+ ClickAndSend::Request::PrintManifest.should_receive(:new).with(options) { manifest_pdf_url }
256
+ ClickAndSend.manifest_pdf_url(options).should eq('the link')
230
257
  end
231
258
  end
232
259
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: click_and_send
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -178,7 +178,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
178
178
  version: '0'
179
179
  segments:
180
180
  - 0
181
- hash: -2750192198691146344
181
+ hash: -2505933282695818565
182
182
  required_rubygems_version: !ruby/object:Gem::Requirement
183
183
  none: false
184
184
  requirements:
@@ -187,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
187
  version: '0'
188
188
  segments:
189
189
  - 0
190
- hash: -2750192198691146344
190
+ hash: -2505933282695818565
191
191
  requirements: []
192
192
  rubyforge_project:
193
193
  rubygems_version: 1.8.24