canvas_sync 0.22.6 → 0.22.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (436) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +0 -0
  3. data/app/controllers/canvas_sync/api/v1/health_check_controller.rb +0 -0
  4. data/app/controllers/canvas_sync/api/v1/live_events_controller.rb +0 -0
  5. data/app/models/canvas_sync/job_log.rb +0 -0
  6. data/app/models/canvas_sync/sync_batch.rb +0 -0
  7. data/config/initializers/apartment.rb +0 -0
  8. data/config/routes.rb +0 -0
  9. data/db/migrate/20170915210836_create_canvas_sync_job_log.rb +0 -0
  10. data/db/migrate/20180725155729_add_job_id_to_canvas_sync_job_logs.rb +0 -0
  11. data/db/migrate/20190916154829_add_fork_count_to_canvas_sync_job_logs.rb +0 -0
  12. data/db/migrate/20201018210836_create_canvas_sync_sync_batches.rb +0 -0
  13. data/db/migrate/20201030210836_add_full_sync_to_canvas_sync_sync_batch.rb +0 -0
  14. data/lib/canvas_sync/api_syncable.rb +0 -0
  15. data/lib/canvas_sync/batch_processor.rb +0 -0
  16. data/lib/canvas_sync/class_callback_executor.rb +0 -0
  17. data/lib/canvas_sync/concerns/ability_helper.rb +0 -0
  18. data/lib/canvas_sync/concerns/account/ancestry.rb +0 -0
  19. data/lib/canvas_sync/concerns/account/base.rb +0 -0
  20. data/lib/canvas_sync/concerns/api_syncable.rb +9 -6
  21. data/lib/canvas_sync/concerns/legacy_columns.rb +0 -0
  22. data/lib/canvas_sync/concerns/live_event_sync.rb +0 -0
  23. data/lib/canvas_sync/concerns/role/base.rb +0 -0
  24. data/lib/canvas_sync/concerns/sync_mapping.rb +11 -1
  25. data/lib/canvas_sync/config.rb +0 -0
  26. data/lib/canvas_sync/engine.rb +0 -0
  27. data/lib/canvas_sync/generators/install_generator.rb +0 -0
  28. data/lib/canvas_sync/generators/install_live_events_generator.rb +0 -0
  29. data/lib/canvas_sync/generators/templates/migrations/create_accounts.rb +0 -0
  30. data/lib/canvas_sync/generators/templates/migrations/create_admins.rb +0 -0
  31. data/lib/canvas_sync/generators/templates/migrations/create_assignment_groups.rb +0 -0
  32. data/lib/canvas_sync/generators/templates/migrations/create_assignment_overrides.rb +25 -0
  33. data/lib/canvas_sync/generators/templates/migrations/create_assignments.rb +0 -0
  34. data/lib/canvas_sync/generators/templates/migrations/create_content_migrations.rb +0 -0
  35. data/lib/canvas_sync/generators/templates/migrations/create_context_module_items.rb +0 -0
  36. data/lib/canvas_sync/generators/templates/migrations/create_context_modules.rb +0 -0
  37. data/lib/canvas_sync/generators/templates/migrations/create_course_nicknames.rb +0 -0
  38. data/lib/canvas_sync/generators/templates/migrations/create_course_progresses.rb +0 -0
  39. data/lib/canvas_sync/generators/templates/migrations/create_courses.rb +0 -0
  40. data/lib/canvas_sync/generators/templates/migrations/create_enrollments.rb +1 -0
  41. data/lib/canvas_sync/generators/templates/migrations/create_grading_period_groups.rb +0 -0
  42. data/lib/canvas_sync/generators/templates/migrations/create_grading_periods.rb +0 -0
  43. data/lib/canvas_sync/generators/templates/migrations/create_group_memberships.rb +0 -0
  44. data/lib/canvas_sync/generators/templates/migrations/create_groups.rb +0 -0
  45. data/lib/canvas_sync/generators/templates/migrations/create_learning_outcome_results.rb +0 -0
  46. data/lib/canvas_sync/generators/templates/migrations/create_learning_outcomes.rb +0 -0
  47. data/lib/canvas_sync/generators/templates/migrations/create_pseudonyms.rb +0 -0
  48. data/lib/canvas_sync/generators/templates/migrations/create_roles.rb +0 -0
  49. data/lib/canvas_sync/generators/templates/migrations/create_rubric_assessments.rb +0 -0
  50. data/lib/canvas_sync/generators/templates/migrations/create_rubric_associations.rb +0 -0
  51. data/lib/canvas_sync/generators/templates/migrations/create_rubrics.rb +0 -0
  52. data/lib/canvas_sync/generators/templates/migrations/create_sections.rb +0 -0
  53. data/lib/canvas_sync/generators/templates/migrations/create_submissions.rb +0 -0
  54. data/lib/canvas_sync/generators/templates/migrations/create_terms.rb +0 -0
  55. data/lib/canvas_sync/generators/templates/migrations/create_user_observers.rb +0 -0
  56. data/lib/canvas_sync/generators/templates/migrations/create_users.rb +0 -0
  57. data/lib/canvas_sync/generators/templates/models/account.rb +0 -0
  58. data/lib/canvas_sync/generators/templates/models/admin.rb +0 -0
  59. data/lib/canvas_sync/generators/templates/models/assignment.rb +0 -0
  60. data/lib/canvas_sync/generators/templates/models/assignment_group.rb +0 -0
  61. data/lib/canvas_sync/generators/templates/models/assignment_override.rb +28 -0
  62. data/lib/canvas_sync/generators/templates/models/content_migration.rb +0 -0
  63. data/lib/canvas_sync/generators/templates/models/context_module.rb +0 -0
  64. data/lib/canvas_sync/generators/templates/models/context_module_item.rb +0 -0
  65. data/lib/canvas_sync/generators/templates/models/course.rb +0 -0
  66. data/lib/canvas_sync/generators/templates/models/course_nickname.rb +0 -0
  67. data/lib/canvas_sync/generators/templates/models/enrollment.rb +0 -0
  68. data/lib/canvas_sync/generators/templates/models/grading_period.rb +0 -0
  69. data/lib/canvas_sync/generators/templates/models/grading_period_group.rb +0 -0
  70. data/lib/canvas_sync/generators/templates/models/group.rb +0 -0
  71. data/lib/canvas_sync/generators/templates/models/group_membership.rb +0 -0
  72. data/lib/canvas_sync/generators/templates/models/learning_outcome.rb +0 -0
  73. data/lib/canvas_sync/generators/templates/models/learning_outcome_result.rb +0 -0
  74. data/lib/canvas_sync/generators/templates/models/pseudonym.rb +0 -0
  75. data/lib/canvas_sync/generators/templates/models/role.rb +0 -0
  76. data/lib/canvas_sync/generators/templates/models/rubric.rb +0 -0
  77. data/lib/canvas_sync/generators/templates/models/rubric_assessment.rb +0 -0
  78. data/lib/canvas_sync/generators/templates/models/rubric_association.rb +0 -0
  79. data/lib/canvas_sync/generators/templates/models/section.rb +0 -0
  80. data/lib/canvas_sync/generators/templates/models/submission.rb +0 -0
  81. data/lib/canvas_sync/generators/templates/models/term.rb +0 -0
  82. data/lib/canvas_sync/generators/templates/models/user.rb +0 -0
  83. data/lib/canvas_sync/generators/templates/models/user_observer.rb +0 -0
  84. data/lib/canvas_sync/generators/templates/services/live_events/assignment_event.rb +0 -0
  85. data/lib/canvas_sync/generators/templates/services/live_events/assignment_group_event.rb +0 -0
  86. data/lib/canvas_sync/generators/templates/services/live_events/course_event.rb +0 -0
  87. data/lib/canvas_sync/generators/templates/services/live_events/course_section_event.rb +0 -0
  88. data/lib/canvas_sync/generators/templates/services/live_events/enrollment_event.rb +0 -0
  89. data/lib/canvas_sync/generators/templates/services/live_events/grade_event.rb +0 -0
  90. data/lib/canvas_sync/generators/templates/services/live_events/module_event.rb +0 -0
  91. data/lib/canvas_sync/generators/templates/services/live_events/module_item_event.rb +0 -0
  92. data/lib/canvas_sync/generators/templates/services/live_events/submission_event.rb +0 -0
  93. data/lib/canvas_sync/generators/templates/services/live_events/syllabus_event.rb +0 -0
  94. data/lib/canvas_sync/generators/templates/services/live_events/user_event.rb +0 -0
  95. data/lib/canvas_sync/importers/bulk_importer.rb +39 -69
  96. data/lib/canvas_sync/importers/legacy_importer.rb +0 -0
  97. data/lib/canvas_sync/job.rb +0 -0
  98. data/lib/canvas_sync/job_batches/batch.rb +1 -1
  99. data/lib/canvas_sync/job_batches/callback.rb +0 -0
  100. data/lib/canvas_sync/job_batches/chain_builder.rb +3 -24
  101. data/lib/canvas_sync/job_batches/compat/active_job.rb +0 -0
  102. data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/css/styles.less +0 -0
  103. data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/batch_tree.js +0 -0
  104. data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/util.js +0 -0
  105. data/lib/canvas_sync/job_batches/compat/sidekiq/web/helpers.rb +0 -0
  106. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batch_tree.erb +0 -0
  107. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batches_table.erb +0 -0
  108. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_common.erb +0 -0
  109. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_jobs_table.erb +0 -0
  110. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_pagination.erb +0 -0
  111. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batch.erb +0 -0
  112. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batches.erb +0 -0
  113. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pool.erb +0 -0
  114. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pools.erb +0 -0
  115. data/lib/canvas_sync/job_batches/compat/sidekiq/web.rb +0 -0
  116. data/lib/canvas_sync/job_batches/compat/sidekiq.rb +0 -0
  117. data/lib/canvas_sync/job_batches/compat.rb +0 -0
  118. data/lib/canvas_sync/job_batches/context_hash.rb +0 -0
  119. data/lib/canvas_sync/job_batches/hier_batch_ids.lua +0 -0
  120. data/lib/canvas_sync/job_batches/jobs/base_job.rb +0 -0
  121. data/lib/canvas_sync/job_batches/jobs/concurrent_batch_job.rb +0 -0
  122. data/lib/canvas_sync/job_batches/jobs/managed_batch_job.rb +0 -4
  123. data/lib/canvas_sync/job_batches/jobs/serial_batch_job.rb +0 -0
  124. data/lib/canvas_sync/job_batches/pool.rb +0 -0
  125. data/lib/canvas_sync/job_batches/pool_refill.lua +0 -0
  126. data/lib/canvas_sync/job_batches/redis_model.rb +0 -0
  127. data/lib/canvas_sync/job_batches/redis_script.rb +0 -0
  128. data/lib/canvas_sync/job_batches/schedule_callback.lua +0 -0
  129. data/lib/canvas_sync/job_batches/status.rb +0 -1
  130. data/lib/canvas_sync/job_uniqueness/compat/active_job.rb +0 -0
  131. data/lib/canvas_sync/job_uniqueness/compat/sidekiq.rb +0 -0
  132. data/lib/canvas_sync/job_uniqueness/compat.rb +0 -0
  133. data/lib/canvas_sync/job_uniqueness/configuration.rb +0 -0
  134. data/lib/canvas_sync/job_uniqueness/job_uniqueness.rb +0 -0
  135. data/lib/canvas_sync/job_uniqueness/lock_context.rb +3 -15
  136. data/lib/canvas_sync/job_uniqueness/locksmith.rb +0 -0
  137. data/lib/canvas_sync/job_uniqueness/on_conflict/base.rb +0 -0
  138. data/lib/canvas_sync/job_uniqueness/on_conflict/log.rb +0 -0
  139. data/lib/canvas_sync/job_uniqueness/on_conflict/null_strategy.rb +0 -0
  140. data/lib/canvas_sync/job_uniqueness/on_conflict/raise.rb +0 -0
  141. data/lib/canvas_sync/job_uniqueness/on_conflict/reject.rb +0 -0
  142. data/lib/canvas_sync/job_uniqueness/on_conflict/reschedule.rb +0 -0
  143. data/lib/canvas_sync/job_uniqueness/on_conflict.rb +0 -0
  144. data/lib/canvas_sync/job_uniqueness/strategy/base.rb +0 -0
  145. data/lib/canvas_sync/job_uniqueness/strategy/until_and_while_executing.rb +0 -0
  146. data/lib/canvas_sync/job_uniqueness/strategy/until_executed.rb +0 -0
  147. data/lib/canvas_sync/job_uniqueness/strategy/until_executing.rb +0 -0
  148. data/lib/canvas_sync/job_uniqueness/strategy/until_expired.rb +0 -0
  149. data/lib/canvas_sync/job_uniqueness/strategy/while_executing.rb +0 -0
  150. data/lib/canvas_sync/job_uniqueness/strategy.rb +0 -0
  151. data/lib/canvas_sync/job_uniqueness/unique_job_common.rb +0 -0
  152. data/lib/canvas_sync/jobs/begin_sync_chain_job.rb +0 -0
  153. data/lib/canvas_sync/jobs/canvas_process_waiter.rb +0 -0
  154. data/lib/canvas_sync/jobs/report_checker.rb +0 -0
  155. data/lib/canvas_sync/jobs/report_processor_job.rb +0 -0
  156. data/lib/canvas_sync/jobs/report_starter.rb +0 -0
  157. data/lib/canvas_sync/jobs/sync_accounts_job.rb +0 -0
  158. data/lib/canvas_sync/jobs/sync_admins_job.rb +0 -0
  159. data/lib/canvas_sync/jobs/sync_assignment_groups_job.rb +0 -0
  160. data/lib/canvas_sync/jobs/sync_assignment_overrides_job.rb +20 -0
  161. data/lib/canvas_sync/jobs/sync_assignments_job.rb +0 -0
  162. data/lib/canvas_sync/jobs/sync_content_migrations_job.rb +0 -0
  163. data/lib/canvas_sync/jobs/sync_context_module_items_job.rb +0 -0
  164. data/lib/canvas_sync/jobs/sync_context_modules_job.rb +0 -0
  165. data/lib/canvas_sync/jobs/sync_course_progresses_job.rb +0 -0
  166. data/lib/canvas_sync/jobs/sync_provisioning_report_job.rb +0 -0
  167. data/lib/canvas_sync/jobs/sync_roles_job.rb +0 -0
  168. data/lib/canvas_sync/jobs/sync_rubric_assessments_job.rb +0 -0
  169. data/lib/canvas_sync/jobs/sync_rubric_associations_job.rb +0 -0
  170. data/lib/canvas_sync/jobs/sync_rubrics_job.rb +0 -0
  171. data/lib/canvas_sync/jobs/sync_simple_table_job.rb +0 -0
  172. data/lib/canvas_sync/jobs/sync_submissions_job.rb +0 -0
  173. data/lib/canvas_sync/jobs/sync_terms_job.rb +0 -0
  174. data/lib/canvas_sync/jobs/term_batches_job.rb +1 -4
  175. data/lib/canvas_sync/live_events/base_handler.rb +0 -0
  176. data/lib/canvas_sync/live_events/process_event_job.rb +0 -0
  177. data/lib/canvas_sync/live_events.rb +0 -0
  178. data/lib/canvas_sync/misc_helper.rb +0 -0
  179. data/lib/canvas_sync/processors/assignment_groups_processor.rb +0 -0
  180. data/lib/canvas_sync/processors/assignment_overrides_processor.rb +41 -0
  181. data/lib/canvas_sync/processors/assignments_processor.rb +0 -0
  182. data/lib/canvas_sync/processors/content_migrations_processor.rb +0 -0
  183. data/lib/canvas_sync/processors/context_module_items_processor.rb +0 -0
  184. data/lib/canvas_sync/processors/context_modules_processor.rb +0 -0
  185. data/lib/canvas_sync/processors/course_completion_report_processor.rb +0 -0
  186. data/lib/canvas_sync/processors/model_mappings.yml +46 -0
  187. data/lib/canvas_sync/processors/normal_processor.rb +0 -0
  188. data/lib/canvas_sync/processors/provisioning_report_processor.rb +0 -0
  189. data/lib/canvas_sync/processors/report_processor.rb +0 -0
  190. data/lib/canvas_sync/processors/rubric_assessments_processor.rb +0 -0
  191. data/lib/canvas_sync/processors/rubric_associations_processor.rb +0 -0
  192. data/lib/canvas_sync/processors/rubrics_processor.rb +0 -0
  193. data/lib/canvas_sync/processors/submissions_processor.rb +0 -0
  194. data/lib/canvas_sync/record.rb +0 -0
  195. data/lib/canvas_sync/sidekiq_job.rb +0 -0
  196. data/lib/canvas_sync/version.rb +1 -1
  197. data/lib/canvas_sync.rb +4 -0
  198. data/spec/canvas_sync/canvas_sync_spec.rb +41 -59
  199. data/spec/canvas_sync/jobs/canvas_process_waiter_spec.rb +0 -0
  200. data/spec/canvas_sync/jobs/job_spec.rb +0 -0
  201. data/spec/canvas_sync/jobs/report_checker_spec.rb +0 -0
  202. data/spec/canvas_sync/jobs/report_processor_job_spec.rb +0 -0
  203. data/spec/canvas_sync/jobs/report_starter_spec.rb +0 -0
  204. data/spec/canvas_sync/jobs/sync_admins_job_spec.rb +0 -0
  205. data/spec/canvas_sync/jobs/sync_assignment_groups_job_spec.rb +0 -0
  206. data/spec/canvas_sync/jobs/sync_assignments_job_spec.rb +0 -0
  207. data/spec/canvas_sync/jobs/sync_content_migrations_job_spec.rb +0 -0
  208. data/spec/canvas_sync/jobs/sync_context_module_items_job_spec.rb +0 -0
  209. data/spec/canvas_sync/jobs/sync_context_modules_job_spec.rb +0 -0
  210. data/spec/canvas_sync/jobs/sync_provisioning_report_job_spec.rb +0 -0
  211. data/spec/canvas_sync/jobs/sync_roles_job_spec.rb +0 -0
  212. data/spec/canvas_sync/jobs/sync_simple_table_job_spec.rb +0 -0
  213. data/spec/canvas_sync/jobs/sync_submissions_job_spec.rb +0 -0
  214. data/spec/canvas_sync/jobs/sync_terms_job_spec.rb +0 -0
  215. data/spec/canvas_sync/live_events/live_event_sync_spec.rb +0 -0
  216. data/spec/canvas_sync/live_events/live_events_controller_spec.rb +0 -0
  217. data/spec/canvas_sync/live_events/process_event_job_spec.rb +0 -0
  218. data/spec/canvas_sync/misc_helper_spec.rb +0 -0
  219. data/spec/canvas_sync/models/accounts_spec.rb +0 -0
  220. data/spec/canvas_sync/models/admins_spec.rb +0 -0
  221. data/spec/canvas_sync/models/assignment_group_spec.rb +0 -0
  222. data/spec/canvas_sync/models/assignment_spec.rb +0 -0
  223. data/spec/canvas_sync/models/context_module_item_spec.rb +0 -0
  224. data/spec/canvas_sync/models/context_module_spec.rb +0 -0
  225. data/spec/canvas_sync/models/course_spec.rb +0 -0
  226. data/spec/canvas_sync/models/enrollment_spec.rb +0 -0
  227. data/spec/canvas_sync/models/group_membership_spec.rb +0 -0
  228. data/spec/canvas_sync/models/group_spec.rb +0 -0
  229. data/spec/canvas_sync/models/roles_spec.rb +0 -0
  230. data/spec/canvas_sync/models/section_spec.rb +0 -0
  231. data/spec/canvas_sync/models/submission_spec.rb +0 -0
  232. data/spec/canvas_sync/models/term_spec.rb +0 -0
  233. data/spec/canvas_sync/models/user_spec.rb +0 -0
  234. data/spec/canvas_sync/processors/assignment_groups_processor_spec.rb +0 -0
  235. data/spec/canvas_sync/processors/assignment_overrides_processor_spec.rb +45 -0
  236. data/spec/canvas_sync/processors/assignments_processor_spec.rb +0 -0
  237. data/spec/canvas_sync/processors/content_migrations_processor_spec.rb +0 -0
  238. data/spec/canvas_sync/processors/context_module_items_processor_spec.rb +0 -0
  239. data/spec/canvas_sync/processors/context_modules_processor_spec.rb +0 -0
  240. data/spec/canvas_sync/processors/course_completion_report_processor_spec.rb +0 -0
  241. data/spec/canvas_sync/processors/normal_processor_spec.rb +0 -0
  242. data/spec/canvas_sync/processors/provisioning_report_processor_spec.rb +4 -0
  243. data/spec/canvas_sync/processors/rubric_assessments_spec.rb +0 -0
  244. data/spec/canvas_sync/processors/rubric_associations_spec.rb +0 -0
  245. data/spec/canvas_sync/processors/rubrics_processor_spec.rb +0 -0
  246. data/spec/canvas_sync/processors/submissions_processor_spec.rb +0 -0
  247. data/spec/canvas_sync/services/module_event_spec.rb +0 -0
  248. data/spec/canvas_sync/services/module_item_event_spec.rb +0 -0
  249. data/spec/dummy/README.rdoc +0 -0
  250. data/spec/dummy/Rakefile +0 -0
  251. data/spec/dummy/app/models/account.rb +0 -0
  252. data/spec/dummy/app/models/admin.rb +0 -0
  253. data/spec/dummy/app/models/application_record.rb +0 -0
  254. data/spec/dummy/app/models/assignment.rb +0 -0
  255. data/spec/dummy/app/models/assignment_group.rb +0 -0
  256. data/spec/dummy/app/models/assignment_override.rb +34 -0
  257. data/spec/dummy/app/models/content_migration.rb +0 -0
  258. data/spec/dummy/app/models/context_module.rb +0 -0
  259. data/spec/dummy/app/models/context_module_item.rb +0 -0
  260. data/spec/dummy/app/models/course.rb +0 -0
  261. data/spec/dummy/app/models/course_nickname.rb +0 -0
  262. data/spec/dummy/app/models/enrollment.rb +0 -0
  263. data/spec/dummy/app/models/grading_period.rb +0 -0
  264. data/spec/dummy/app/models/grading_period_group.rb +0 -0
  265. data/spec/dummy/app/models/group.rb +0 -0
  266. data/spec/dummy/app/models/group_membership.rb +0 -0
  267. data/spec/dummy/app/models/learning_outcome.rb +0 -0
  268. data/spec/dummy/app/models/learning_outcome_result.rb +0 -0
  269. data/spec/dummy/app/models/pseudonym.rb +0 -0
  270. data/spec/dummy/app/models/role.rb +0 -0
  271. data/spec/dummy/app/models/rubric.rb +0 -0
  272. data/spec/dummy/app/models/rubric_assessment.rb +0 -0
  273. data/spec/dummy/app/models/rubric_association.rb +0 -0
  274. data/spec/dummy/app/models/section.rb +0 -0
  275. data/spec/dummy/app/models/submission.rb +0 -0
  276. data/spec/dummy/app/models/term.rb +0 -0
  277. data/spec/dummy/app/models/user.rb +0 -0
  278. data/spec/dummy/app/models/user_observer.rb +0 -0
  279. data/spec/dummy/app/services/live_events/assignment_created_event.rb +0 -0
  280. data/spec/dummy/app/services/live_events/assignment_event.rb +0 -0
  281. data/spec/dummy/app/services/live_events/assignment_updated_event.rb +0 -0
  282. data/spec/dummy/app/services/live_events/base_event.rb +0 -0
  283. data/spec/dummy/app/services/live_events/course_created_event.rb +0 -0
  284. data/spec/dummy/app/services/live_events/course_event.rb +0 -0
  285. data/spec/dummy/app/services/live_events/course_section_created_event.rb +0 -0
  286. data/spec/dummy/app/services/live_events/course_section_event.rb +0 -0
  287. data/spec/dummy/app/services/live_events/course_section_updated_event.rb +0 -0
  288. data/spec/dummy/app/services/live_events/course_updated_event.rb +0 -0
  289. data/spec/dummy/app/services/live_events/enrollment_created_event.rb +0 -0
  290. data/spec/dummy/app/services/live_events/enrollment_event.rb +0 -0
  291. data/spec/dummy/app/services/live_events/enrollment_updated_event.rb +0 -0
  292. data/spec/dummy/app/services/live_events/grade_changed_event.rb +0 -0
  293. data/spec/dummy/app/services/live_events/grade_event.rb +0 -0
  294. data/spec/dummy/app/services/live_events/module_created_event.rb +0 -0
  295. data/spec/dummy/app/services/live_events/module_event.rb +0 -0
  296. data/spec/dummy/app/services/live_events/module_item_created_event.rb +0 -0
  297. data/spec/dummy/app/services/live_events/module_item_event.rb +0 -0
  298. data/spec/dummy/app/services/live_events/module_item_updated_event.rb +0 -0
  299. data/spec/dummy/app/services/live_events/module_updated_event.rb +0 -0
  300. data/spec/dummy/app/services/live_events/submission_created_event.rb +0 -0
  301. data/spec/dummy/app/services/live_events/submission_event.rb +0 -0
  302. data/spec/dummy/app/services/live_events/submission_updated_event.rb +0 -0
  303. data/spec/dummy/app/services/live_events/syllabus_event.rb +0 -0
  304. data/spec/dummy/app/services/live_events/syllabus_updated_event.rb +0 -0
  305. data/spec/dummy/app/services/live_events/user_created_event.rb +0 -0
  306. data/spec/dummy/app/services/live_events/user_event.rb +0 -0
  307. data/spec/dummy/app/services/live_events/user_updated_event.rb +0 -0
  308. data/spec/dummy/config/application.rb +0 -0
  309. data/spec/dummy/config/boot.rb +0 -0
  310. data/spec/dummy/config/database.yml +0 -0
  311. data/spec/dummy/config/environment.rb +0 -0
  312. data/spec/dummy/config/environments/development.rb +0 -0
  313. data/spec/dummy/config/environments/test.rb +0 -0
  314. data/spec/dummy/config/initializers/assets.rb +0 -0
  315. data/spec/dummy/config/initializers/session_store.rb +0 -0
  316. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -0
  317. data/spec/dummy/config/routes.rb +0 -0
  318. data/spec/dummy/config/secrets.yml +0 -0
  319. data/spec/dummy/config.ru +0 -0
  320. data/spec/dummy/db/migrate/20190702203621_create_courses.rb +0 -0
  321. data/spec/dummy/db/migrate/20190702203622_create_accounts.rb +0 -0
  322. data/spec/dummy/db/migrate/20190702203623_create_terms.rb +0 -0
  323. data/spec/dummy/db/migrate/20190702203624_create_enrollments.rb +1 -0
  324. data/spec/dummy/db/migrate/20190702203625_create_sections.rb +0 -0
  325. data/spec/dummy/db/migrate/20190702203626_create_assignments.rb +0 -0
  326. data/spec/dummy/db/migrate/20190702203627_create_submissions.rb +0 -0
  327. data/spec/dummy/db/migrate/20190702203630_create_assignment_groups.rb +0 -0
  328. data/spec/dummy/db/migrate/20190702203631_create_context_modules.rb +0 -0
  329. data/spec/dummy/db/migrate/20190702203632_create_context_module_items.rb +0 -0
  330. data/spec/dummy/db/migrate/20190927204545_create_roles.rb +0 -0
  331. data/spec/dummy/db/migrate/20190927204546_create_admins.rb +0 -0
  332. data/spec/dummy/db/migrate/20200415171620_create_groups.rb +0 -0
  333. data/spec/dummy/db/migrate/20200416214248_create_group_memberships.rb +0 -0
  334. data/spec/dummy/db/migrate/20201016181346_create_pseudonyms.rb +0 -0
  335. data/spec/dummy/db/migrate/20210907233329_create_user_observers.rb +0 -0
  336. data/spec/dummy/db/migrate/20210907233330_create_grading_periods.rb +0 -0
  337. data/spec/dummy/db/migrate/20211001184920_create_grading_period_groups.rb +0 -0
  338. data/spec/dummy/db/migrate/20220308072643_create_content_migrations.rb +0 -0
  339. data/spec/dummy/db/migrate/20220712210559_create_learning_outcomes.rb +0 -0
  340. data/spec/dummy/db/migrate/20220926221926_create_users.rb +0 -0
  341. data/spec/dummy/db/migrate/20240408223326_create_course_nicknames.rb +0 -0
  342. data/spec/dummy/db/migrate/20240509105100_create_rubrics.rb +0 -0
  343. data/spec/dummy/db/migrate/20240510094100_create_rubric_associations.rb +0 -0
  344. data/spec/dummy/db/migrate/20240510101100_create_rubric_assessments.rb +0 -0
  345. data/spec/dummy/db/migrate/20240523101010_create_learning_outcome_results.rb +0 -0
  346. data/spec/dummy/db/migrate/20240828161300_create_course_progresses.rb +0 -0
  347. data/spec/dummy/db/migrate/20241223080202_create_assignment_overrides.rb +25 -0
  348. data/spec/dummy/db/schema.rb +188 -174
  349. data/spec/factories/account_factory.rb +0 -0
  350. data/spec/factories/admin_factory.rb +0 -0
  351. data/spec/factories/assignment_factory.rb +0 -0
  352. data/spec/factories/assignment_group_factory.rb +0 -0
  353. data/spec/factories/assignment_override_factory.rb +10 -0
  354. data/spec/factories/context_module_factory.rb +0 -0
  355. data/spec/factories/context_module_item_factory.rb +0 -0
  356. data/spec/factories/course_factory.rb +0 -0
  357. data/spec/factories/enrollment_factory.rb +0 -0
  358. data/spec/factories/group_factory.rb +0 -0
  359. data/spec/factories/group_membership_factory.rb +0 -0
  360. data/spec/factories/role_factory.rb +0 -0
  361. data/spec/factories/section_factory.rb +0 -0
  362. data/spec/factories/submission_factory.rb +0 -0
  363. data/spec/factories/term_factory.rb +0 -0
  364. data/spec/factories/user_factory.rb +0 -0
  365. data/spec/job_batching/batch_spec.rb +0 -0
  366. data/spec/job_batching/callback_spec.rb +0 -0
  367. data/spec/job_batching/compat/active_job_spec.rb +0 -0
  368. data/spec/job_batching/compat/sidekiq_spec.rb +0 -0
  369. data/spec/job_batching/context_hash_spec.rb +0 -0
  370. data/spec/job_batching/flow_spec.rb +0 -0
  371. data/spec/job_batching/integration/fail_then_succeed.rb +0 -0
  372. data/spec/job_batching/integration/integration.rb +0 -0
  373. data/spec/job_batching/integration/nested.rb +0 -0
  374. data/spec/job_batching/integration/simple.rb +0 -0
  375. data/spec/job_batching/integration/workflow.rb +0 -0
  376. data/spec/job_batching/integration_helper.rb +0 -0
  377. data/spec/job_batching/pool_spec.rb +0 -0
  378. data/spec/job_batching/status_spec.rb +0 -0
  379. data/spec/job_batching/support/base_job.rb +0 -0
  380. data/spec/job_batching/support/sample_callback.rb +0 -0
  381. data/spec/job_uniqueness/compat/active_job_spec.rb +0 -0
  382. data/spec/job_uniqueness/compat/sidekiq_spec.rb +0 -0
  383. data/spec/job_uniqueness/lock_context_spec.rb +0 -0
  384. data/spec/job_uniqueness/on_conflict/log_spec.rb +0 -0
  385. data/spec/job_uniqueness/on_conflict/raise_spec.rb +0 -0
  386. data/spec/job_uniqueness/on_conflict/reschedule_spec.rb +0 -0
  387. data/spec/job_uniqueness/on_conflict_spec.rb +0 -0
  388. data/spec/job_uniqueness/spec_helper.rb +0 -0
  389. data/spec/job_uniqueness/strategy/base_spec.rb +0 -0
  390. data/spec/job_uniqueness/strategy/until_and_while_executing_spec.rb +0 -0
  391. data/spec/job_uniqueness/strategy/until_executed_spec.rb +0 -0
  392. data/spec/job_uniqueness/strategy/until_executing_spec.rb +0 -0
  393. data/spec/job_uniqueness/strategy/until_expired_spec.rb +0 -0
  394. data/spec/job_uniqueness/strategy/while_executing_spec.rb +0 -0
  395. data/spec/job_uniqueness/support/lock_strategy.rb +0 -0
  396. data/spec/job_uniqueness/support/on_conflict.rb +0 -0
  397. data/spec/job_uniqueness/support/test_worker.rb +0 -0
  398. data/spec/job_uniqueness/unique_job_common_spec.rb +0 -0
  399. data/spec/spec_helper.rb +0 -0
  400. data/spec/support/fake_canvas.rb +0 -0
  401. data/spec/support/fixtures/canvas_responses/admins.json +0 -0
  402. data/spec/support/fixtures/canvas_responses/module.json +0 -0
  403. data/spec/support/fixtures/canvas_responses/module_item.json +0 -0
  404. data/spec/support/fixtures/canvas_responses/roles.json +0 -0
  405. data/spec/support/fixtures/canvas_responses/terms.json +0 -0
  406. data/spec/support/fixtures/reports/assignment_groups.csv +0 -0
  407. data/spec/support/fixtures/reports/assignment_overrides.csv +3 -0
  408. data/spec/support/fixtures/reports/assignment_overrides_conflict.csv +2 -0
  409. data/spec/support/fixtures/reports/assignments.csv +0 -0
  410. data/spec/support/fixtures/reports/content_migrations.csv +0 -0
  411. data/spec/support/fixtures/reports/context_module_items.csv +0 -0
  412. data/spec/support/fixtures/reports/context_modules.csv +0 -0
  413. data/spec/support/fixtures/reports/course_nicknames.csv +0 -0
  414. data/spec/support/fixtures/reports/course_progresses.csv +0 -0
  415. data/spec/support/fixtures/reports/course_progresses_conflict.csv +0 -0
  416. data/spec/support/fixtures/reports/courses.csv +0 -0
  417. data/spec/support/fixtures/reports/enrollments.csv +0 -0
  418. data/spec/support/fixtures/reports/grading_period_groups.csv +0 -0
  419. data/spec/support/fixtures/reports/grading_periods.csv +0 -0
  420. data/spec/support/fixtures/reports/group_memberships.csv +0 -0
  421. data/spec/support/fixtures/reports/groups.csv +0 -0
  422. data/spec/support/fixtures/reports/learning_outcome_results.csv +0 -0
  423. data/spec/support/fixtures/reports/learning_outcomes.csv +0 -0
  424. data/spec/support/fixtures/reports/provisioning_csv +0 -0
  425. data/spec/support/fixtures/reports/rubric_assessments.csv +0 -0
  426. data/spec/support/fixtures/reports/rubric_associations.csv +0 -0
  427. data/spec/support/fixtures/reports/rubrics.csv +0 -0
  428. data/spec/support/fixtures/reports/sections.csv +0 -0
  429. data/spec/support/fixtures/reports/submissions.csv +0 -0
  430. data/spec/support/fixtures/reports/user_observers.csv +0 -0
  431. data/spec/support/fixtures/reports/users.csv +0 -0
  432. data/spec/support/fixtures/reports/xlist.csv +0 -0
  433. metadata +208 -211
  434. data/lib/canvas_sync/concerns/auto_relations.rb +0 -11
  435. data/spec/support/fixtures/reports/provisioning_csv_unzipped/courses.csv +0 -3
  436. data/spec/support/fixtures/reports/provisioning_csv_unzipped/users.csv +0 -4
@@ -2,6 +2,18 @@ require 'spec_helper'
2
2
 
3
3
  RSpec.describe CanvasSync do
4
4
  describe '.provisioning_sync' do
5
+ it 'invokes the first job in the queue and passes on the rest of the job chain' do
6
+ expected_job_chain = CanvasSync.default_provisioning_report_chain(['courses'], term_scope: nil).normalize![:args][0]
7
+
8
+ expect(CanvasSync::Jobs::BeginSyncChainJob).to receive(:perform_later)
9
+ .with(
10
+ expected_job_chain,
11
+ anything
12
+ )
13
+
14
+ CanvasSync.provisioning_sync(['courses'])
15
+ end
16
+
5
17
  context 'an invalid model is passed in' do
6
18
  it 'raises a helpful exception' do
7
19
  expect {
@@ -18,25 +30,22 @@ RSpec.describe CanvasSync do
18
30
  provisioning: { c: 3 },
19
31
  global: { d: 4 },
20
32
  })
21
- expect(chain.normalize!).to match({
33
+ expect(chain.normalize!).to eq({
22
34
  :job => "CanvasSync::Jobs::BeginSyncChainJob",
23
- :chain_link=>String,
24
35
  :args => [
25
36
  [
26
37
  {
27
38
  :job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
28
- :chain_link=>String,
29
39
  :args=>[
30
40
  [
31
- {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users"], :b=>2}},
41
+ {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users"], :b=>2}},
32
42
  {
33
43
  :job=>"CanvasSync::Jobs::SyncTermsJob",
34
- :chain_link=>String,
35
44
  :args=>[],
36
45
  :kwargs=>{
37
46
  :term_scope=>"active",
38
47
  :sub_jobs=>[
39
- {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"], :c=>3}},
48
+ {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"], :c=>3}},
40
49
  ],
41
50
  },
42
51
  },
@@ -53,23 +62,20 @@ RSpec.describe CanvasSync do
53
62
  context 'we are syncing users with a term scope' do
54
63
  it 'syncs the users in a separate job that runs first' do
55
64
  chain = CanvasSync.default_provisioning_report_chain(['users', 'courses'], term_scope: :active)
56
- expect(chain.normalize!).to match({
65
+ expect(chain.normalize!).to eq({
57
66
  :job => "CanvasSync::Jobs::BeginSyncChainJob",
58
- :chain_link=>String,
59
67
  :args => [[
60
68
  {
61
69
  :job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
62
- :chain_link=>String,
63
70
  :args=>[
64
71
  [
65
- {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users"]}},
72
+ {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users"]}},
66
73
  {
67
74
  :job=>"CanvasSync::Jobs::SyncTermsJob",
68
- :chain_link=>String,
69
75
  :args=>[],
70
76
  :kwargs=>{
71
77
  :sub_jobs=>[
72
- {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"]}}
78
+ {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"]}}
73
79
  ],
74
80
  :term_scope=>"active",
75
81
  }
@@ -87,20 +93,17 @@ RSpec.describe CanvasSync do
87
93
  context 'we are syncing users without a term scope' do
88
94
  it 'syncs users along with the rest of the provisioning report' do
89
95
  chain = CanvasSync.default_provisioning_report_chain(['users', 'courses'])
90
- expect(chain.normalize!).to match({
96
+ expect(chain.normalize!).to eq({
91
97
  :job => "CanvasSync::Jobs::BeginSyncChainJob",
92
- :chain_link=>String,
93
98
  :args => [[
94
99
  {
95
100
  :job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
96
- :chain_link=>String,
97
101
  :args=>[[
98
102
  {
99
103
  :job=>"CanvasSync::Jobs::SyncTermsJob",
100
- :chain_link=>String,
101
104
  :args=>[],
102
105
  :kwargs=>{
103
- :sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users", "courses"]}}],
106
+ :sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users", "courses"]}}],
104
107
  :term_scope=>nil,
105
108
  }
106
109
  }
@@ -116,21 +119,18 @@ RSpec.describe CanvasSync do
116
119
  context 'we are syncing roles with a term scope' do
117
120
  it 'syncs the roles in a separate job that runs first' do
118
121
  chain = CanvasSync.default_provisioning_report_chain(['roles', 'courses'], term_scope: :active)
119
- expect(chain.normalize!).to match({
122
+ expect(chain.normalize!).to eq({
120
123
  :job => "CanvasSync::Jobs::BeginSyncChainJob",
121
- :chain_link=>String,
122
124
  :args => [[
123
125
  {
124
126
  :job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
125
- :chain_link=>String,
126
127
  :args=>[[
127
- {:job=>"CanvasSync::Jobs::SyncRolesJob", :chain_link=>String, :options=>{}},
128
+ {:job=>"CanvasSync::Jobs::SyncRolesJob", :options=>{}},
128
129
  {
129
130
  :job=>"CanvasSync::Jobs::SyncTermsJob",
130
- :chain_link=>String,
131
131
  :args=>[],
132
132
  :kwargs=>{
133
- :sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"]}}],
133
+ :sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"]}}],
134
134
  :term_scope=>"active",
135
135
  }
136
136
  },
@@ -146,21 +146,18 @@ RSpec.describe CanvasSync do
146
146
  context 'we are syncing roles without a term scope' do
147
147
  it 'syncs roles separately even with no term scope' do
148
148
  chain = CanvasSync.default_provisioning_report_chain(['roles', 'courses'])
149
- expect(chain.normalize!).to match({
149
+ expect(chain.normalize!).to eq({
150
150
  :job => "CanvasSync::Jobs::BeginSyncChainJob",
151
- :chain_link=>String,
152
151
  :args => [[
153
152
  {
154
153
  :job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
155
- :chain_link=>String,
156
154
  :args=>[[
157
- {:job=>"CanvasSync::Jobs::SyncRolesJob", :chain_link=>String, :options=>{}},
155
+ {:job=>"CanvasSync::Jobs::SyncRolesJob", :options=>{}},
158
156
  {
159
157
  :job=>"CanvasSync::Jobs::SyncTermsJob",
160
- :chain_link=>String,
161
158
  :args=>[],
162
159
  :kwargs=>{
163
- :sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"]}}],
160
+ :sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"]}}],
164
161
  :term_scope=>nil,
165
162
  }
166
163
  }
@@ -176,21 +173,18 @@ RSpec.describe CanvasSync do
176
173
  context 'we are syncing admins with a term scope' do
177
174
  it 'syncs the admins in a separate job that runs first' do
178
175
  chain = CanvasSync.default_provisioning_report_chain(['admins', 'courses'], term_scope: :active)
179
- expect(chain.normalize!).to match({
176
+ expect(chain.normalize!).to eq({
180
177
  :job => "CanvasSync::Jobs::BeginSyncChainJob",
181
- :chain_link=>String,
182
178
  :args => [[
183
179
  {
184
180
  :job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
185
- :chain_link=>String,
186
181
  :args=>[[
187
- {:job=>"CanvasSync::Jobs::SyncAdminsJob", :chain_link=>String, :options=>{}},
182
+ {:job=>"CanvasSync::Jobs::SyncAdminsJob", :options=>{}},
188
183
  {
189
184
  :job=>"CanvasSync::Jobs::SyncTermsJob",
190
- :chain_link=>String,
191
185
  :args=>[],
192
186
  :kwargs=>{
193
- :sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"]}}],
187
+ :sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"]}}],
194
188
  :term_scope=>"active"
195
189
  }
196
190
  }
@@ -206,21 +200,18 @@ RSpec.describe CanvasSync do
206
200
  context 'we are syncing admins without a term scope' do
207
201
  it 'syncs admins separately even with no term scope' do
208
202
  chain = CanvasSync.default_provisioning_report_chain(['admins', 'courses'])
209
- expect(chain.normalize!).to match({
203
+ expect(chain.normalize!).to eq({
210
204
  :job => "CanvasSync::Jobs::BeginSyncChainJob",
211
- :chain_link=>String,
212
205
  :args => [[
213
206
  {
214
207
  :job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
215
- :chain_link=>String,
216
208
  :args=>[[
217
- {:job=>"CanvasSync::Jobs::SyncAdminsJob", :chain_link=>String, :options=>{}},
209
+ {:job=>"CanvasSync::Jobs::SyncAdminsJob", :options=>{}},
218
210
  {
219
211
  :job=>"CanvasSync::Jobs::SyncTermsJob",
220
- :chain_link=>String,
221
212
  :args=>[],
222
213
  :kwargs=>{
223
- :sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"]}}],
214
+ :sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"]}}],
224
215
  :term_scope=>nil
225
216
  }
226
217
  }
@@ -237,22 +228,19 @@ RSpec.describe CanvasSync do
237
228
  it "appends the SyncAssignmentsJob" do
238
229
  chain = CanvasSync.default_provisioning_report_chain(%w[users enrollments assignments])
239
230
 
240
- expect(chain.normalize!).to match({
231
+ expect(chain.normalize!).to eq({
241
232
  :job => "CanvasSync::Jobs::BeginSyncChainJob",
242
- :chain_link=>String,
243
233
  :args => [[
244
234
  {
245
235
  :job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
246
- :chain_link=>String,
247
236
  :args=>[[
248
237
  {
249
238
  :job=>"CanvasSync::Jobs::SyncTermsJob",
250
- :chain_link=>String,
251
239
  :args=>[],
252
240
  :kwargs=>{
253
241
  :sub_jobs=>[
254
- {:job=>"CanvasSync::Jobs::SyncAssignmentsJob", :chain_link=>String, :options=>{}},
255
- {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users", "enrollments"]}}
242
+ {:job=>"CanvasSync::Jobs::SyncAssignmentsJob", :options=>{}},
243
+ {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users", "enrollments"]}}
256
244
  ],
257
245
  :term_scope=>nil
258
246
  }
@@ -270,22 +258,19 @@ RSpec.describe CanvasSync do
270
258
  it "appends the SyncSubmissionsJob" do
271
259
  chain = CanvasSync.default_provisioning_report_chain(%w[users enrollments submissions])
272
260
 
273
- expect(chain.normalize!).to match({
261
+ expect(chain.normalize!).to eq({
274
262
  :job => "CanvasSync::Jobs::BeginSyncChainJob",
275
- :chain_link=>String,
276
263
  :args => [[
277
264
  {
278
265
  :job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
279
- :chain_link=>String,
280
266
  :args=>[[
281
267
  {
282
268
  :job=>"CanvasSync::Jobs::SyncTermsJob",
283
- :chain_link=>String,
284
269
  :args=>[],
285
270
  :kwargs=>{
286
271
  :sub_jobs=>[
287
- {:job=>"CanvasSync::Jobs::SyncSubmissionsJob", :chain_link=>String, :options=>{}},
288
- {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users", "enrollments"]}}
272
+ {:job=>"CanvasSync::Jobs::SyncSubmissionsJob", :options=>{}},
273
+ {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users", "enrollments"]}}
289
274
  ],
290
275
  :term_scope=>nil
291
276
  }
@@ -303,22 +288,19 @@ RSpec.describe CanvasSync do
303
288
  it "appends the SyncAssignmentGroupsJob" do
304
289
  chain = CanvasSync.default_provisioning_report_chain(%w[users enrollments assignment_groups])
305
290
 
306
- expect(chain.normalize!).to match({
291
+ expect(chain.normalize!).to eq({
307
292
  :job => "CanvasSync::Jobs::BeginSyncChainJob",
308
- :chain_link=>String,
309
293
  :args => [[
310
294
  {
311
295
  :job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
312
- :chain_link=>String,
313
296
  :args=>[[
314
297
  {
315
298
  :job=>"CanvasSync::Jobs::SyncTermsJob",
316
- :chain_link=>String,
317
299
  :args=>[],
318
300
  :kwargs=>{
319
301
  :sub_jobs=>[
320
- {:job=>"CanvasSync::Jobs::SyncAssignmentGroupsJob", :chain_link=>String, :options=>{}},
321
- {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users", "enrollments"]}}
302
+ {:job=>"CanvasSync::Jobs::SyncAssignmentGroupsJob", :options=>{}},
303
+ {:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users", "enrollments"]}}
322
304
  ],
323
305
  :term_scope=>nil
324
306
  }
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
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
File without changes
File without changes
@@ -0,0 +1,45 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe CanvasSync::Processors::AssignmentOverridesProcessor do
4
+ describe '#process' do
5
+ it 'inserts assignment overrides' do
6
+ expect {
7
+ described_class.process('spec/support/fixtures/reports/assignment_overrides.csv', {}, 1)
8
+ }.to change { AssignmentOverride.count }.by(2)
9
+
10
+ override = AssignmentOverride.first
11
+ expect(override).to have_attributes(
12
+ canvas_id: 1,
13
+ canvas_assignment_id: 1,
14
+ student_ids: [1, 2],
15
+ canvas_group_id: nil,
16
+ canvas_section_id: nil,
17
+ canvas_course_id: 1,
18
+ title: "Override 1",
19
+ workflow_state: "active"
20
+ )
21
+ expect(override.due_at.strftime('%Y-%m-%d %H:%M:%S')).to eq('2024-05-01 09:00:00')
22
+ end
23
+
24
+ context 'record already present in the database' do
25
+ before do
26
+ described_class.process('spec/support/fixtures/reports/assignment_overrides.csv', {}, 1)
27
+ end
28
+
29
+ it 'updates the override' do
30
+ expect {
31
+ described_class.process('spec/support/fixtures/reports/assignment_overrides_conflict.csv', {}, 1)
32
+ }.to change { AssignmentOverride.count }.by(0)
33
+
34
+ override = AssignmentOverride.first
35
+ expect(override).to have_attributes(
36
+ canvas_id: 1,
37
+ student_ids: [1, 2, 3],
38
+ title: "Override 1 Updated",
39
+ workflow_state: "active"
40
+ )
41
+ expect(override.due_at.strftime('%Y-%m-%d %H:%M:%S')).to eq('2024-06-01 09:00:00')
42
+ end
43
+ end
44
+ end
45
+ end
File without changes
@@ -12,6 +12,10 @@ RSpec.describe CanvasSync::Processors::ProvisioningReportProcessor do
12
12
 
13
13
  context "with User#sis_id column" do
14
14
  before do
15
+ # this could be refactored into a method that prevents caching the variables unless the environment is prod
16
+ CanvasSync::Concerns::SyncMapping::Mapping.instance_variable_set(:@mappings, nil)
17
+ CanvasSync::Concerns::SyncMapping::Mapping.instance_variable_set(:@legacy_mappings, nil)
18
+
15
19
  self.use_transactional_tests = false
16
20
  ActiveRecord::Migration.add_column :users, :sis_id, :string
17
21
  User.reset_column_information
File without changes
File without changes
File without changes
data/spec/dummy/Rakefile CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,34 @@
1
+ # #
2
+ # AUTO GENERATED MODEL
3
+ # This model was auto generated by the CanvasSync Gem.
4
+ # You can customize it as needed, but make sure you test
5
+ # any changes you make to the auto generated methods.
6
+ #
7
+
8
+
9
+ class AssignmentOverride < ApplicationRecord
10
+ include CanvasSync::Record
11
+ include CanvasSync::Concerns::ApiSyncable
12
+
13
+ canvas_sync_features :defaults
14
+
15
+ validates :canvas_id, uniqueness: true, presence: true
16
+ belongs_to :assignment, primary_key: :canvas_id, foreign_key: :canvas_assignment_id, optional: true
17
+ belongs_to :course, primary_key: :canvas_id, foreign_key: :canvas_course_id, optional: true
18
+
19
+ api_syncable({
20
+ canvas_id: :id,
21
+ canvas_assignment_id: :assignment_id,
22
+ title: :title,
23
+ workflow_state: :workflow_state,
24
+ due_at: :due_at,
25
+ all_day: :all_day,
26
+ all_day_date: :all_day_date,
27
+ unlock_at: :unlock_at,
28
+ lock_at: :lock_at,
29
+ student_ids: ->(r) { JSON.parse(r[:student_ids]) if r[:student_ids].present? },
30
+ canvas_group_id: :group_id,
31
+ canvas_section_id: :course_section_id,
32
+ canvas_course_id: -> (r) { r.dig(:assignment, :course_id) }
33
+ }, -> (api) { api.assignment_override(canvas_assignment_id, canvas_id) })
34
+ 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
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