canvas_sync 0.22.4 → 0.22.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -0
- data/Rakefile +0 -0
- data/app/controllers/canvas_sync/api/v1/health_check_controller.rb +0 -0
- data/app/controllers/canvas_sync/api/v1/live_events_controller.rb +0 -0
- data/app/models/canvas_sync/job_log.rb +5 -1
- data/app/models/canvas_sync/sync_batch.rb +0 -1
- data/config/initializers/apartment.rb +0 -0
- data/config/routes.rb +0 -0
- data/db/migrate/20170915210836_create_canvas_sync_job_log.rb +0 -0
- data/db/migrate/20180725155729_add_job_id_to_canvas_sync_job_logs.rb +0 -0
- data/db/migrate/20190916154829_add_fork_count_to_canvas_sync_job_logs.rb +0 -0
- data/db/migrate/20201018210836_create_canvas_sync_sync_batches.rb +0 -0
- data/db/migrate/20201030210836_add_full_sync_to_canvas_sync_sync_batch.rb +0 -0
- data/lib/canvas_sync/api_syncable.rb +0 -0
- data/lib/canvas_sync/batch_processor.rb +0 -0
- data/lib/canvas_sync/class_callback_executor.rb +0 -0
- data/lib/canvas_sync/concerns/ability_helper.rb +0 -0
- data/lib/canvas_sync/concerns/account/ancestry.rb +0 -0
- data/lib/canvas_sync/concerns/account/base.rb +0 -0
- data/lib/canvas_sync/concerns/api_syncable.rb +0 -0
- data/lib/canvas_sync/concerns/auto_relations.rb +11 -0
- data/lib/canvas_sync/concerns/legacy_columns.rb +0 -0
- data/lib/canvas_sync/concerns/live_event_sync.rb +0 -0
- data/lib/canvas_sync/concerns/role/base.rb +0 -0
- data/lib/canvas_sync/concerns/sync_mapping.rb +0 -0
- data/lib/canvas_sync/config.rb +0 -0
- data/lib/canvas_sync/engine.rb +0 -0
- data/lib/canvas_sync/generators/install_generator.rb +0 -0
- data/lib/canvas_sync/generators/install_live_events_generator.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_accounts.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_admins.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_assignment_groups.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_assignments.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_content_migrations.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_context_module_items.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_context_modules.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_course_nicknames.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_course_progresses.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_courses.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_enrollments.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_grading_period_groups.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_grading_periods.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_group_memberships.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_groups.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_learning_outcome_results.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_learning_outcomes.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_pseudonyms.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_roles.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_rubric_assessments.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_rubric_associations.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_rubrics.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_sections.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_submissions.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_terms.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_user_observers.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_users.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/account.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/admin.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/assignment.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/assignment_group.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/content_migration.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/context_module.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/context_module_item.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/course.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/course_nickname.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/course_progress.rb +8 -0
- data/lib/canvas_sync/generators/templates/models/enrollment.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/grading_period.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/grading_period_group.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/group.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/group_membership.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/learning_outcome.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/learning_outcome_result.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/pseudonym.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/role.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/rubric.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/rubric_assessment.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/rubric_association.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/section.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/submission.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/term.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/user.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/user_observer.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/assignment_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/assignment_group_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/course_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/course_section_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/enrollment_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/grade_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/module_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/module_item_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/submission_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/syllabus_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/user_event.rb +0 -0
- data/lib/canvas_sync/importers/bulk_importer.rb +0 -0
- data/lib/canvas_sync/importers/legacy_importer.rb +0 -0
- data/lib/canvas_sync/job.rb +0 -0
- data/lib/canvas_sync/job_batches/batch.rb +22 -18
- data/lib/canvas_sync/job_batches/callback.rb +0 -0
- data/lib/canvas_sync/job_batches/chain_builder.rb +24 -3
- data/lib/canvas_sync/job_batches/compat/active_job.rb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/css/styles.less +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/batch_tree.js +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/util.js +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/helpers.rb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batch_tree.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batches_table.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_common.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_jobs_table.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_pagination.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batch.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batches.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pool.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pools.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web.rb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq.rb +0 -0
- data/lib/canvas_sync/job_batches/compat.rb +0 -0
- data/lib/canvas_sync/job_batches/context_hash.rb +0 -0
- data/lib/canvas_sync/job_batches/hier_batch_ids.lua +0 -0
- data/lib/canvas_sync/job_batches/jobs/base_job.rb +0 -0
- data/lib/canvas_sync/job_batches/jobs/concurrent_batch_job.rb +0 -0
- data/lib/canvas_sync/job_batches/jobs/managed_batch_job.rb +4 -0
- data/lib/canvas_sync/job_batches/jobs/serial_batch_job.rb +0 -0
- data/lib/canvas_sync/job_batches/pool.rb +0 -0
- data/lib/canvas_sync/job_batches/pool_refill.lua +0 -0
- data/lib/canvas_sync/job_batches/redis_model.rb +0 -0
- data/lib/canvas_sync/job_batches/redis_script.rb +0 -0
- data/lib/canvas_sync/job_batches/schedule_callback.lua +0 -0
- data/lib/canvas_sync/job_batches/status.rb +1 -0
- data/lib/canvas_sync/job_uniqueness/compat/active_job.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/compat/sidekiq.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/compat.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/configuration.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/job_uniqueness.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/lock_context.rb +41 -7
- data/lib/canvas_sync/job_uniqueness/locksmith.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/base.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/log.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/null_strategy.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/raise.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/reject.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/reschedule.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/base.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/until_and_while_executing.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/until_executed.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/until_executing.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/until_expired.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/while_executing.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/unique_job_common.rb +0 -0
- data/lib/canvas_sync/jobs/begin_sync_chain_job.rb +0 -0
- data/lib/canvas_sync/jobs/canvas_process_waiter.rb +0 -0
- data/lib/canvas_sync/jobs/report_checker.rb +0 -0
- data/lib/canvas_sync/jobs/report_processor_job.rb +0 -0
- data/lib/canvas_sync/jobs/report_starter.rb +0 -0
- data/lib/canvas_sync/jobs/sync_accounts_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_admins_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_assignment_groups_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_assignments_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_content_migrations_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_context_module_items_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_context_modules_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_course_progresses_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_provisioning_report_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_roles_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_rubric_assessments_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_rubric_associations_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_rubrics_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_simple_table_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_submissions_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_terms_job.rb +0 -0
- data/lib/canvas_sync/jobs/term_batches_job.rb +4 -1
- data/lib/canvas_sync/live_events/base_handler.rb +0 -0
- data/lib/canvas_sync/live_events/process_event_job.rb +0 -0
- data/lib/canvas_sync/live_events.rb +0 -0
- data/lib/canvas_sync/misc_helper.rb +0 -0
- data/lib/canvas_sync/processors/assignment_groups_processor.rb +0 -0
- data/lib/canvas_sync/processors/assignments_processor.rb +0 -0
- data/lib/canvas_sync/processors/content_migrations_processor.rb +0 -0
- data/lib/canvas_sync/processors/context_module_items_processor.rb +0 -0
- data/lib/canvas_sync/processors/context_modules_processor.rb +0 -0
- data/lib/canvas_sync/processors/course_completion_report_processor.rb +0 -0
- data/lib/canvas_sync/processors/model_mappings.yml +0 -0
- data/lib/canvas_sync/processors/normal_processor.rb +0 -0
- data/lib/canvas_sync/processors/provisioning_report_processor.rb +0 -0
- data/lib/canvas_sync/processors/report_processor.rb +0 -0
- data/lib/canvas_sync/processors/rubric_assessments_processor.rb +0 -0
- data/lib/canvas_sync/processors/rubric_associations_processor.rb +0 -0
- data/lib/canvas_sync/processors/rubrics_processor.rb +0 -0
- data/lib/canvas_sync/processors/submissions_processor.rb +0 -0
- data/lib/canvas_sync/record.rb +0 -0
- data/lib/canvas_sync/sidekiq_job.rb +0 -0
- data/lib/canvas_sync/version.rb +1 -1
- data/lib/canvas_sync.rb +0 -0
- data/spec/canvas_sync/canvas_sync_spec.rb +59 -41
- data/spec/canvas_sync/jobs/canvas_process_waiter_spec.rb +0 -0
- data/spec/canvas_sync/jobs/job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/report_checker_spec.rb +0 -0
- data/spec/canvas_sync/jobs/report_processor_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/report_starter_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_admins_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_assignment_groups_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_assignments_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_content_migrations_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_context_module_items_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_context_modules_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_provisioning_report_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_roles_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_simple_table_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_submissions_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_terms_job_spec.rb +0 -0
- data/spec/canvas_sync/live_events/live_event_sync_spec.rb +0 -0
- data/spec/canvas_sync/live_events/live_events_controller_spec.rb +0 -0
- data/spec/canvas_sync/live_events/process_event_job_spec.rb +0 -0
- data/spec/canvas_sync/misc_helper_spec.rb +0 -0
- data/spec/canvas_sync/models/accounts_spec.rb +0 -0
- data/spec/canvas_sync/models/admins_spec.rb +0 -0
- data/spec/canvas_sync/models/assignment_group_spec.rb +0 -0
- data/spec/canvas_sync/models/assignment_spec.rb +0 -0
- data/spec/canvas_sync/models/context_module_item_spec.rb +0 -0
- data/spec/canvas_sync/models/context_module_spec.rb +0 -0
- data/spec/canvas_sync/models/course_spec.rb +0 -0
- data/spec/canvas_sync/models/enrollment_spec.rb +0 -0
- data/spec/canvas_sync/models/group_membership_spec.rb +0 -0
- data/spec/canvas_sync/models/group_spec.rb +0 -0
- data/spec/canvas_sync/models/roles_spec.rb +0 -0
- data/spec/canvas_sync/models/section_spec.rb +0 -0
- data/spec/canvas_sync/models/submission_spec.rb +0 -0
- data/spec/canvas_sync/models/term_spec.rb +0 -0
- data/spec/canvas_sync/models/user_spec.rb +0 -0
- data/spec/canvas_sync/processors/assignment_groups_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/assignments_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/content_migrations_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/context_module_items_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/context_modules_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/course_completion_report_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/normal_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/provisioning_report_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/rubric_assessments_spec.rb +0 -0
- data/spec/canvas_sync/processors/rubric_associations_spec.rb +0 -0
- data/spec/canvas_sync/processors/rubrics_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/submissions_processor_spec.rb +0 -0
- data/spec/canvas_sync/services/module_event_spec.rb +0 -0
- data/spec/canvas_sync/services/module_item_event_spec.rb +0 -0
- data/spec/dummy/README.rdoc +0 -0
- data/spec/dummy/Rakefile +0 -0
- data/spec/dummy/app/models/account.rb +0 -0
- data/spec/dummy/app/models/admin.rb +0 -0
- data/spec/dummy/app/models/application_record.rb +0 -0
- data/spec/dummy/app/models/assignment.rb +0 -0
- data/spec/dummy/app/models/assignment_group.rb +0 -0
- data/spec/dummy/app/models/content_migration.rb +0 -0
- data/spec/dummy/app/models/context_module.rb +0 -0
- data/spec/dummy/app/models/context_module_item.rb +0 -0
- data/spec/dummy/app/models/course.rb +0 -0
- data/spec/dummy/app/models/course_nickname.rb +0 -0
- data/spec/dummy/app/models/course_progress.rb +8 -0
- data/spec/dummy/app/models/enrollment.rb +0 -0
- data/spec/dummy/app/models/grading_period.rb +0 -0
- data/spec/dummy/app/models/grading_period_group.rb +0 -0
- data/spec/dummy/app/models/group.rb +0 -0
- data/spec/dummy/app/models/group_membership.rb +0 -0
- data/spec/dummy/app/models/learning_outcome.rb +0 -0
- data/spec/dummy/app/models/learning_outcome_result.rb +0 -0
- data/spec/dummy/app/models/pseudonym.rb +0 -0
- data/spec/dummy/app/models/role.rb +0 -0
- data/spec/dummy/app/models/rubric.rb +0 -0
- data/spec/dummy/app/models/rubric_assessment.rb +0 -0
- data/spec/dummy/app/models/rubric_association.rb +0 -0
- data/spec/dummy/app/models/section.rb +0 -0
- data/spec/dummy/app/models/submission.rb +0 -0
- data/spec/dummy/app/models/term.rb +0 -0
- data/spec/dummy/app/models/user.rb +0 -0
- data/spec/dummy/app/models/user_observer.rb +0 -0
- data/spec/dummy/app/services/live_events/assignment_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/assignment_event.rb +0 -0
- data/spec/dummy/app/services/live_events/assignment_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/base_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_section_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_section_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_section_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/enrollment_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/enrollment_event.rb +0 -0
- data/spec/dummy/app/services/live_events/enrollment_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/grade_changed_event.rb +0 -0
- data/spec/dummy/app/services/live_events/grade_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_item_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_item_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_item_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/submission_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/submission_event.rb +0 -0
- data/spec/dummy/app/services/live_events/submission_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/syllabus_event.rb +0 -0
- data/spec/dummy/app/services/live_events/syllabus_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/user_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/user_event.rb +0 -0
- data/spec/dummy/app/services/live_events/user_updated_event.rb +0 -0
- data/spec/dummy/config/application.rb +0 -0
- data/spec/dummy/config/boot.rb +0 -0
- data/spec/dummy/config/database.yml +0 -0
- data/spec/dummy/config/environment.rb +0 -0
- data/spec/dummy/config/environments/development.rb +0 -0
- data/spec/dummy/config/environments/test.rb +0 -0
- data/spec/dummy/config/initializers/assets.rb +0 -0
- data/spec/dummy/config/initializers/session_store.rb +0 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +0 -0
- data/spec/dummy/config/routes.rb +0 -0
- data/spec/dummy/config/secrets.yml +0 -0
- data/spec/dummy/config.ru +0 -0
- data/spec/dummy/db/migrate/20190702203621_create_courses.rb +0 -0
- data/spec/dummy/db/migrate/20190702203622_create_accounts.rb +0 -0
- data/spec/dummy/db/migrate/20190702203623_create_terms.rb +0 -0
- data/spec/dummy/db/migrate/20190702203624_create_enrollments.rb +0 -0
- data/spec/dummy/db/migrate/20190702203625_create_sections.rb +0 -0
- data/spec/dummy/db/migrate/20190702203626_create_assignments.rb +0 -0
- data/spec/dummy/db/migrate/20190702203627_create_submissions.rb +0 -0
- data/spec/dummy/db/migrate/20190702203630_create_assignment_groups.rb +0 -0
- data/spec/dummy/db/migrate/20190702203631_create_context_modules.rb +0 -0
- data/spec/dummy/db/migrate/20190702203632_create_context_module_items.rb +0 -0
- data/spec/dummy/db/migrate/20190927204545_create_roles.rb +0 -0
- data/spec/dummy/db/migrate/20190927204546_create_admins.rb +0 -0
- data/spec/dummy/db/migrate/20200415171620_create_groups.rb +0 -0
- data/spec/dummy/db/migrate/20200416214248_create_group_memberships.rb +0 -0
- data/spec/dummy/db/migrate/20201016181346_create_pseudonyms.rb +0 -0
- data/spec/dummy/db/migrate/20210907233329_create_user_observers.rb +0 -0
- data/spec/dummy/db/migrate/20210907233330_create_grading_periods.rb +0 -0
- data/spec/dummy/db/migrate/20211001184920_create_grading_period_groups.rb +0 -0
- data/spec/dummy/db/migrate/20220308072643_create_content_migrations.rb +0 -0
- data/spec/dummy/db/migrate/20220712210559_create_learning_outcomes.rb +0 -0
- data/spec/dummy/db/migrate/20220926221926_create_users.rb +0 -0
- data/spec/dummy/db/migrate/20240408223326_create_course_nicknames.rb +0 -0
- data/spec/dummy/db/migrate/20240509105100_create_rubrics.rb +0 -0
- data/spec/dummy/db/migrate/20240510094100_create_rubric_associations.rb +0 -0
- data/spec/dummy/db/migrate/20240510101100_create_rubric_assessments.rb +0 -0
- data/spec/dummy/db/migrate/20240523101010_create_learning_outcome_results.rb +0 -0
- data/spec/dummy/db/migrate/20240828161300_create_course_progresses.rb +0 -0
- data/spec/dummy/db/schema.rb +0 -0
- data/spec/factories/account_factory.rb +0 -0
- data/spec/factories/admin_factory.rb +0 -0
- data/spec/factories/assignment_factory.rb +0 -0
- data/spec/factories/assignment_group_factory.rb +0 -0
- data/spec/factories/context_module_factory.rb +0 -0
- data/spec/factories/context_module_item_factory.rb +0 -0
- data/spec/factories/course_factory.rb +0 -0
- data/spec/factories/enrollment_factory.rb +0 -0
- data/spec/factories/group_factory.rb +0 -0
- data/spec/factories/group_membership_factory.rb +0 -0
- data/spec/factories/role_factory.rb +0 -0
- data/spec/factories/section_factory.rb +0 -0
- data/spec/factories/submission_factory.rb +0 -0
- data/spec/factories/term_factory.rb +0 -0
- data/spec/factories/user_factory.rb +0 -0
- data/spec/job_batching/batch_spec.rb +0 -0
- data/spec/job_batching/callback_spec.rb +0 -0
- data/spec/job_batching/compat/active_job_spec.rb +0 -0
- data/spec/job_batching/compat/sidekiq_spec.rb +0 -0
- data/spec/job_batching/context_hash_spec.rb +0 -0
- data/spec/job_batching/flow_spec.rb +0 -0
- data/spec/job_batching/integration/fail_then_succeed.rb +0 -0
- data/spec/job_batching/integration/integration.rb +0 -0
- data/spec/job_batching/integration/nested.rb +0 -0
- data/spec/job_batching/integration/simple.rb +0 -0
- data/spec/job_batching/integration/workflow.rb +0 -0
- data/spec/job_batching/integration_helper.rb +0 -0
- data/spec/job_batching/pool_spec.rb +0 -0
- data/spec/job_batching/status_spec.rb +0 -0
- data/spec/job_batching/support/base_job.rb +0 -0
- data/spec/job_batching/support/sample_callback.rb +0 -0
- data/spec/job_uniqueness/compat/active_job_spec.rb +0 -0
- data/spec/job_uniqueness/compat/sidekiq_spec.rb +0 -0
- data/spec/job_uniqueness/lock_context_spec.rb +11 -0
- data/spec/job_uniqueness/on_conflict/log_spec.rb +0 -0
- data/spec/job_uniqueness/on_conflict/raise_spec.rb +0 -0
- data/spec/job_uniqueness/on_conflict/reschedule_spec.rb +0 -0
- data/spec/job_uniqueness/on_conflict_spec.rb +0 -0
- data/spec/job_uniqueness/spec_helper.rb +0 -0
- data/spec/job_uniqueness/strategy/base_spec.rb +0 -0
- data/spec/job_uniqueness/strategy/until_and_while_executing_spec.rb +0 -0
- data/spec/job_uniqueness/strategy/until_executed_spec.rb +0 -0
- data/spec/job_uniqueness/strategy/until_executing_spec.rb +0 -0
- data/spec/job_uniqueness/strategy/until_expired_spec.rb +0 -0
- data/spec/job_uniqueness/strategy/while_executing_spec.rb +0 -0
- data/spec/job_uniqueness/support/lock_strategy.rb +0 -0
- data/spec/job_uniqueness/support/on_conflict.rb +0 -0
- data/spec/job_uniqueness/support/test_worker.rb +0 -0
- data/spec/job_uniqueness/unique_job_common_spec.rb +0 -0
- data/spec/spec_helper.rb +0 -0
- data/spec/support/fake_canvas.rb +0 -0
- data/spec/support/fixtures/canvas_responses/admins.json +0 -0
- data/spec/support/fixtures/canvas_responses/module.json +0 -0
- data/spec/support/fixtures/canvas_responses/module_item.json +0 -0
- data/spec/support/fixtures/canvas_responses/roles.json +0 -0
- data/spec/support/fixtures/canvas_responses/terms.json +0 -0
- data/spec/support/fixtures/reports/assignment_groups.csv +0 -0
- data/spec/support/fixtures/reports/assignments.csv +0 -0
- data/spec/support/fixtures/reports/content_migrations.csv +0 -0
- data/spec/support/fixtures/reports/context_module_items.csv +0 -0
- data/spec/support/fixtures/reports/context_modules.csv +0 -0
- data/spec/support/fixtures/reports/course_nicknames.csv +0 -0
- data/spec/support/fixtures/reports/course_progresses.csv +0 -0
- data/spec/support/fixtures/reports/course_progresses_conflict.csv +0 -0
- data/spec/support/fixtures/reports/courses.csv +0 -0
- data/spec/support/fixtures/reports/enrollments.csv +0 -0
- data/spec/support/fixtures/reports/grading_period_groups.csv +0 -0
- data/spec/support/fixtures/reports/grading_periods.csv +0 -0
- data/spec/support/fixtures/reports/group_memberships.csv +0 -0
- data/spec/support/fixtures/reports/groups.csv +0 -0
- data/spec/support/fixtures/reports/learning_outcome_results.csv +0 -0
- data/spec/support/fixtures/reports/learning_outcomes.csv +0 -0
- data/spec/support/fixtures/reports/provisioning_csv +0 -0
- data/spec/support/fixtures/reports/provisioning_csv_unzipped/courses.csv +0 -0
- data/spec/support/fixtures/reports/provisioning_csv_unzipped/users.csv +0 -0
- data/spec/support/fixtures/reports/rubric_assessments.csv +0 -0
- data/spec/support/fixtures/reports/rubric_associations.csv +0 -0
- data/spec/support/fixtures/reports/rubrics.csv +0 -0
- data/spec/support/fixtures/reports/sections.csv +0 -0
- data/spec/support/fixtures/reports/submissions.csv +0 -0
- data/spec/support/fixtures/reports/user_observers.csv +0 -0
- data/spec/support/fixtures/reports/users.csv +0 -0
- data/spec/support/fixtures/reports/xlist.csv +0 -0
- metadata +193 -192
@@ -6,8 +6,6 @@ module CanvasSync::JobUniqueness
|
|
6
6
|
context_class.new(data, **kwargs)
|
7
7
|
end
|
8
8
|
|
9
|
-
attr_reader :lock_id
|
10
|
-
|
11
9
|
# { job_clazz, jid, queue, args?, kwargs?, base_key? }
|
12
10
|
def initialize(data, job_instance: nil, config: nil)
|
13
11
|
@base_key = data[:base_key]
|
@@ -16,7 +14,9 @@ module CanvasSync::JobUniqueness
|
|
16
14
|
@config = config || @context_data[:config]
|
17
15
|
|
18
16
|
# TODO Consider (somewhere) updating the lock_id to the BID of the wrapping Batch (when applicable)
|
19
|
-
@lock_id ||= data[:lid] || Thread.current[:unique_jobs_previous_context]&.lock_id
|
17
|
+
@lock_id ||= data[:lid] || Thread.current[:unique_jobs_previous_context]&.lock_id
|
18
|
+
@lock_id_locked = @lock_id.present?
|
19
|
+
@lock_id ||= job_id
|
20
20
|
end
|
21
21
|
|
22
22
|
# This is primarily for rehydrating in a Batch Callback, so it is unlikely that args and kwargs are needed.
|
@@ -84,6 +84,18 @@ module CanvasSync::JobUniqueness
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
+
def lock_id
|
88
|
+
@lock_id_locked = true
|
89
|
+
@lock_id
|
90
|
+
end
|
91
|
+
|
92
|
+
def lock_id=(new_id)
|
93
|
+
raise "Lock ID already set" if @lock_id_locked
|
94
|
+
return unless new_id.present?
|
95
|
+
@lock_id = new_id
|
96
|
+
@lock_id_locked = true
|
97
|
+
end
|
98
|
+
|
87
99
|
def job_id
|
88
100
|
@context_data[:jid]
|
89
101
|
end
|
@@ -122,14 +134,27 @@ module CanvasSync::JobUniqueness
|
|
122
134
|
|
123
135
|
args = @context_data[:args] || []
|
124
136
|
kwargs = @context_data[:kwargs] || {}
|
137
|
+
hash = config[:hash]
|
125
138
|
if config[:hash].is_a?(Proc)
|
126
|
-
|
139
|
+
hash = config[:hash].call(*args, **kwargs)
|
127
140
|
elsif config[:hash].nil?
|
128
|
-
|
129
|
-
|
130
|
-
|
141
|
+
hash = [*args, kwargs]
|
142
|
+
end
|
143
|
+
|
144
|
+
hash = ":#{hash}" if hash.is_a?(Symbol)
|
145
|
+
|
146
|
+
if hash && !hash.is_a?(String)
|
147
|
+
hash = Array(hash)
|
148
|
+
|
149
|
+
# Normalize the hash to ensure that the order of any Hash keys don't matter
|
150
|
+
hash = normalize_hash_chunk(hash)
|
151
|
+
|
152
|
+
normalized = ActiveJob::Arguments.serialize(hash)
|
153
|
+
hash = OpenSSL::Digest::MD5.hexdigest(JSON.dump(normalized))
|
131
154
|
end
|
132
155
|
|
156
|
+
base_key << hash if hash
|
157
|
+
|
133
158
|
base_key.join(":")
|
134
159
|
end
|
135
160
|
end
|
@@ -173,5 +198,14 @@ module CanvasSync::JobUniqueness
|
|
173
198
|
|
174
199
|
private
|
175
200
|
|
201
|
+
def normalize_hash_chunk(chunk)
|
202
|
+
if chunk.is_a?(Hash)
|
203
|
+
chunk.map { |k, v| [k, normalize_hash_chunk(v)] }.sort.to_h
|
204
|
+
elsif chunk.is_a?(Array)
|
205
|
+
chunk.map { |c| normalize_hash_chunk(c) }
|
206
|
+
else
|
207
|
+
chunk
|
208
|
+
end
|
209
|
+
end
|
176
210
|
end
|
177
211
|
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
|
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
|
@@ -12,14 +12,17 @@ module CanvasSync
|
|
12
12
|
# Override the delta-syncing date if:
|
13
13
|
# 1. the Term hasn't been synced before or
|
14
14
|
# 2. the Term underwent a period of not syncing
|
15
|
-
term_last_sync = CanvasSync.redis.get(self.class.last_sync_key(term_id))
|
16
15
|
if batch_context[:updated_after]
|
16
|
+
term_last_sync = CanvasSync.redis.get(self.class.last_sync_key(term_id))
|
17
17
|
if !term_last_sync.present? || batch_context[:updated_after] > term_last_sync
|
18
18
|
local_context[:updated_after] = term_last_sync.presence
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
JobBatches::ManagedBatchJob.make_batch(jobs, ordered: false, concurrency: true) do |b|
|
23
|
+
# TODO If we do a Chain UI, this will need to checkin somehow to indicate that the chain forked
|
24
|
+
# Or chain steps just show a summary - eg "Started", "X Jobs Running", "Done" or "X Jobs Running, Y Jobs Done" - and not individual forks
|
25
|
+
# For a step to be considered done, all previous sibling-level steps must be done and no batches pending
|
23
26
|
b.description = "TermBatchJob(#{term_id}) Root"
|
24
27
|
b.context = local_context
|
25
28
|
b.on(:success, "#{self.class.to_s}.batch_finished") unless options[:mark_synced] == false
|
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
|
data/lib/canvas_sync/record.rb
CHANGED
File without changes
|
File without changes
|
data/lib/canvas_sync/version.rb
CHANGED
data/lib/canvas_sync.rb
CHANGED
File without changes
|
@@ -2,18 +2,6 @@ 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
|
-
|
17
5
|
context 'an invalid model is passed in' do
|
18
6
|
it 'raises a helpful exception' do
|
19
7
|
expect {
|
@@ -30,22 +18,25 @@ RSpec.describe CanvasSync do
|
|
30
18
|
provisioning: { c: 3 },
|
31
19
|
global: { d: 4 },
|
32
20
|
})
|
33
|
-
expect(chain.normalize!).to
|
21
|
+
expect(chain.normalize!).to match({
|
34
22
|
:job => "CanvasSync::Jobs::BeginSyncChainJob",
|
23
|
+
:chain_link=>String,
|
35
24
|
:args => [
|
36
25
|
[
|
37
26
|
{
|
38
27
|
:job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
|
28
|
+
:chain_link=>String,
|
39
29
|
:args=>[
|
40
30
|
[
|
41
|
-
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users"], :b=>2}},
|
31
|
+
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users"], :b=>2}},
|
42
32
|
{
|
43
33
|
:job=>"CanvasSync::Jobs::SyncTermsJob",
|
34
|
+
:chain_link=>String,
|
44
35
|
:args=>[],
|
45
36
|
:kwargs=>{
|
46
37
|
:term_scope=>"active",
|
47
38
|
:sub_jobs=>[
|
48
|
-
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"], :c=>3}},
|
39
|
+
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"], :c=>3}},
|
49
40
|
],
|
50
41
|
},
|
51
42
|
},
|
@@ -62,20 +53,23 @@ RSpec.describe CanvasSync do
|
|
62
53
|
context 'we are syncing users with a term scope' do
|
63
54
|
it 'syncs the users in a separate job that runs first' do
|
64
55
|
chain = CanvasSync.default_provisioning_report_chain(['users', 'courses'], term_scope: :active)
|
65
|
-
expect(chain.normalize!).to
|
56
|
+
expect(chain.normalize!).to match({
|
66
57
|
:job => "CanvasSync::Jobs::BeginSyncChainJob",
|
58
|
+
:chain_link=>String,
|
67
59
|
:args => [[
|
68
60
|
{
|
69
61
|
:job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
|
62
|
+
:chain_link=>String,
|
70
63
|
:args=>[
|
71
64
|
[
|
72
|
-
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users"]}},
|
65
|
+
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users"]}},
|
73
66
|
{
|
74
67
|
:job=>"CanvasSync::Jobs::SyncTermsJob",
|
68
|
+
:chain_link=>String,
|
75
69
|
:args=>[],
|
76
70
|
:kwargs=>{
|
77
71
|
:sub_jobs=>[
|
78
|
-
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"]}}
|
72
|
+
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"]}}
|
79
73
|
],
|
80
74
|
:term_scope=>"active",
|
81
75
|
}
|
@@ -93,17 +87,20 @@ RSpec.describe CanvasSync do
|
|
93
87
|
context 'we are syncing users without a term scope' do
|
94
88
|
it 'syncs users along with the rest of the provisioning report' do
|
95
89
|
chain = CanvasSync.default_provisioning_report_chain(['users', 'courses'])
|
96
|
-
expect(chain.normalize!).to
|
90
|
+
expect(chain.normalize!).to match({
|
97
91
|
:job => "CanvasSync::Jobs::BeginSyncChainJob",
|
92
|
+
:chain_link=>String,
|
98
93
|
:args => [[
|
99
94
|
{
|
100
95
|
:job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
|
96
|
+
:chain_link=>String,
|
101
97
|
:args=>[[
|
102
98
|
{
|
103
99
|
:job=>"CanvasSync::Jobs::SyncTermsJob",
|
100
|
+
:chain_link=>String,
|
104
101
|
:args=>[],
|
105
102
|
:kwargs=>{
|
106
|
-
:sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users", "courses"]}}],
|
103
|
+
:sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users", "courses"]}}],
|
107
104
|
:term_scope=>nil,
|
108
105
|
}
|
109
106
|
}
|
@@ -119,18 +116,21 @@ RSpec.describe CanvasSync do
|
|
119
116
|
context 'we are syncing roles with a term scope' do
|
120
117
|
it 'syncs the roles in a separate job that runs first' do
|
121
118
|
chain = CanvasSync.default_provisioning_report_chain(['roles', 'courses'], term_scope: :active)
|
122
|
-
expect(chain.normalize!).to
|
119
|
+
expect(chain.normalize!).to match({
|
123
120
|
:job => "CanvasSync::Jobs::BeginSyncChainJob",
|
121
|
+
:chain_link=>String,
|
124
122
|
:args => [[
|
125
123
|
{
|
126
124
|
:job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
|
125
|
+
:chain_link=>String,
|
127
126
|
:args=>[[
|
128
|
-
{:job=>"CanvasSync::Jobs::SyncRolesJob", :options=>{}},
|
127
|
+
{:job=>"CanvasSync::Jobs::SyncRolesJob", :chain_link=>String, :options=>{}},
|
129
128
|
{
|
130
129
|
:job=>"CanvasSync::Jobs::SyncTermsJob",
|
130
|
+
:chain_link=>String,
|
131
131
|
:args=>[],
|
132
132
|
:kwargs=>{
|
133
|
-
:sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"]}}],
|
133
|
+
:sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"]}}],
|
134
134
|
:term_scope=>"active",
|
135
135
|
}
|
136
136
|
},
|
@@ -146,18 +146,21 @@ 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
|
149
|
+
expect(chain.normalize!).to match({
|
150
150
|
:job => "CanvasSync::Jobs::BeginSyncChainJob",
|
151
|
+
:chain_link=>String,
|
151
152
|
:args => [[
|
152
153
|
{
|
153
154
|
:job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
|
155
|
+
:chain_link=>String,
|
154
156
|
:args=>[[
|
155
|
-
{:job=>"CanvasSync::Jobs::SyncRolesJob", :options=>{}},
|
157
|
+
{:job=>"CanvasSync::Jobs::SyncRolesJob", :chain_link=>String, :options=>{}},
|
156
158
|
{
|
157
159
|
:job=>"CanvasSync::Jobs::SyncTermsJob",
|
160
|
+
:chain_link=>String,
|
158
161
|
:args=>[],
|
159
162
|
:kwargs=>{
|
160
|
-
:sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"]}}],
|
163
|
+
:sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"]}}],
|
161
164
|
:term_scope=>nil,
|
162
165
|
}
|
163
166
|
}
|
@@ -173,18 +176,21 @@ RSpec.describe CanvasSync do
|
|
173
176
|
context 'we are syncing admins with a term scope' do
|
174
177
|
it 'syncs the admins in a separate job that runs first' do
|
175
178
|
chain = CanvasSync.default_provisioning_report_chain(['admins', 'courses'], term_scope: :active)
|
176
|
-
expect(chain.normalize!).to
|
179
|
+
expect(chain.normalize!).to match({
|
177
180
|
:job => "CanvasSync::Jobs::BeginSyncChainJob",
|
181
|
+
:chain_link=>String,
|
178
182
|
:args => [[
|
179
183
|
{
|
180
184
|
:job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
|
185
|
+
:chain_link=>String,
|
181
186
|
:args=>[[
|
182
|
-
{:job=>"CanvasSync::Jobs::SyncAdminsJob", :options=>{}},
|
187
|
+
{:job=>"CanvasSync::Jobs::SyncAdminsJob", :chain_link=>String, :options=>{}},
|
183
188
|
{
|
184
189
|
:job=>"CanvasSync::Jobs::SyncTermsJob",
|
190
|
+
:chain_link=>String,
|
185
191
|
:args=>[],
|
186
192
|
:kwargs=>{
|
187
|
-
:sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"]}}],
|
193
|
+
:sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"]}}],
|
188
194
|
:term_scope=>"active"
|
189
195
|
}
|
190
196
|
}
|
@@ -200,18 +206,21 @@ RSpec.describe CanvasSync do
|
|
200
206
|
context 'we are syncing admins without a term scope' do
|
201
207
|
it 'syncs admins separately even with no term scope' do
|
202
208
|
chain = CanvasSync.default_provisioning_report_chain(['admins', 'courses'])
|
203
|
-
expect(chain.normalize!).to
|
209
|
+
expect(chain.normalize!).to match({
|
204
210
|
:job => "CanvasSync::Jobs::BeginSyncChainJob",
|
211
|
+
:chain_link=>String,
|
205
212
|
:args => [[
|
206
213
|
{
|
207
214
|
:job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
|
215
|
+
:chain_link=>String,
|
208
216
|
:args=>[[
|
209
|
-
{:job=>"CanvasSync::Jobs::SyncAdminsJob", :options=>{}},
|
217
|
+
{:job=>"CanvasSync::Jobs::SyncAdminsJob", :chain_link=>String, :options=>{}},
|
210
218
|
{
|
211
219
|
:job=>"CanvasSync::Jobs::SyncTermsJob",
|
220
|
+
:chain_link=>String,
|
212
221
|
:args=>[],
|
213
222
|
:kwargs=>{
|
214
|
-
:sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["courses"]}}],
|
223
|
+
:sub_jobs=>[{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["courses"]}}],
|
215
224
|
:term_scope=>nil
|
216
225
|
}
|
217
226
|
}
|
@@ -228,19 +237,22 @@ RSpec.describe CanvasSync do
|
|
228
237
|
it "appends the SyncAssignmentsJob" do
|
229
238
|
chain = CanvasSync.default_provisioning_report_chain(%w[users enrollments assignments])
|
230
239
|
|
231
|
-
expect(chain.normalize!).to
|
240
|
+
expect(chain.normalize!).to match({
|
232
241
|
:job => "CanvasSync::Jobs::BeginSyncChainJob",
|
242
|
+
:chain_link=>String,
|
233
243
|
:args => [[
|
234
244
|
{
|
235
245
|
:job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
|
246
|
+
:chain_link=>String,
|
236
247
|
:args=>[[
|
237
248
|
{
|
238
249
|
:job=>"CanvasSync::Jobs::SyncTermsJob",
|
250
|
+
:chain_link=>String,
|
239
251
|
:args=>[],
|
240
252
|
:kwargs=>{
|
241
253
|
:sub_jobs=>[
|
242
|
-
{:job=>"CanvasSync::Jobs::SyncAssignmentsJob", :options=>{}},
|
243
|
-
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users", "enrollments"]}}
|
254
|
+
{:job=>"CanvasSync::Jobs::SyncAssignmentsJob", :chain_link=>String, :options=>{}},
|
255
|
+
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users", "enrollments"]}}
|
244
256
|
],
|
245
257
|
:term_scope=>nil
|
246
258
|
}
|
@@ -258,19 +270,22 @@ RSpec.describe CanvasSync do
|
|
258
270
|
it "appends the SyncSubmissionsJob" do
|
259
271
|
chain = CanvasSync.default_provisioning_report_chain(%w[users enrollments submissions])
|
260
272
|
|
261
|
-
expect(chain.normalize!).to
|
273
|
+
expect(chain.normalize!).to match({
|
262
274
|
:job => "CanvasSync::Jobs::BeginSyncChainJob",
|
275
|
+
:chain_link=>String,
|
263
276
|
:args => [[
|
264
277
|
{
|
265
278
|
:job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
|
279
|
+
:chain_link=>String,
|
266
280
|
:args=>[[
|
267
281
|
{
|
268
282
|
:job=>"CanvasSync::Jobs::SyncTermsJob",
|
283
|
+
:chain_link=>String,
|
269
284
|
:args=>[],
|
270
285
|
:kwargs=>{
|
271
286
|
:sub_jobs=>[
|
272
|
-
{:job=>"CanvasSync::Jobs::SyncSubmissionsJob", :options=>{}},
|
273
|
-
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users", "enrollments"]}}
|
287
|
+
{:job=>"CanvasSync::Jobs::SyncSubmissionsJob", :chain_link=>String, :options=>{}},
|
288
|
+
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users", "enrollments"]}}
|
274
289
|
],
|
275
290
|
:term_scope=>nil
|
276
291
|
}
|
@@ -288,19 +303,22 @@ RSpec.describe CanvasSync do
|
|
288
303
|
it "appends the SyncAssignmentGroupsJob" do
|
289
304
|
chain = CanvasSync.default_provisioning_report_chain(%w[users enrollments assignment_groups])
|
290
305
|
|
291
|
-
expect(chain.normalize!).to
|
306
|
+
expect(chain.normalize!).to match({
|
292
307
|
:job => "CanvasSync::Jobs::BeginSyncChainJob",
|
308
|
+
:chain_link=>String,
|
293
309
|
:args => [[
|
294
310
|
{
|
295
311
|
:job=>"CanvasSync::JobBatches::ConcurrentBatchJob",
|
312
|
+
:chain_link=>String,
|
296
313
|
:args=>[[
|
297
314
|
{
|
298
315
|
:job=>"CanvasSync::Jobs::SyncTermsJob",
|
316
|
+
:chain_link=>String,
|
299
317
|
:args=>[],
|
300
318
|
:kwargs=>{
|
301
319
|
:sub_jobs=>[
|
302
|
-
{:job=>"CanvasSync::Jobs::SyncAssignmentGroupsJob", :options=>{}},
|
303
|
-
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :options=>{:models=>["users", "enrollments"]}}
|
320
|
+
{:job=>"CanvasSync::Jobs::SyncAssignmentGroupsJob", :chain_link=>String, :options=>{}},
|
321
|
+
{:job=>"CanvasSync::Jobs::SyncProvisioningReportJob", :chain_link=>String, :options=>{:models=>["users", "enrollments"]}}
|
304
322
|
],
|
305
323
|
:term_scope=>nil
|
306
324
|
}
|
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
|
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
|