canvas_sync 0.23.4 → 0.24.0.beta1

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 (206) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -4
  3. data/lib/canvas_sync/processors/provisioning_report_processor.rb +1 -0
  4. data/lib/canvas_sync/version.rb +1 -1
  5. data/lib/canvas_sync.rb +6 -4
  6. data/spec/canvas_sync/canvas_sync_spec.rb +11 -11
  7. data/spec/canvas_sync/live_events/process_event_job_spec.rb +1 -0
  8. data/spec/{dummy → internal}/app/models/application_record.rb +1 -0
  9. data/spec/{dummy → internal}/app/models/content_migration.rb +0 -0
  10. data/spec/{dummy → internal}/app/models/course.rb +0 -1
  11. data/spec/{dummy → internal}/app/models/course_nickname.rb +0 -0
  12. data/spec/{dummy → internal}/app/models/learning_outcome.rb +0 -0
  13. data/spec/{dummy → internal}/app/services/live_events/assignment_event.rb +0 -0
  14. data/spec/{dummy → internal}/app/services/live_events/course_event.rb +0 -0
  15. data/spec/{dummy → internal}/app/services/live_events/course_section_event.rb +0 -0
  16. data/spec/{dummy → internal}/app/services/live_events/enrollment_event.rb +0 -0
  17. data/spec/{dummy → internal}/app/services/live_events/grade_event.rb +0 -0
  18. data/spec/{dummy → internal}/app/services/live_events/module_event.rb +0 -0
  19. data/spec/{dummy → internal}/app/services/live_events/module_item_event.rb +0 -0
  20. data/spec/{dummy → internal}/app/services/live_events/submission_event.rb +0 -0
  21. data/spec/{dummy → internal}/app/services/live_events/syllabus_event.rb +0 -0
  22. data/spec/{dummy → internal}/app/services/live_events/user_event.rb +0 -0
  23. data/spec/internal/bin/rails +9 -0
  24. data/spec/internal/config/database.yml +5 -0
  25. data/spec/internal/config/routes.rb +5 -0
  26. data/spec/internal/config/storage.yml +3 -0
  27. data/spec/{dummy/db/migrate/20220926221926_create_users.rb → internal/db/migrate/20250912205136_create_users.rb} +0 -0
  28. data/spec/{dummy/db/migrate/20201016181346_create_pseudonyms.rb → internal/db/migrate/20250912205137_create_pseudonyms.rb} +0 -0
  29. data/spec/{dummy/db/migrate/20200415171620_create_groups.rb → internal/db/migrate/20250912205139_create_groups.rb} +0 -0
  30. data/spec/{dummy/db/migrate/20200416214248_create_group_memberships.rb → internal/db/migrate/20250912205140_create_group_memberships.rb} +0 -0
  31. data/spec/{dummy/db/migrate/20190702203622_create_accounts.rb → internal/db/migrate/20250912205141_create_accounts.rb} +0 -0
  32. data/spec/{dummy/db/migrate/20190702203623_create_terms.rb → internal/db/migrate/20250912205142_create_terms.rb} +0 -0
  33. data/spec/{dummy/db/migrate/20190702203625_create_sections.rb → internal/db/migrate/20250912205144_create_sections.rb} +0 -0
  34. data/spec/{dummy/db/migrate/20190702203626_create_assignments.rb → internal/db/migrate/20250912205145_create_assignments.rb} +0 -0
  35. data/spec/{dummy/db/migrate/20190702203627_create_submissions.rb → internal/db/migrate/20250912205146_create_submissions.rb} +0 -0
  36. data/spec/{dummy/db/migrate/20190927204545_create_roles.rb → internal/db/migrate/20250912205147_create_roles.rb} +2 -2
  37. data/spec/{dummy/db/migrate/20190927204546_create_admins.rb → internal/db/migrate/20250912205148_create_admins.rb} +0 -0
  38. data/spec/{dummy/db/migrate/20190702203630_create_assignment_groups.rb → internal/db/migrate/20250912205149_create_assignment_groups.rb} +0 -0
  39. data/spec/{dummy/db/migrate/20190702203631_create_context_modules.rb → internal/db/migrate/20250912205150_create_context_modules.rb} +0 -0
  40. data/spec/{dummy/db/migrate/20190702203632_create_context_module_items.rb → internal/db/migrate/20250912205151_create_context_module_items.rb} +0 -0
  41. data/spec/{dummy/db/migrate/20210907233329_create_user_observers.rb → internal/db/migrate/20250912205152_create_user_observers.rb} +0 -0
  42. data/spec/{dummy/db/migrate/20210907233330_create_grading_periods.rb → internal/db/migrate/20250912205153_create_grading_periods.rb} +0 -0
  43. data/spec/{dummy/db/migrate/20211001184920_create_grading_period_groups.rb → internal/db/migrate/20250912205154_create_grading_period_groups.rb} +0 -0
  44. data/spec/{dummy/db/migrate/20220308072643_create_content_migrations.rb → internal/db/migrate/20250912205155_create_content_migrations.rb} +0 -0
  45. data/spec/{dummy/db/migrate/20220712210559_create_learning_outcomes.rb → internal/db/migrate/20250912205156_create_learning_outcomes.rb} +0 -0
  46. data/spec/{dummy/db/migrate/20240523101010_create_learning_outcome_results.rb → internal/db/migrate/20250912205157_create_learning_outcome_results.rb} +0 -0
  47. data/spec/{dummy/db/migrate/20240510094100_create_rubric_associations.rb → internal/db/migrate/20250912205160_create_rubric_associations.rb} +0 -0
  48. data/spec/{dummy/db/migrate/20240510101100_create_rubric_assessments.rb → internal/db/migrate/20250912205161_create_rubric_assessments.rb} +0 -0
  49. data/spec/{dummy/db/migrate/20240828161300_create_course_progresses.rb → internal/db/migrate/20250912205162_create_course_progresses.rb} +0 -0
  50. data/spec/internal/db/schema.rb +6 -0
  51. data/spec/spec_helper.rb +8 -4
  52. metadata +182 -372
  53. data/lib/canvas_sync/job_batches/batch.rb +0 -595
  54. data/lib/canvas_sync/job_batches/callback.rb +0 -135
  55. data/lib/canvas_sync/job_batches/chain_builder.rb +0 -247
  56. data/lib/canvas_sync/job_batches/compat/active_job.rb +0 -108
  57. data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/css/styles.less +0 -182
  58. data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/batch_tree.js +0 -108
  59. data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/util.js +0 -2
  60. data/lib/canvas_sync/job_batches/compat/sidekiq/web/helpers.rb +0 -41
  61. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batch_tree.erb +0 -6
  62. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batches_table.erb +0 -44
  63. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_common.erb +0 -13
  64. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_jobs_table.erb +0 -21
  65. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_pagination.erb +0 -26
  66. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batch.erb +0 -81
  67. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batches.erb +0 -23
  68. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pool.erb +0 -137
  69. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pools.erb +0 -47
  70. data/lib/canvas_sync/job_batches/compat/sidekiq/web.rb +0 -218
  71. data/lib/canvas_sync/job_batches/compat/sidekiq.rb +0 -149
  72. data/lib/canvas_sync/job_batches/compat.rb +0 -20
  73. data/lib/canvas_sync/job_batches/context_hash.rb +0 -157
  74. data/lib/canvas_sync/job_batches/hier_batch_ids.lua +0 -25
  75. data/lib/canvas_sync/job_batches/jobs/base_job.rb +0 -5
  76. data/lib/canvas_sync/job_batches/jobs/concurrent_batch_job.rb +0 -20
  77. data/lib/canvas_sync/job_batches/jobs/managed_batch_job.rb +0 -175
  78. data/lib/canvas_sync/job_batches/jobs/serial_batch_job.rb +0 -20
  79. data/lib/canvas_sync/job_batches/pool.rb +0 -254
  80. data/lib/canvas_sync/job_batches/pool_refill.lua +0 -47
  81. data/lib/canvas_sync/job_batches/redis_model.rb +0 -67
  82. data/lib/canvas_sync/job_batches/redis_script.rb +0 -161
  83. data/lib/canvas_sync/job_batches/schedule_callback.lua +0 -14
  84. data/lib/canvas_sync/job_batches/status.rb +0 -89
  85. data/lib/canvas_sync/job_uniqueness/compat/active_job.rb +0 -75
  86. data/lib/canvas_sync/job_uniqueness/compat/sidekiq.rb +0 -135
  87. data/lib/canvas_sync/job_uniqueness/compat.rb +0 -20
  88. data/lib/canvas_sync/job_uniqueness/configuration.rb +0 -25
  89. data/lib/canvas_sync/job_uniqueness/job_uniqueness.rb +0 -47
  90. data/lib/canvas_sync/job_uniqueness/lock_context.rb +0 -199
  91. data/lib/canvas_sync/job_uniqueness/locksmith.rb +0 -92
  92. data/lib/canvas_sync/job_uniqueness/on_conflict/base.rb +0 -32
  93. data/lib/canvas_sync/job_uniqueness/on_conflict/log.rb +0 -13
  94. data/lib/canvas_sync/job_uniqueness/on_conflict/null_strategy.rb +0 -9
  95. data/lib/canvas_sync/job_uniqueness/on_conflict/raise.rb +0 -11
  96. data/lib/canvas_sync/job_uniqueness/on_conflict/reject.rb +0 -21
  97. data/lib/canvas_sync/job_uniqueness/on_conflict/reschedule.rb +0 -20
  98. data/lib/canvas_sync/job_uniqueness/on_conflict.rb +0 -62
  99. data/lib/canvas_sync/job_uniqueness/strategy/base.rb +0 -107
  100. data/lib/canvas_sync/job_uniqueness/strategy/until_and_while_executing.rb +0 -35
  101. data/lib/canvas_sync/job_uniqueness/strategy/until_executed.rb +0 -20
  102. data/lib/canvas_sync/job_uniqueness/strategy/until_executing.rb +0 -20
  103. data/lib/canvas_sync/job_uniqueness/strategy/until_expired.rb +0 -16
  104. data/lib/canvas_sync/job_uniqueness/strategy/while_executing.rb +0 -26
  105. data/lib/canvas_sync/job_uniqueness/strategy.rb +0 -27
  106. data/lib/canvas_sync/job_uniqueness/unique_job_common.rb +0 -79
  107. data/spec/dummy/README.rdoc +0 -1
  108. data/spec/dummy/Rakefile +0 -6
  109. data/spec/dummy/app/services/live_events/assignment_created_event.rb +0 -12
  110. data/spec/dummy/app/services/live_events/assignment_updated_event.rb +0 -12
  111. data/spec/dummy/app/services/live_events/base_event.rb +0 -52
  112. data/spec/dummy/app/services/live_events/course_created_event.rb +0 -12
  113. data/spec/dummy/app/services/live_events/course_section_created_event.rb +0 -12
  114. data/spec/dummy/app/services/live_events/course_section_updated_event.rb +0 -12
  115. data/spec/dummy/app/services/live_events/course_updated_event.rb +0 -12
  116. data/spec/dummy/app/services/live_events/enrollment_created_event.rb +0 -12
  117. data/spec/dummy/app/services/live_events/enrollment_updated_event.rb +0 -12
  118. data/spec/dummy/app/services/live_events/grade_changed_event.rb +0 -12
  119. data/spec/dummy/app/services/live_events/module_created_event.rb +0 -12
  120. data/spec/dummy/app/services/live_events/module_item_created_event.rb +0 -12
  121. data/spec/dummy/app/services/live_events/module_item_updated_event.rb +0 -12
  122. data/spec/dummy/app/services/live_events/module_updated_event.rb +0 -12
  123. data/spec/dummy/app/services/live_events/submission_created_event.rb +0 -12
  124. data/spec/dummy/app/services/live_events/submission_updated_event.rb +0 -12
  125. data/spec/dummy/app/services/live_events/syllabus_updated_event.rb +0 -12
  126. data/spec/dummy/app/services/live_events/user_created_event.rb +0 -12
  127. data/spec/dummy/app/services/live_events/user_updated_event.rb +0 -12
  128. data/spec/dummy/bin/rails +0 -4
  129. data/spec/dummy/config/application.rb +0 -39
  130. data/spec/dummy/config/boot.rb +0 -5
  131. data/spec/dummy/config/database.yml +0 -25
  132. data/spec/dummy/config/environment.rb +0 -5
  133. data/spec/dummy/config/environments/development.rb +0 -41
  134. data/spec/dummy/config/environments/test.rb +0 -44
  135. data/spec/dummy/config/initializers/assets.rb +0 -11
  136. data/spec/dummy/config/initializers/session_store.rb +0 -3
  137. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  138. data/spec/dummy/config/routes.rb +0 -3
  139. data/spec/dummy/config/secrets.yml +0 -22
  140. data/spec/dummy/config.ru +0 -4
  141. data/spec/dummy/db/schema.rb +0 -563
  142. data/spec/job_batching/batch_spec.rb +0 -531
  143. data/spec/job_batching/callback_spec.rb +0 -38
  144. data/spec/job_batching/compat/active_job_spec.rb +0 -107
  145. data/spec/job_batching/compat/sidekiq_spec.rb +0 -127
  146. data/spec/job_batching/context_hash_spec.rb +0 -54
  147. data/spec/job_batching/flow_spec.rb +0 -82
  148. data/spec/job_batching/integration/fail_then_succeed.rb +0 -42
  149. data/spec/job_batching/integration/integration.rb +0 -57
  150. data/spec/job_batching/integration/nested.rb +0 -88
  151. data/spec/job_batching/integration/simple.rb +0 -47
  152. data/spec/job_batching/integration/workflow.rb +0 -134
  153. data/spec/job_batching/integration_helper.rb +0 -50
  154. data/spec/job_batching/pool_spec.rb +0 -161
  155. data/spec/job_batching/status_spec.rb +0 -76
  156. data/spec/job_batching/support/base_job.rb +0 -14
  157. data/spec/job_batching/support/sample_callback.rb +0 -2
  158. data/spec/job_uniqueness/compat/active_job_spec.rb +0 -49
  159. data/spec/job_uniqueness/compat/sidekiq_spec.rb +0 -68
  160. data/spec/job_uniqueness/lock_context_spec.rb +0 -106
  161. data/spec/job_uniqueness/on_conflict/log_spec.rb +0 -11
  162. data/spec/job_uniqueness/on_conflict/raise_spec.rb +0 -10
  163. data/spec/job_uniqueness/on_conflict/reschedule_spec.rb +0 -63
  164. data/spec/job_uniqueness/on_conflict_spec.rb +0 -16
  165. data/spec/job_uniqueness/spec_helper.rb +0 -17
  166. data/spec/job_uniqueness/strategy/base_spec.rb +0 -100
  167. data/spec/job_uniqueness/strategy/until_and_while_executing_spec.rb +0 -48
  168. data/spec/job_uniqueness/strategy/until_executed_spec.rb +0 -23
  169. data/spec/job_uniqueness/strategy/until_executing_spec.rb +0 -23
  170. data/spec/job_uniqueness/strategy/until_expired_spec.rb +0 -23
  171. data/spec/job_uniqueness/strategy/while_executing_spec.rb +0 -33
  172. data/spec/job_uniqueness/support/lock_strategy.rb +0 -28
  173. data/spec/job_uniqueness/support/on_conflict.rb +0 -24
  174. data/spec/job_uniqueness/support/test_worker.rb +0 -19
  175. data/spec/job_uniqueness/unique_job_common_spec.rb +0 -45
  176. /data/spec/{dummy → internal}/app/models/account.rb +0 -0
  177. /data/spec/{dummy → internal}/app/models/admin.rb +0 -0
  178. /data/spec/{dummy → internal}/app/models/assignment.rb +0 -0
  179. /data/spec/{dummy → internal}/app/models/assignment_group.rb +0 -0
  180. /data/spec/{dummy → internal}/app/models/assignment_override.rb +0 -0
  181. /data/spec/{dummy → internal}/app/models/context_module.rb +0 -0
  182. /data/spec/{dummy → internal}/app/models/context_module_item.rb +0 -0
  183. /data/spec/{dummy → internal}/app/models/course_progress.rb +0 -0
  184. /data/spec/{dummy → internal}/app/models/enrollment.rb +0 -0
  185. /data/spec/{dummy → internal}/app/models/grading_period.rb +0 -0
  186. /data/spec/{dummy → internal}/app/models/grading_period_group.rb +0 -0
  187. /data/spec/{dummy → internal}/app/models/group.rb +0 -0
  188. /data/spec/{dummy → internal}/app/models/group_membership.rb +0 -0
  189. /data/spec/{dummy → internal}/app/models/learning_outcome_result.rb +0 -0
  190. /data/spec/{dummy → internal}/app/models/pseudonym.rb +0 -0
  191. /data/spec/{dummy → internal}/app/models/role.rb +0 -0
  192. /data/spec/{dummy → internal}/app/models/rubric.rb +0 -0
  193. /data/spec/{dummy → internal}/app/models/rubric_assessment.rb +0 -0
  194. /data/spec/{dummy → internal}/app/models/rubric_association.rb +0 -0
  195. /data/spec/{dummy → internal}/app/models/score.rb +0 -0
  196. /data/spec/{dummy → internal}/app/models/section.rb +0 -0
  197. /data/spec/{dummy → internal}/app/models/submission.rb +0 -0
  198. /data/spec/{dummy → internal}/app/models/term.rb +0 -0
  199. /data/spec/{dummy → internal}/app/models/user.rb +0 -0
  200. /data/spec/{dummy → internal}/app/models/user_observer.rb +0 -0
  201. /data/spec/{dummy/db/migrate/20190702203621_create_courses.rb → internal/db/migrate/20250912205138_create_courses.rb} +0 -0
  202. /data/spec/{dummy/db/migrate/20190702203624_create_enrollments.rb → internal/db/migrate/20250912205143_create_enrollments.rb} +0 -0
  203. /data/spec/{dummy/db/migrate/20250319194134_create_course_nicknames.rb → internal/db/migrate/20250912205158_create_course_nicknames.rb} +0 -0
  204. /data/spec/{dummy/db/migrate/20250319194135_create_rubrics.rb → internal/db/migrate/20250912205159_create_rubrics.rb} +0 -0
  205. /data/spec/{dummy/db/migrate/20241223080202_create_assignment_overrides.rb → internal/db/migrate/20250912205163_create_assignment_overrides.rb} +0 -0
  206. /data/spec/{dummy/db/migrate/20250626194330_create_scores.rb → internal/db/migrate/20250912205164_create_scores.rb} +0 -0
@@ -1,100 +0,0 @@
1
- require 'job_uniqueness/spec_helper'
2
-
3
- RSpec.describe CanvasSync::JobUniqueness::Strategy::Base do
4
- include_context 'with TestWorker'
5
-
6
- let!(:jid) { worker.perform_async }
7
- let(:context) { CanvasSync::JobUniqueness::LockContext.new({ jid: jid, queue: 'default', job_clazz: 'TestWorker' }) }
8
- let(:strategy) { CanvasSync::JobUniqueness::Strategy::UntilExecuted.new(context) }
9
-
10
- describe '#wrap_in_batch' do
11
- it 'does not wrap if re-enqueuing' do
12
- Thread.current[:unique_jobs_previous_context] = context
13
- expect(CanvasSync::JobBatches::Batch).not_to receive(:new)
14
- strategy.send(:wrap_in_batch, &->{ })
15
- ensure
16
- Thread.current[:unique_jobs_previous_context] = nil
17
- end
18
-
19
- context 'when the job fails' do
20
- before(:each) do
21
- TestWorker.unique_job_options[:strategy] = :until_executed
22
- allow_any_instance_of(worker).to receive(:perform) do |w|
23
- @bid = w.bid
24
- raise 'error'
25
- end
26
- end
27
-
28
- context 'unlock_on_failure: :any' do
29
- before(:each) { TestWorker.unique_job_options[:unlock_on_failure] = :any }
30
-
31
- it 'unlocks on any failure' do
32
- expect(strategy).to be_locked
33
- expect{ Sidekiq::Worker.drain_all }.to raise_error('error')
34
- Sidekiq::Worker.drain_all
35
- expect(strategy).not_to be_locked
36
- end
37
- end
38
-
39
- context 'unlock_on_failure: :death' do
40
- before(:each) { TestWorker.unique_job_options[:unlock_on_failure] = :death }
41
-
42
- it 'does not unlock on any failure' do
43
- expect(strategy).to be_locked
44
- expect{ Sidekiq::Worker.drain_all }.to raise_error('error')
45
- Sidekiq::Worker.drain_all
46
- expect(strategy).to be_locked
47
- end
48
-
49
- it 'it unlocks on death' do
50
- expect{ Sidekiq::Worker.drain_all }.to raise_error('error')
51
- Sidekiq::Worker.drain_all
52
- expect(strategy).to be_locked
53
- CanvasSync::JobBatches::Batch.process_dead_job(@bid, jid)
54
- Sidekiq::Worker.drain_all
55
- expect(strategy).not_to be_locked
56
- end
57
- end
58
-
59
- context 'unlock_on_failure: :stagnant' do
60
- before(:each) { TestWorker.unique_job_options[:unlock_on_failure] = :stagnant }
61
-
62
- it 'does not unlock on any failure' do
63
- expect(strategy).to be_locked
64
- expect{ Sidekiq::Worker.drain_all }.to raise_error('error')
65
- Sidekiq::Worker.drain_all
66
- expect(strategy).to be_locked
67
- end
68
-
69
- it 'it unlocks on stagnation' do
70
- expect{ Sidekiq::Worker.drain_all }.to raise_error('error')
71
- Sidekiq::Worker.drain_all
72
- expect(strategy).to be_locked
73
- CanvasSync::JobBatches::Batch.process_dead_job(@bid, jid)
74
- Sidekiq::Worker.drain_all
75
- expect(strategy).not_to be_locked
76
- end
77
- end
78
-
79
- context 'unlock_on_failure: :expire' do
80
- before(:each) { TestWorker.unique_job_options[:unlock_on_failure] = :expire }
81
-
82
- it 'does not unlock on any failure' do
83
- expect(strategy).to be_locked
84
- expect{ Sidekiq::Worker.drain_all }.to raise_error('error')
85
- Sidekiq::Worker.drain_all
86
- expect(strategy).to be_locked
87
- end
88
-
89
- it 'does not unlock on death' do
90
- expect{ Sidekiq::Worker.drain_all }.to raise_error('error')
91
- Sidekiq::Worker.drain_all
92
- expect(strategy).to be_locked
93
- CanvasSync::JobBatches::Batch.process_dead_job(@bid, jid)
94
- Sidekiq::Worker.drain_all
95
- expect(strategy).to be_locked
96
- end
97
- end
98
- end
99
- end
100
- end
@@ -1,48 +0,0 @@
1
- require 'job_uniqueness/spec_helper'
2
-
3
- RSpec.describe CanvasSync::JobUniqueness::Strategy::UntilAndWhileExecuting do
4
- include_context 'lock strategy specs', strategy: :until_and_while_executing
5
-
6
- include_examples "a lock implementation"
7
-
8
- describe "#on_enqueue" do
9
- it "locks the queue" do
10
- process_one.on_enqueue {}
11
- expect(process_one).to be_locked
12
- end
13
-
14
- it "does not lock the runtime lock" do
15
- process_one.on_enqueue {}
16
- expect(process_one.send(:runtime_lock)).to_not be_locked
17
- end
18
- end
19
-
20
- describe "#on_perform" do
21
- it "unlocks the queue" do
22
- process_one.on_perform do
23
- expect(process_one).to_not be_locked
24
- end
25
- end
26
-
27
- it "locks the runtime lock" do
28
- process_one.on_perform do
29
- expect(process_one.send(:runtime_lock)).to be_locked
30
- end
31
- end
32
-
33
- it "unlocks the runtime lock after processing" do
34
- process_one.on_perform do
35
- process_one.send(:runtime_lock).batch_callback(:success, nil)
36
- expect(process_one.send(:runtime_lock)).to_not be_locked
37
- end
38
- end
39
-
40
- it "prevents other processes from executing" do
41
- process_one.on_perform do
42
- expect do
43
- process_two.on_perform { }
44
- end.to raise_error(CanvasSync::JobUniqueness::CouldNotLockError)
45
- end
46
- end
47
- end
48
- end
@@ -1,23 +0,0 @@
1
- require 'job_uniqueness/spec_helper'
2
-
3
- RSpec.describe CanvasSync::JobUniqueness::Strategy::UntilExecuted do
4
- include_context 'lock strategy specs', strategy: :until_executed
5
-
6
- include_examples "a lock implementation"
7
-
8
- describe "#on_enqueue" do
9
- it "locks the queue" do
10
- process_one.on_enqueue {}
11
- expect(process_one).to be_locked
12
- end
13
- end
14
-
15
- describe "#on_perform" do
16
- it "unlocks after processing" do
17
- process_one.on_enqueue {}
18
- process_one.on_perform {}
19
- process_one.batch_callback(:success, nil)
20
- expect(process_one).to_not be_locked
21
- end
22
- end
23
- end
@@ -1,23 +0,0 @@
1
- require 'job_uniqueness/spec_helper'
2
-
3
- RSpec.describe CanvasSync::JobUniqueness::Strategy::UntilExecuting do
4
- include_context 'lock strategy specs', strategy: :until_executing
5
-
6
- include_examples "a lock implementation"
7
-
8
- describe "#on_enqueue" do
9
- it "locks the queue" do
10
- process_one.on_enqueue {}
11
- expect(process_one).to be_locked
12
- end
13
- end
14
-
15
- describe "#on_perform" do
16
- it "unlocks before processing" do
17
- process_one.on_enqueue {}
18
- process_one.on_perform do
19
- expect(process_one).to_not be_locked
20
- end
21
- end
22
- end
23
- end
@@ -1,23 +0,0 @@
1
- require 'job_uniqueness/spec_helper'
2
-
3
- RSpec.describe CanvasSync::JobUniqueness::Strategy::UntilExpired do
4
- include_context 'lock strategy specs', strategy: :until_expired
5
-
6
- # include_examples "a lock implementation"
7
-
8
- describe "#on_enqueue" do
9
- it "locks the queue" do
10
- process_one.on_enqueue {}
11
- expect(process_one).to be_locked
12
- end
13
- end
14
-
15
- describe "#on_perform" do
16
- it "does not unlock after processing" do
17
- process_one.on_enqueue {}
18
- process_one.on_perform {}
19
- process_one.batch_callback(:success, nil)
20
- expect(process_one).to be_locked
21
- end
22
- end
23
- end
@@ -1,33 +0,0 @@
1
- require 'job_uniqueness/spec_helper'
2
-
3
- RSpec.describe CanvasSync::JobUniqueness::Strategy::WhileExecuting do
4
- include_context 'lock strategy specs', strategy: :while_executing
5
-
6
- include_examples "a lock implementation"
7
-
8
- describe "#on_enqueue" do
9
- it "does not lock jobs" do
10
- expect(process_one.on_enqueue {})
11
- expect(process_one).not_to be_locked
12
-
13
- expect(process_two.on_enqueue {})
14
- expect(process_two).not_to be_locked
15
- end
16
- end
17
-
18
- describe "#on_perform" do
19
- it "locks the process" do
20
- process_one.on_perform do
21
- expect(process_one).to be_locked
22
- end
23
- end
24
-
25
- it "prevents other processes from executing" do
26
- process_one.on_perform do
27
- expect do
28
- process_two.on_perform { }
29
- end.to raise_error(CanvasSync::JobUniqueness::CouldNotLockError)
30
- end
31
- end
32
- end
33
- end
@@ -1,28 +0,0 @@
1
- require 'job_uniqueness/spec_helper'
2
-
3
- RSpec.shared_context "lock strategy specs" do |strategy:|
4
- include_context 'with TestWorker'
5
-
6
- before(:each) { TestWorker.unique_job_options[:strategy] = strategy }
7
-
8
- let(:context1) { CanvasSync::JobUniqueness::LockContext.new({ jid: 'j1', queue: 'default', job_clazz: 'TestWorker'}) }
9
- let(:context2) { CanvasSync::JobUniqueness::LockContext.new({ jid: 'j2', queue: 'default', job_clazz: 'TestWorker'}) }
10
-
11
- let(:process_one) { described_class.new(context1) }
12
- let(:process_two) { described_class.new(context2) }
13
- end
14
-
15
- RSpec.shared_examples "a lock implementation" do
16
- it "is unlocked when done" do
17
- process_one.on_enqueue {}
18
- did_lock = process_one.locked?
19
-
20
- process_one.on_perform {}
21
- did_lock ||= process_one.locked?
22
-
23
- expect(did_lock).to be_truthy
24
-
25
- process_one.batch_callback(:success, nil)
26
- expect(process_one).not_to be_locked
27
- end
28
- end
@@ -1,24 +0,0 @@
1
-
2
- RSpec.shared_context "on_conflict specs" do
3
- include_context 'with TestWorker'
4
- let(:lock_context) { CanvasSync::JobUniqueness::LockContext.new({ jid: 'j1', queue: 'default', job_clazz: 'TestWorker'}) }
5
- let(:on_conflict) { described_class.new(lock_context)}
6
- end
7
-
8
- RSpec.shared_examples "OnConflict is compatible with" do |lock_strategies|
9
- it "is compatible with the expected Lock Strategies" do
10
- lock_strategies.each do |lock_strategy|
11
- CanvasSync::JobUniqueness::OnConflict.validate!(described_class, lock_strategy)
12
- end
13
- end
14
- end
15
-
16
- RSpec.shared_examples "OnConflict is incompatible with" do |lock_strategies|
17
- it "is not compatible with the expected Lock Strategies" do
18
- lock_strategies.each do |lock_strategy|
19
- expect do
20
- CanvasSync::JobUniqueness::OnConflict.validate!(described_class, lock_strategy)
21
- end.to raise_error(ArgumentError)
22
- end
23
- end
24
- end
@@ -1,19 +0,0 @@
1
- require 'job_uniqueness/spec_helper'
2
-
3
- RSpec.shared_context "with TestWorker" do
4
- let!(:worker) do
5
- Class.new do
6
- include Sidekiq::Worker
7
-
8
- ensure_uniqueness(
9
- strategy: :until_executed,
10
- )
11
-
12
- def perform; end
13
- end
14
- end
15
-
16
- before(:each) { stub_const('TestWorker', worker) }
17
-
18
- let(:lock_context) { CanvasSync::JobUniqueness::LockContext.new({ jid: 'j1', queue: 'default', job_clazz: 'TestWorker'}) }
19
- end
@@ -1,45 +0,0 @@
1
- require 'job_uniqueness/spec_helper'
2
-
3
- RSpec.describe CanvasSync::JobUniqueness::UniqueJobCommon do
4
- describe ".unlock!" do
5
- include_context "with TestWorker"
6
-
7
- it "unlocks the lock with a specific JID" do
8
- jid = TestWorker.perform_async
9
- lctx = CanvasSync::JobUniqueness::LockContext.new({ jid: jid, queue: 'default', job_clazz: 'TestWorker'})
10
- lstrat = lctx.lock_strategy
11
- lsmith = lstrat.send(:locksmith)
12
- expect(lsmith.locked?).to be_truthy
13
-
14
- TestWorker.unlock!(jid, queue: 'default')
15
- expect(lsmith.locked?).to be_falsey
16
- end
17
-
18
- it "unlocks the lock without a specific JID" do
19
- jid = TestWorker.perform_async
20
- lctx = CanvasSync::JobUniqueness::LockContext.new({ jid: jid, queue: 'default', job_clazz: 'TestWorker'})
21
- lstrat = lctx.lock_strategy
22
- lsmith = lstrat.send(:locksmith)
23
- expect(lsmith.locked?).to be_truthy
24
-
25
- TestWorker.unlock!(queue: 'default')
26
- expect(lsmith.locked?).to be_falsey
27
- end
28
-
29
- it "unlocks the lock matching parameters" do
30
- args = [1, 2, 3]
31
- jid = TestWorker.perform_async(*args)
32
-
33
- lctx = CanvasSync::JobUniqueness::LockContext.new({ jid: jid, queue: 'default', job_clazz: 'TestWorker', args: args})
34
- lstrat = lctx.lock_strategy
35
- lsmith = lstrat.send(:locksmith)
36
- expect(lsmith.locked?).to be_truthy
37
-
38
- TestWorker.unlock!(queue: 'default')
39
- expect(lsmith.locked?).to be_truthy
40
-
41
- TestWorker.unlock!(queue: 'default', args: args)
42
- expect(lsmith.locked?).to be_falsey
43
- end
44
- end
45
- end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes