canvas_sync 0.17.34 → 0.17.36

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,107 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe CanvasSync::JobBatches::ActiveJob do
4
+ describe CanvasSync::JobBatches::ActiveJob::BatchAwareJob do
5
+ include ActiveJob::TestHelper
6
+
7
+ after do
8
+ clear_enqueued_jobs
9
+ clear_performed_jobs
10
+ end
11
+
12
+ context "When Performing" do
13
+ context 'when without batch' do
14
+ it 'just yields' do
15
+ expect(CanvasSync::JobBatches::Batch).not_to receive(:process_successful_job)
16
+ expect(CanvasSync::JobBatches::Batch).not_to receive(:process_failed_job)
17
+ expect_any_instance_of(BatchTestJobBase).to receive(:perform)
18
+
19
+ BatchTestJobBase.perform_now
20
+ end
21
+ end
22
+
23
+ context 'when in batch' do
24
+ let(:bid) { 'SAMPLEBID' }
25
+
26
+ context 'when successful' do
27
+ it 'yields' do
28
+ expect_any_instance_of(BatchTestJobBase).to receive(:perform)
29
+ BatchTestJobBase.perform_now
30
+ end
31
+
32
+ it 'calls process_successful_job' do
33
+ job = BatchTestJobBase.new
34
+ job.instance_variable_set(:@bid, bid)
35
+ expect(CanvasSync::JobBatches::Batch).to receive(:process_successful_job).with(bid, job.job_id)
36
+ job.perform_now
37
+ end
38
+ end
39
+
40
+ context 'when failed' do
41
+ it 'calls process_failed_job and reraises exception' do
42
+ reraised = false
43
+ job = FailingBatchTestJobBase.new
44
+ job.instance_variable_set(:@bid, bid)
45
+ expect(CanvasSync::JobBatches::Batch).to receive(:process_failed_job)
46
+ begin
47
+ job.perform_now
48
+ rescue
49
+ reraised = true
50
+ end
51
+ expect(reraised).to be_truthy
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ context "When Enqueueing" do
58
+ context 'when without batch' do
59
+ it 'just yields' do
60
+ expect(CanvasSync::JobBatches::Batch).not_to receive(:increment_job_queue)
61
+ BatchTestJobBase.perform_later
62
+ expect(BatchTestJobBase).to have_been_enqueued
63
+ end
64
+ end
65
+
66
+ context 'when in batch' do
67
+ let(:bid) { 'SAMPLEBID' }
68
+
69
+ before do
70
+ Thread.current[CanvasSync::JobBatches::CURRENT_BATCH_THREAD_KEY] = CanvasSync::JobBatches::Batch.new(bid)
71
+ Thread.current[CanvasSync::JobBatches::CURRENT_BATCH_THREAD_KEY].instance_variable_set(:@open, true)
72
+ end
73
+ after { Thread.current[CanvasSync::JobBatches::CURRENT_BATCH_THREAD_KEY] = nil }
74
+
75
+ it 'yields' do
76
+ expect {
77
+ BatchTestJobBase.perform_later
78
+ }.to enqueue_job(BatchTestJobBase)
79
+ end
80
+
81
+ it 'assigns bid to job metadata' do
82
+ job = BatchTestJobBase.perform_later
83
+ expect(job.bid).to eq bid
84
+ expect(job.serialize['batch_id']).to eq bid
85
+ end
86
+ end
87
+ end
88
+
89
+ context 'worker' do
90
+ it 'defines method bid' do
91
+ expect(ActiveJob::Base.instance_methods).to include(:bid)
92
+ end
93
+
94
+ it 'defines method batch' do
95
+ expect(ActiveJob::Base.instance_methods).to include(:batch)
96
+ end
97
+
98
+ it 'defines method valid_within_batch?' do
99
+ expect(ActiveJob::Base.instance_methods).to include(:valid_within_batch?)
100
+ end
101
+ end
102
+ end
103
+
104
+ describe ".handle_job_death" do
105
+
106
+ end
107
+ end
@@ -338,7 +338,7 @@ RSpec.describe CanvasSync::JobBatches::Batch do
338
338
 
339
339
  context 'With ActiveJob Adapter' do
340
340
  around(:all) do |block|
341
- CanvasSync::JobBatches::Batch::Callback.worker_class = CanvasSync::JobBatches::Batch::Callback::ActiveJobCallbackWorker
341
+ CanvasSync::JobBatches::Batch::Callback.worker_class = CanvasSync::JobBatches::ActiveJob::ActiveJobCallbackWorker
342
342
  block.run
343
343
  end
344
344
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canvas_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.34
4
+ version: 0.17.36
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nate Collings
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-12 00:00:00.000000000 Z
11
+ date: 2022-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -346,7 +346,7 @@ dependencies:
346
346
  - - ">="
347
347
  - !ruby/object:Gem::Version
348
348
  version: '0'
349
- description:
349
+ description:
350
350
  email:
351
351
  - ncollings@instructure.com
352
352
  executables: []
@@ -434,8 +434,8 @@ files:
434
434
  - lib/canvas_sync/importers/bulk_importer.rb
435
435
  - lib/canvas_sync/importers/legacy_importer.rb
436
436
  - lib/canvas_sync/job.rb
437
+ - lib/canvas_sync/job_batches/active_job.rb
437
438
  - lib/canvas_sync/job_batches/batch.rb
438
- - lib/canvas_sync/job_batches/batch_aware_job.rb
439
439
  - lib/canvas_sync/job_batches/callback.rb
440
440
  - lib/canvas_sync/job_batches/chain_builder.rb
441
441
  - lib/canvas_sync/job_batches/context_hash.rb
@@ -642,7 +642,7 @@ files:
642
642
  - spec/factories/submission_factory.rb
643
643
  - spec/factories/term_factory.rb
644
644
  - spec/factories/user_factory.rb
645
- - spec/job_batching/batch_aware_job_spec.rb
645
+ - spec/job_batching/active_job_spec.rb
646
646
  - spec/job_batching/batch_spec.rb
647
647
  - spec/job_batching/callback_spec.rb
648
648
  - spec/job_batching/context_hash_spec.rb
@@ -687,7 +687,7 @@ files:
687
687
  homepage: https://instructure.com
688
688
  licenses: []
689
689
  metadata: {}
690
- post_install_message:
690
+ post_install_message:
691
691
  rdoc_options: []
692
692
  require_paths:
693
693
  - lib
@@ -702,8 +702,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
702
702
  - !ruby/object:Gem::Version
703
703
  version: '0'
704
704
  requirements: []
705
- rubygems_version: 3.0.3
706
- signing_key:
705
+ rubygems_version: 3.1.6
706
+ signing_key:
707
707
  specification_version: 4
708
708
  summary: Gem for generating Canvas models and migrations and syncing data from Canvas
709
709
  test_files:
@@ -853,7 +853,7 @@ test_files:
853
853
  - spec/factories/submission_factory.rb
854
854
  - spec/factories/term_factory.rb
855
855
  - spec/factories/user_factory.rb
856
- - spec/job_batching/batch_aware_job_spec.rb
856
+ - spec/job_batching/active_job_spec.rb
857
857
  - spec/job_batching/batch_spec.rb
858
858
  - spec/job_batching/callback_spec.rb
859
859
  - spec/job_batching/context_hash_spec.rb
@@ -1,63 +0,0 @@
1
- module CanvasSync
2
- module JobBatches
3
- module BatchAwareJob
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- around_perform do |job, block|
8
- if (@bid) # This _must_ be @bid - not just bid
9
- prev_batch = Thread.current[CURRENT_BATCH_THREAD_KEY]
10
- begin
11
- Thread.current[CURRENT_BATCH_THREAD_KEY] = Batch.new(@bid)
12
- block.call
13
- Thread.current[CURRENT_BATCH_THREAD_KEY].save_context_changes
14
- Batch.process_successful_job(@bid, job_id)
15
- rescue
16
- Batch.process_failed_job(@bid, job_id)
17
- raise
18
- ensure
19
- Thread.current[CURRENT_BATCH_THREAD_KEY] = prev_batch
20
- end
21
- else
22
- block.call
23
- end
24
- end
25
-
26
- around_enqueue do |job, block|
27
- if (batch = Thread.current[CURRENT_BATCH_THREAD_KEY])
28
- @bid = batch.bid
29
- batch.increment_job_queue(job_id) if @bid
30
- end
31
- block.call
32
- end
33
- end
34
-
35
- def bid
36
- @bid || Thread.current[CURRENT_BATCH_THREAD_KEY]&.bid
37
- end
38
-
39
- def batch
40
- Thread.current[CURRENT_BATCH_THREAD_KEY]
41
- end
42
-
43
- def batch_context
44
- batch&.context || {}
45
- end
46
-
47
- def valid_within_batch?
48
- batch.valid?
49
- end
50
-
51
- def serialize
52
- super.tap do |data|
53
- data['batch_id'] = @bid # This _must_ be @bid - not just bid
54
- end
55
- end
56
-
57
- def deserialize(data)
58
- super
59
- @bid = data['batch_id']
60
- end
61
- end
62
- end
63
- end
@@ -1,101 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe CanvasSync::JobBatches::BatchAwareJob do
4
- include ActiveJob::TestHelper
5
-
6
- after do
7
- clear_enqueued_jobs
8
- clear_performed_jobs
9
- end
10
-
11
- context "When Performing" do
12
- context 'when without batch' do
13
- it 'just yields' do
14
- expect(CanvasSync::JobBatches::Batch).not_to receive(:process_successful_job)
15
- expect(CanvasSync::JobBatches::Batch).not_to receive(:process_failed_job)
16
- expect_any_instance_of(BatchTestJobBase).to receive(:perform)
17
-
18
- BatchTestJobBase.perform_now
19
- end
20
- end
21
-
22
- context 'when in batch' do
23
- let(:bid) { 'SAMPLEBID' }
24
-
25
- context 'when successful' do
26
- it 'yields' do
27
- expect_any_instance_of(BatchTestJobBase).to receive(:perform)
28
- BatchTestJobBase.perform_now
29
- end
30
-
31
- it 'calls process_successful_job' do
32
- job = BatchTestJobBase.new
33
- job.instance_variable_set(:@bid, bid)
34
- expect(CanvasSync::JobBatches::Batch).to receive(:process_successful_job).with(bid, job.job_id)
35
- job.perform_now
36
- end
37
- end
38
-
39
- context 'when failed' do
40
- it 'calls process_failed_job and reraises exception' do
41
- reraised = false
42
- job = FailingBatchTestJobBase.new
43
- job.instance_variable_set(:@bid, bid)
44
- expect(CanvasSync::JobBatches::Batch).to receive(:process_failed_job)
45
- begin
46
- job.perform_now
47
- rescue
48
- reraised = true
49
- end
50
- expect(reraised).to be_truthy
51
- end
52
- end
53
- end
54
- end
55
-
56
- context "When Enqueueing" do
57
- context 'when without batch' do
58
- it 'just yields' do
59
- expect(CanvasSync::JobBatches::Batch).not_to receive(:increment_job_queue)
60
- BatchTestJobBase.perform_later
61
- expect(BatchTestJobBase).to have_been_enqueued
62
- end
63
- end
64
-
65
- context 'when in batch' do
66
- let(:bid) { 'SAMPLEBID' }
67
-
68
- before do
69
- Thread.current[CanvasSync::JobBatches::CURRENT_BATCH_THREAD_KEY] = CanvasSync::JobBatches::Batch.new(bid)
70
- Thread.current[CanvasSync::JobBatches::CURRENT_BATCH_THREAD_KEY].instance_variable_set(:@open, true)
71
- end
72
- after { Thread.current[CanvasSync::JobBatches::CURRENT_BATCH_THREAD_KEY] = nil }
73
-
74
- it 'yields' do
75
- expect {
76
- BatchTestJobBase.perform_later
77
- }.to enqueue_job(BatchTestJobBase)
78
- end
79
-
80
- it 'assigns bid to job metadata' do
81
- job = BatchTestJobBase.perform_later
82
- expect(job.bid).to eq bid
83
- expect(job.serialize['batch_id']).to eq bid
84
- end
85
- end
86
- end
87
-
88
- context 'worker' do
89
- it 'defines method bid' do
90
- expect(ActiveJob::Base.instance_methods).to include(:bid)
91
- end
92
-
93
- it 'defines method batch' do
94
- expect(ActiveJob::Base.instance_methods).to include(:batch)
95
- end
96
-
97
- it 'defines method valid_within_batch?' do
98
- expect(ActiveJob::Base.instance_methods).to include(:valid_within_batch?)
99
- end
100
- end
101
- end