cangaroo 1.0.0 → 1.1.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.
@@ -0,0 +1,10 @@
1
+ {
2
+ "request_id": "c143e548-afed-44ab-9997-43614d6c762b",
3
+ "summary": "Product added with Shopify ID of 5775282183 was added.",
4
+ "products": [
5
+ {
6
+ "id": "SKUPRODUCT",
7
+ "shopify_id": "5775282183"
8
+ }
9
+ ]
10
+ }
@@ -8,9 +8,7 @@ describe Cangaroo::HandleRequest do
8
8
 
9
9
  let(:interactors) do
10
10
  [Cangaroo::AuthenticateConnection,
11
- Cangaroo::ValidateJsonSchema,
12
- Cangaroo::CountJsonObject,
13
- Cangaroo::PerformJobs]
11
+ Cangaroo::PerformFlow]
14
12
  end
15
13
 
16
14
  it { is_expected.to eql interactors }
@@ -0,0 +1,17 @@
1
+ require 'rails_helper'
2
+
3
+ describe Cangaroo::PerformFlow do
4
+ subject { described_class.new }
5
+
6
+ context 'organizes interactors' do
7
+ subject { described_class.organized }
8
+
9
+ let(:interactors) do
10
+ [Cangaroo::ValidateJsonSchema,
11
+ Cangaroo::CountJsonObject,
12
+ Cangaroo::PerformJobs]
13
+ end
14
+
15
+ it { is_expected.to eql interactors }
16
+ end
17
+ end
@@ -5,7 +5,15 @@ describe Cangaroo::ValidateJsonSchema do
5
5
 
6
6
  describe '.call' do
7
7
  context 'when json is well formatted' do
8
- let(:json_body) { JSON.parse(load_fixture('json_payload_ok.json')) }
8
+ let(:json_body) { parse_fixture('json_payload_ok.json') }
9
+
10
+ it 'succeeds' do
11
+ expect(context).to be_a_success
12
+ end
13
+ end
14
+
15
+ context 'when json is well formatted and come from a connection' do
16
+ let(:json_body) { parse_fixture('json_payload_connection_response.json') }
9
17
 
10
18
  it 'succeeds' do
11
19
  expect(context).to be_a_success
@@ -14,9 +22,7 @@ describe Cangaroo::ValidateJsonSchema do
14
22
 
15
23
  context 'when json is not well formatted' do
16
24
  describe 'with wrong main key' do
17
- let(:json_body) do
18
- JSON.parse(load_fixture('json_payload_wrong_key.json'))
19
- end
25
+ let(:json_body) { parse_fixture('json_payload_wrong_key.json') }
20
26
 
21
27
  it 'fails' do
22
28
  expect(context).to be_a_failure
@@ -32,7 +38,7 @@ describe Cangaroo::ValidateJsonSchema do
32
38
  end
33
39
 
34
40
  describe 'without an object id' do
35
- let(:json_body) { JSON.parse(load_fixture('json_payload_no_id.json')) }
41
+ let(:json_body) { parse_fixture('json_payload_no_id.json') }
36
42
 
37
43
  it 'fails' do
38
44
  expect(context).to be_a_failure
@@ -9,39 +9,50 @@ module Cangaroo
9
9
  end
10
10
 
11
11
  let(:job_class) { FakeJob }
12
- let(:source_connection) { create(:cangaroo_connection) }
12
+ let(:destination_connection) { create(:cangaroo_connection) }
13
13
  let(:type) { 'orders' }
14
14
  let(:payload) { { id: 'O123' } }
15
+ let(:connection_response) { parse_fixture('json_payload_connection_response.json') }
15
16
 
16
17
  let(:options) do
17
- { connection: source_connection,
18
+ { connection: destination_connection,
18
19
  type: type,
19
20
  payload: payload }
20
21
  end
21
22
 
22
23
  let(:client) do
23
- Cangaroo::Webhook::Client.new(source_connection, '/webhook_path')
24
+ Cangaroo::Webhook::Client.new(destination_connection, '/webhook_path')
24
25
  end
25
26
 
26
27
  before do
27
- client.stub(:post)
28
+ client.stub(:post).and_return(connection_response)
28
29
  allow(Cangaroo::Webhook::Client).to receive(:new).and_return(client)
30
+ allow(Cangaroo::PerformFlow).to receive(:call)
29
31
  end
30
32
 
31
33
  describe '#perform' do
34
+ let(:job) { job_class.new(options) }
35
+
32
36
  it 'instantiates a Cangaroo::Webhook::Client' do
33
37
  expect(Cangaroo::Webhook::Client).to receive(:new)
34
- .with(source_connection, '/webhook_path')
38
+ .with(destination_connection, '/webhook_path')
35
39
  .and_return(client)
36
- FakeJob.perform_now(options)
40
+ job_class.perform_now(options)
37
41
  end
38
42
 
39
43
  it 'calls post on client' do
40
- job = job_class.new(options)
41
44
  job.perform
42
45
  expect(client).to have_received(:post)
43
46
  .with(job.transform, job.job_id, email: 'info@nebulab.it')
44
47
  end
48
+
49
+ it 'restart the flow' do
50
+ job.perform
51
+ expect(Cangaroo::PerformFlow).to have_received(:call)
52
+ .with(source_connection: destination_connection,
53
+ json_body: connection_response.to_json,
54
+ jobs: Rails.configuration.cangaroo.jobs)
55
+ end
45
56
  end
46
57
 
47
58
  describe '#perform?' do
@@ -1,7 +1,10 @@
1
1
  require 'simplecov'
2
+ require 'codeclimate-test-reporter'
3
+
2
4
  SimpleCov.start 'rails' do
3
5
  add_group 'Commands', 'app/commands'
4
6
  end
7
+ CodeClimate::TestReporter.start
5
8
 
6
9
  # This file is copied to spec/ when you run 'rails generate rspec:install'
7
10
  ENV['RAILS_ENV'] ||= 'test'
@@ -50,6 +53,11 @@ end
50
53
  RSpec.configure do |config|
51
54
  config.include FactoryGirl::Syntax::Methods
52
55
 
56
+ # whitelist codeclimate.com so test coverage can be reported
57
+ config.after(:suite) do
58
+ WebMock.disable_net_connect!(allow: 'codeclimate.com')
59
+ end
60
+
53
61
  config.before(:suite) do
54
62
  DatabaseCleaner.strategy = :transaction
55
63
  DatabaseCleaner.clean_with(:truncation)
@@ -60,25 +68,7 @@ RSpec.configure do |config|
60
68
  example.run
61
69
  end
62
70
  end
63
- # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
64
- # config.fixture_path = "#{::Rails.root}/spec/fixtures"
65
-
66
- # If you're not using ActiveRecord, or you'd prefer not to run each of your
67
- # examples within a transaction, remove the following line or assign false
68
- # instead of true.
69
- # config.use_transactional_fixtures = true
70
71
 
71
- # RSpec Rails can automatically mix in different behaviours to your tests
72
- # based on their file location, for example enabling you to call `get` and
73
- # `post` in specs under `spec/controllers`.
74
- #
75
- # You can disable this behaviour by removing the line below, and instead
76
- # explicitly tag your specs with their type, e.g.:
77
- #
78
- # RSpec.describe UsersController, :type => :controller do
79
- # # ...
80
- # end
81
- #
82
72
  # The different available types are documented in the features, such as in
83
73
  # https://relishapp.com/rspec/rspec-rails/docs
84
74
  config.infer_spec_type_from_file_location!
@@ -3,6 +3,10 @@ module Cangaroo
3
3
  def load_fixture(filename)
4
4
  File.read(File.expand_path("../../fixtures/#{filename}", __FILE__))
5
5
  end
6
+
7
+ def parse_fixture(filename)
8
+ JSON.parse(load_fixture(filename))
9
+ end
6
10
  end
7
11
  end
8
12
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cangaroo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alessio Rocco
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-12-09 00:00:00.000000000 Z
12
+ date: 2016-03-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -68,7 +68,7 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  version: 0.13.7
70
70
  - !ruby/object:Gem::Dependency
71
- name: pg
71
+ name: codeclimate-test-reporter
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - ">="
@@ -82,7 +82,7 @@ dependencies:
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  - !ruby/object:Gem::Dependency
85
- name: rspec-rails
85
+ name: database_cleaner
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - ">="
@@ -110,7 +110,7 @@ dependencies:
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
- name: database_cleaner
113
+ name: pg
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - ">="
@@ -124,7 +124,7 @@ dependencies:
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  - !ruby/object:Gem::Dependency
127
- name: shoulda-matchers
127
+ name: rspec-rails
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - ">="
@@ -138,7 +138,21 @@ dependencies:
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  - !ruby/object:Gem::Dependency
141
- name: webmock
141
+ name: rubocop
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: shoulda-matchers
142
156
  requirement: !ruby/object:Gem::Requirement
143
157
  requirements:
144
158
  - - ">="
@@ -166,7 +180,7 @@ dependencies:
166
180
  - !ruby/object:Gem::Version
167
181
  version: '0'
168
182
  - !ruby/object:Gem::Dependency
169
- name: rubocop
183
+ name: webmock
170
184
  requirement: !ruby/object:Gem::Requirement
171
185
  requirements:
172
186
  - - ">="
@@ -193,6 +207,7 @@ files:
193
207
  - app/interactors/cangaroo/authenticate_connection.rb
194
208
  - app/interactors/cangaroo/count_json_object.rb
195
209
  - app/interactors/cangaroo/handle_request.rb
210
+ - app/interactors/cangaroo/perform_flow.rb
196
211
  - app/interactors/cangaroo/perform_jobs.rb
197
212
  - app/interactors/cangaroo/validate_json_schema.rb
198
213
  - app/jobs/cangaroo/job.rb
@@ -248,12 +263,14 @@ files:
248
263
  - spec/dummy/public/500.html
249
264
  - spec/dummy/public/favicon.ico
250
265
  - spec/factories/cangaroo_connections.rb
266
+ - spec/fixtures/json_payload_connection_response.json
251
267
  - spec/fixtures/json_payload_no_id.json
252
268
  - spec/fixtures/json_payload_ok.json
253
269
  - spec/fixtures/json_payload_wrong_key.json
254
270
  - spec/interactors/cangaroo/authenticate_connection_spec.rb
255
271
  - spec/interactors/cangaroo/count_json_object_spec.rb
256
272
  - spec/interactors/cangaroo/handle_request_spec.rb
273
+ - spec/interactors/cangaroo/perform_flow_spec.rb
257
274
  - spec/interactors/cangaroo/perform_jobs_spec.rb
258
275
  - spec/interactors/cangaroo/validate_json_schema_spec.rb
259
276
  - spec/jobs/cangaroo/job_spec.rb
@@ -329,12 +346,14 @@ test_files:
329
346
  - spec/dummy/Rakefile
330
347
  - spec/dummy/README.rdoc
331
348
  - spec/factories/cangaroo_connections.rb
349
+ - spec/fixtures/json_payload_connection_response.json
332
350
  - spec/fixtures/json_payload_no_id.json
333
351
  - spec/fixtures/json_payload_ok.json
334
352
  - spec/fixtures/json_payload_wrong_key.json
335
353
  - spec/interactors/cangaroo/authenticate_connection_spec.rb
336
354
  - spec/interactors/cangaroo/count_json_object_spec.rb
337
355
  - spec/interactors/cangaroo/handle_request_spec.rb
356
+ - spec/interactors/cangaroo/perform_flow_spec.rb
338
357
  - spec/interactors/cangaroo/perform_jobs_spec.rb
339
358
  - spec/interactors/cangaroo/validate_json_schema_spec.rb
340
359
  - spec/jobs/cangaroo/job_spec.rb