asyncapi-server 1.1.3 → 1.3.2

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.
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