asyncapi-server 1.1.3 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +1 -1
  3. data/app/assets/config/manifest.js +3 -0
  4. data/app/controllers/asyncapi/server/v1/jobs_controller.rb +3 -1
  5. data/app/controllers/concerns/active_model_serializers_fix.rb +10 -0
  6. data/app/serializers/asyncapi/server/job_serializer.rb +1 -1
  7. data/app/workers/asyncapi/server/job_status_notifier_worker.rb +53 -0
  8. data/app/workers/asyncapi/server/job_worker.rb +2 -16
  9. data/db/migrate/20141112034324_create_asyncapi_server_jobs.rb +1 -1
  10. data/db/migrate/20141212064931_add_secret_to_asyncapi_server_job.rb +1 -1
  11. data/db/migrate/20150130062520_add_expired_at_to_asyncapi_server_job.rb +1 -1
  12. data/db/migrate/20150201231018_drop_expired_at_from_asyncapi_server_jobs.rb +1 -1
  13. data/lib/asyncapi/server/rails_ext/controller.rb +1 -1
  14. data/lib/asyncapi/server/rspec.rb +20 -7
  15. data/lib/asyncapi/server/version.rb +1 -1
  16. data/spec/controllers/asyncapi/server/v1/jobs_controller_spec.rb +4 -4
  17. data/spec/dummy/app/assets/config/manifest.js +3 -0
  18. data/spec/dummy/app/controllers/tests_controller.rb +1 -0
  19. data/spec/dummy/db/development.sqlite3 +0 -0
  20. data/spec/dummy/db/schema.rb +10 -11
  21. data/spec/dummy/db/test.sqlite3 +0 -0
  22. data/spec/dummy/log/development.log +75 -39
  23. data/spec/dummy/log/test.log +709 -3771
  24. data/spec/models/job_spec.rb +1 -1
  25. data/spec/requests/enqueueing_jobs_spec.rb +6 -4
  26. data/spec/serializers/job_serializer_spec.rb +1 -0
  27. data/spec/spec_helper.rb +0 -1
  28. data/spec/workers/job_status_notifier_worker_spec.rb +119 -0
  29. data/spec/workers/job_worker_spec.rb +2 -29
  30. metadata +69 -63
@@ -20,7 +20,7 @@ module Asyncapi
20
20
  its(:status) { is_expected.to eq "queued" }
21
21
  its(:callback_url) { is_expected.to eq "http://callback_url.com" }
22
22
  its(:class_name) { is_expected.to eq "CreateStorageFacility" }
23
- its(:params) { is_expected.to eq({param: "values"}.to_json) }
23
+ its(:params) { is_expected.to eq("{\"param\":\"values\"}") }
24
24
 
25
25
  context "status" do
26
26
  it "can also be assigned other values" do
@@ -5,10 +5,12 @@ describe "Enqueueing jobs", type: :request do
5
5
  let(:job) { build_stubbed(:asyncapi_server_job, secret: "secret") }
6
6
 
7
7
  it "allows asynchronous handling of http requests and cleans up old jobs", cleaning_strategy: :truncation do
8
- post("/tests", job: {
9
- callback_url: "callback_url",
10
- params: {client: "params"}.to_json,
11
- secret: "secret",
8
+ post("/tests", params: {
9
+ job: {
10
+ callback_url: "callback_url",
11
+ params: {client: "params"}.to_json,
12
+ secret: "secret",
13
+ }
12
14
  })
13
15
 
14
16
  expect(response).to be_successful
@@ -8,6 +8,7 @@ module Asyncapi::Server
8
8
  subject(:serialized_hash) { serializer.attributes }
9
9
 
10
10
  its([:id]) { is_expected.to eq job.id }
11
+ its([:status]) { is_expected.to eq job.status }
11
12
 
12
13
  it "has a url" do
13
14
  allow(job).to receive(:url).and_return("url")
data/spec/spec_helper.rb CHANGED
@@ -22,7 +22,6 @@ Dir[
22
22
 
23
23
  RSpec.configure do |config|
24
24
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
25
- config.use_transactional_fixtures = false
26
25
  config.infer_base_class_for_anonymous_controllers = false
27
26
  config.order = "random"
28
27
 
@@ -0,0 +1,119 @@
1
+ require "spec_helper"
2
+
3
+ module Asyncapi
4
+ module Server
5
+ describe JobStatusNotifierWorker do
6
+
7
+ it "does not retry" do
8
+ expect(described_class.sidekiq_options_hash['retry']).to be false
9
+ end
10
+
11
+ describe "#perform" do
12
+ let(:message) { nil }
13
+ let(:code) { 200 }
14
+ let(:body) do
15
+ {
16
+ id: 12345,
17
+ server_job_url: "server_job_url",
18
+ status: "success",
19
+ }
20
+ end
21
+ let(:response) do
22
+ double(:response_double,
23
+ code: code,
24
+ body: body,
25
+ )
26
+ end
27
+ let(:job) do
28
+ create(:asyncapi_server_job, {
29
+ class_name: "Runner",
30
+ callback_url: "client_job_url",
31
+ status: :success,
32
+ secret: "secret",
33
+ })
34
+ end
35
+
36
+ it "notifies a job's callback_url with the job status" do
37
+ expect(Typhoeus).to receive(:put).with(
38
+ job.callback_url,
39
+ timeout: 60,
40
+ connecttimeout: 60,
41
+ body: {
42
+ job: {
43
+ status: job.status,
44
+ message: message,
45
+ secret: job.secret,
46
+ }
47
+ }.to_json,
48
+ headers: {
49
+ "Content-Type" => "application/json",
50
+ Accept: "application/json"
51
+ }
52
+ ).and_return(response)
53
+
54
+ described_class.new.perform(job.id, message)
55
+ end
56
+
57
+ context "when an error occurred while notifying callback_url" do
58
+ let(:code) { 404 }
59
+ let(:body) do
60
+ {
61
+ error: "404",
62
+ status: "Not Found",
63
+ }
64
+ end
65
+ let(:jid) { "abcde12345" }
66
+
67
+ before do
68
+ expect(Typhoeus).to receive(:put).with(
69
+ job.callback_url,
70
+ timeout: 60,
71
+ connecttimeout: 60,
72
+ body: {
73
+ job: {
74
+ status: job.status,
75
+ message: message,
76
+ secret: job.secret,
77
+ }
78
+ }.to_json,
79
+ headers: {
80
+ "Content-Type" => "application/json",
81
+ Accept: "application/json"
82
+ }
83
+ ).and_return(response)
84
+ end
85
+
86
+ context "when initial attempt fails" do
87
+ let(:retries) { 1 }
88
+
89
+ it "raises attempt failure and retries" do
90
+ expect(JobStatusNotifierWorker).to(
91
+ receive(:perform_async).with(job.id, message, retries+1).and_return(jid)
92
+ )
93
+
94
+ expect { described_class.new.perform(job.id, message, retries) }.not_to raise_error
95
+ end
96
+ end
97
+
98
+ context "when final attempt still fails" do
99
+ let(:expected_error_message) do
100
+ [
101
+ "Something went wrong while poking #{job.callback_url}",
102
+ "JobID: #{job.id}",
103
+ "Next Attempt: ",
104
+ "HTTP Status: #{response.code}",
105
+ "HTTP Response: #{response.inspect}",
106
+ ].join("\n")
107
+ end
108
+
109
+ it "raises error if no progress is made after MAX_RETRIES attempts" do
110
+ expect { described_class.new.perform(job.id, message, 3) }.to(
111
+ raise_error expected_error_message
112
+ )
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -19,20 +19,7 @@ module Asyncapi
19
19
 
20
20
  expect(Runner).to receive(:call).
21
21
  with(job.params) { "message" }
22
- expect(Typhoeus).to receive(:put).with(
23
- "client_job_url",
24
- body: {
25
- job: {
26
- status: :success,
27
- message: "message",
28
- secret: "sekret",
29
- }
30
- }.to_json,
31
- headers: {
32
- "Content-Type" => "application/json",
33
- Accept: "application/json"
34
- }
35
- )
22
+ expect(JobStatusNotifierWorker).to receive(:perform_async).with(job.id, "message")
36
23
 
37
24
  described_class.new.perform(job.id)
38
25
  job.reload
@@ -52,21 +39,7 @@ module Asyncapi
52
39
 
53
40
  allow(Runner).to receive(:call).
54
41
  and_raise(error)
55
-
56
- expect(Typhoeus).to receive(:put).with(
57
- "client_job_url",
58
- body: {
59
- job: {
60
- status: :error,
61
- message: ["my error", "back", "trace"].join("\n"),
62
- secret: "sekret",
63
- }
64
- }.to_json,
65
- headers: {
66
- "Content-Type" => "application/json",
67
- Accept: "application/json"
68
- }
69
- )
42
+ expect(JobStatusNotifierWorker).to receive(:perform_async).with(job.id, ["my error", "back", "trace"].join("\n"))
70
43
 
71
44
  expect { described_class.new.perform(job.id) }.
72
45
  to raise_error(error)
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asyncapi-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - G5
8
8
  - Marc Ignacio
9
9
  - Ramon Tayag
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-08-30 00:00:00.000000000 Z
13
+ date: 2022-03-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: kaminari
@@ -44,30 +44,30 @@ dependencies:
44
44
  name: rails
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: '4.0'
49
+ version: '4'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - "~>"
54
+ - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: '4.0'
56
+ version: '4'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: active_model_serializers
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - "~>"
62
62
  - !ruby/object:Gem::Version
63
- version: 0.9.0
63
+ version: 0.9.7
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - "~>"
69
69
  - !ruby/object:Gem::Version
70
- version: 0.9.0
70
+ version: 0.9.7
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: typhoeus
73
73
  requirement: !ruby/object:Gem::Requirement
@@ -128,44 +128,44 @@ dependencies:
128
128
  name: sqlite3
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - "~>"
131
+ - - ">="
132
132
  - !ruby/object:Gem::Version
133
- version: 1.3.10
133
+ version: '1.4'
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  requirements:
138
- - - "~>"
138
+ - - ">="
139
139
  - !ruby/object:Gem::Version
140
- version: 1.3.10
140
+ version: '1.4'
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: rspec-rails
143
143
  requirement: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - "~>"
145
+ - - ">="
146
146
  - !ruby/object:Gem::Version
147
- version: 3.1.0
147
+ version: '0'
148
148
  type: :development
149
149
  prerelease: false
150
150
  version_requirements: !ruby/object:Gem::Requirement
151
151
  requirements:
152
- - - "~>"
152
+ - - ">="
153
153
  - !ruby/object:Gem::Version
154
- version: 3.1.0
154
+ version: '0'
155
155
  - !ruby/object:Gem::Dependency
156
156
  name: rspec-its
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - "~>"
159
+ - - ">="
160
160
  - !ruby/object:Gem::Version
161
- version: 1.1.0
161
+ version: '0'
162
162
  type: :development
163
163
  prerelease: false
164
164
  version_requirements: !ruby/object:Gem::Requirement
165
165
  requirements:
166
- - - "~>"
166
+ - - ">="
167
167
  - !ruby/object:Gem::Version
168
- version: 1.1.0
168
+ version: '0'
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: rspec-sidekiq
171
171
  requirement: !ruby/object:Gem::Requirement
@@ -184,16 +184,16 @@ dependencies:
184
184
  name: pry
185
185
  requirement: !ruby/object:Gem::Requirement
186
186
  requirements:
187
- - - "~>"
187
+ - - ">="
188
188
  - !ruby/object:Gem::Version
189
- version: 0.10.1
189
+ version: '0'
190
190
  type: :development
191
191
  prerelease: false
192
192
  version_requirements: !ruby/object:Gem::Requirement
193
193
  requirements:
194
- - - "~>"
194
+ - - ">="
195
195
  - !ruby/object:Gem::Version
196
- version: 0.10.1
196
+ version: '0'
197
197
  - !ruby/object:Gem::Dependency
198
198
  name: factory_girl_rails
199
199
  requirement: !ruby/object:Gem::Requirement
@@ -212,16 +212,16 @@ dependencies:
212
212
  name: database_cleaner
213
213
  requirement: !ruby/object:Gem::Requirement
214
214
  requirements:
215
- - - "~>"
215
+ - - ">="
216
216
  - !ruby/object:Gem::Version
217
- version: 1.3.0
217
+ version: '0'
218
218
  type: :development
219
219
  prerelease: false
220
220
  version_requirements: !ruby/object:Gem::Requirement
221
221
  requirements:
222
- - - "~>"
222
+ - - ">="
223
223
  - !ruby/object:Gem::Version
224
- version: 1.3.0
224
+ version: '0'
225
225
  - !ruby/object:Gem::Dependency
226
226
  name: timecop
227
227
  requirement: !ruby/object:Gem::Requirement
@@ -248,9 +248,12 @@ files:
248
248
  - MIT-LICENSE
249
249
  - README.md
250
250
  - Rakefile
251
+ - app/assets/config/manifest.js
251
252
  - app/controllers/asyncapi/server/v1/jobs_controller.rb
253
+ - app/controllers/concerns/active_model_serializers_fix.rb
252
254
  - app/models/asyncapi/server/job.rb
253
255
  - app/serializers/asyncapi/server/job_serializer.rb
256
+ - app/workers/asyncapi/server/job_status_notifier_worker.rb
254
257
  - app/workers/asyncapi/server/job_worker.rb
255
258
  - config/database.yml
256
259
  - config/routes.rb
@@ -270,6 +273,7 @@ files:
270
273
  - spec/controllers/asyncapi/server/v1/jobs_controller_spec.rb
271
274
  - spec/dummy/README.rdoc
272
275
  - spec/dummy/Rakefile
276
+ - spec/dummy/app/assets/config/manifest.js
273
277
  - spec/dummy/app/assets/javascripts/application.js
274
278
  - spec/dummy/app/assets/stylesheets/application.css
275
279
  - spec/dummy/app/controllers/application_controller.rb
@@ -317,12 +321,13 @@ files:
317
321
  - spec/spec_helper.rb
318
322
  - spec/support/factory_girl.rb
319
323
  - spec/support/indifferent_hash.rb
324
+ - spec/workers/job_status_notifier_worker_spec.rb
320
325
  - spec/workers/job_worker_spec.rb
321
326
  homepage: https://github.com/G5/asyncapi-server
322
327
  licenses:
323
328
  - MIT
324
329
  metadata: {}
325
- post_install_message:
330
+ post_install_message:
326
331
  rdoc_options: []
327
332
  require_paths:
328
333
  - lib
@@ -337,60 +342,61 @@ required_rubygems_version: !ruby/object:Gem::Requirement
337
342
  - !ruby/object:Gem::Version
338
343
  version: '0'
339
344
  requirements: []
340
- rubyforge_project:
341
- rubygems_version: 2.5.1
342
- signing_key:
345
+ rubygems_version: 3.2.31
346
+ signing_key:
343
347
  specification_version: 4
344
348
  summary: Asynchronous API communication - Server
345
349
  test_files:
346
- - spec/controllers/asyncapi/server/v1/jobs_controller_spec.rb
347
- - spec/dummy/app/assets/javascripts/application.js
348
- - spec/dummy/app/assets/stylesheets/application.css
350
+ - spec/spec_helper.rb
349
351
  - spec/dummy/app/controllers/application_controller.rb
350
352
  - spec/dummy/app/controllers/tests_controller.rb
351
- - spec/dummy/app/helpers/application_helper.rb
352
353
  - spec/dummy/app/views/layouts/application.html.erb
354
+ - spec/dummy/app/assets/config/manifest.js
355
+ - spec/dummy/app/assets/javascripts/application.js
356
+ - spec/dummy/app/assets/stylesheets/application.css
357
+ - spec/dummy/app/helpers/application_helper.rb
358
+ - spec/dummy/bin/rake
353
359
  - spec/dummy/bin/bundle
354
360
  - spec/dummy/bin/rails
355
- - spec/dummy/bin/rake
356
- - spec/dummy/config/application.rb
357
- - spec/dummy/config/boot.rb
358
- - spec/dummy/config/database.yml
359
- - spec/dummy/config/environment.rb
360
- - spec/dummy/config/environments/development.rb
361
+ - spec/dummy/config/secrets.yml
362
+ - spec/dummy/config/routes.rb
363
+ - spec/dummy/config/locales/en.yml
361
364
  - spec/dummy/config/environments/production.rb
365
+ - spec/dummy/config/environments/development.rb
362
366
  - spec/dummy/config/environments/test.rb
363
- - spec/dummy/config/initializers/assets.rb
367
+ - spec/dummy/config/environment.rb
368
+ - spec/dummy/config/application.rb
369
+ - spec/dummy/config/database.yml
370
+ - spec/dummy/config/boot.rb
364
371
  - spec/dummy/config/initializers/backtrace_silencers.rb
365
- - spec/dummy/config/initializers/cookies_serializer.rb
366
- - spec/dummy/config/initializers/default_url_options.rb
367
- - spec/dummy/config/initializers/filter_parameter_logging.rb
368
- - spec/dummy/config/initializers/inflections.rb
369
372
  - spec/dummy/config/initializers/mime_types.rb
373
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
370
374
  - spec/dummy/config/initializers/session_store.rb
371
375
  - spec/dummy/config/initializers/wrap_parameters.rb
372
- - spec/dummy/config/locales/en.yml
373
- - spec/dummy/config/routes.rb
374
- - spec/dummy/config/secrets.yml
376
+ - spec/dummy/config/initializers/assets.rb
377
+ - spec/dummy/config/initializers/default_url_options.rb
378
+ - spec/dummy/config/initializers/cookies_serializer.rb
379
+ - spec/dummy/config/initializers/inflections.rb
375
380
  - spec/dummy/config.ru
376
- - spec/dummy/db/development.sqlite3
381
+ - spec/dummy/Rakefile
382
+ - spec/dummy/public/favicon.ico
383
+ - spec/dummy/public/422.html
384
+ - spec/dummy/public/500.html
385
+ - spec/dummy/public/404.html
377
386
  - spec/dummy/db/schema.rb
378
387
  - spec/dummy/db/test.sqlite3
379
- - spec/dummy/log/development.log
388
+ - spec/dummy/db/development.sqlite3
380
389
  - spec/dummy/log/test.log
381
- - spec/dummy/public/404.html
382
- - spec/dummy/public/422.html
383
- - spec/dummy/public/500.html
384
- - spec/dummy/public/favicon.ico
385
- - spec/dummy/Rakefile
390
+ - spec/dummy/log/development.log
386
391
  - spec/dummy/README.rdoc
387
- - spec/factories/job.rb
388
- - spec/fixtures/runner.rb
392
+ - spec/server_spec.rb
389
393
  - spec/models/job_spec.rb
390
394
  - spec/requests/enqueueing_jobs_spec.rb
391
395
  - spec/serializers/job_serializer_spec.rb
392
- - spec/server_spec.rb
393
- - spec/spec_helper.rb
394
- - spec/support/factory_girl.rb
395
396
  - spec/support/indifferent_hash.rb
397
+ - spec/support/factory_girl.rb
398
+ - spec/factories/job.rb
399
+ - spec/fixtures/runner.rb
396
400
  - spec/workers/job_worker_spec.rb
401
+ - spec/workers/job_status_notifier_worker_spec.rb
402
+ - spec/controllers/asyncapi/server/v1/jobs_controller_spec.rb