canvas_sync 0.27.13 → 0.27.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/canvas_sync/api/v1/health_check_controller.rb +0 -0
- data/app/models/canvas_sync/job_log.rb +0 -0
- data/app/models/canvas_sync/sync_batch.rb +0 -0
- 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 +43 -2
- 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/canvas_id_as_primary.rb +0 -0
- data/lib/canvas_sync/concerns/jit_syncing.rb +0 -0
- data/lib/canvas_sync/concerns/legacy_columns.rb +0 -0
- data/lib/canvas_sync/concerns/role/base.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_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_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/content_migration.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/course_nickname.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/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/legacy_importer.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_starter.rb +5 -1
- data/lib/canvas_sync/jobs/report_sync_task.rb +4 -1
- 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_provisioning_report_job.rb +1 -1
- 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/live_events/base_handler.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/normal_processor.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 +65 -86
- data/spec/canvas_sync/concerns/ability_helper_spec.rb +165 -0
- data/spec/canvas_sync/jobs/canvas_process_waiter_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_provisioning_report_job_spec.rb +2 -2
- 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_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/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/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/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/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/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/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 +3 -141
- data/spec/internal/app/models/account.rb +0 -35
- data/spec/internal/app/models/admin.rb +0 -35
- data/spec/internal/app/models/assignment.rb +0 -39
- data/spec/internal/app/models/assignment_group.rb +0 -31
- data/spec/internal/app/models/assignment_override.rb +0 -34
- data/spec/internal/app/models/content_migration.rb +0 -18
- data/spec/internal/app/models/context_module.rb +0 -69
- data/spec/internal/app/models/context_module_item.rb +0 -33
- data/spec/internal/app/models/course.rb +0 -57
- data/spec/internal/app/models/course_nickname.rb +0 -20
- data/spec/internal/app/models/course_progress.rb +0 -29
- data/spec/internal/app/models/enrollment.rb +0 -48
- data/spec/internal/app/models/grading_period.rb +0 -17
- data/spec/internal/app/models/grading_period_group.rb +0 -16
- data/spec/internal/app/models/group.rb +0 -28
- data/spec/internal/app/models/group_membership.rb +0 -26
- data/spec/internal/app/models/learning_outcome.rb +0 -30
- data/spec/internal/app/models/learning_outcome_result.rb +0 -54
- data/spec/internal/app/models/pseudonym.rb +0 -19
- data/spec/internal/app/models/role.rb +0 -27
- data/spec/internal/app/models/rubric.rb +0 -36
- data/spec/internal/app/models/rubric_assessment.rb +0 -23
- data/spec/internal/app/models/rubric_association.rb +0 -20
- data/spec/internal/app/models/score.rb +0 -18
- data/spec/internal/app/models/section.rb +0 -36
- data/spec/internal/app/models/submission.rb +0 -32
- data/spec/internal/app/models/term.rb +0 -46
- data/spec/internal/app/models/user.rb +0 -43
- data/spec/internal/app/models/user_observer.rb +0 -22
- data/spec/internal/app/services/live_events/assignment_event.rb +0 -43
- data/spec/internal/app/services/live_events/course_event.rb +0 -28
- data/spec/internal/app/services/live_events/course_section_event.rb +0 -28
- data/spec/internal/app/services/live_events/enrollment_event.rb +0 -30
- data/spec/internal/app/services/live_events/grade_event.rb +0 -36
- data/spec/internal/app/services/live_events/module_event.rb +0 -26
- data/spec/internal/app/services/live_events/module_item_event.rb +0 -25
- data/spec/internal/app/services/live_events/submission_event.rb +0 -28
- data/spec/internal/app/services/live_events/syllabus_event.rb +0 -31
- data/spec/internal/app/services/live_events/user_event.rb +0 -27
- data/spec/internal/db/migrate/20251029222307_create_users.rb +0 -26
- data/spec/internal/db/migrate/20251029222308_create_pseudonyms.rb +0 -24
- data/spec/internal/db/migrate/20251029222309_create_courses.rb +0 -30
- data/spec/internal/db/migrate/20251029222310_create_groups.rb +0 -29
- data/spec/internal/db/migrate/20251029222311_create_group_memberships.rb +0 -24
- data/spec/internal/db/migrate/20251029222312_create_accounts.rb +0 -23
- data/spec/internal/db/migrate/20251029222313_create_terms.rb +0 -24
- data/spec/internal/db/migrate/20251029222314_create_enrollments.rb +0 -31
- data/spec/internal/db/migrate/20251029222315_create_sections.rb +0 -27
- data/spec/internal/db/migrate/20251029222316_create_assignments.rb +0 -37
- data/spec/internal/db/migrate/20251029222317_create_submissions.rb +0 -32
- data/spec/internal/db/migrate/20251029222318_create_roles.rb +0 -24
- data/spec/internal/db/migrate/20251029222319_create_admins.rb +0 -26
- data/spec/internal/db/migrate/20251029222320_create_assignment_groups.rb +0 -28
- data/spec/internal/db/migrate/20251029222321_create_context_modules.rb +0 -28
- data/spec/internal/db/migrate/20251029222322_create_context_module_items.rb +0 -26
- data/spec/internal/db/migrate/20251029222324_create_grading_periods.rb +0 -28
- data/spec/internal/db/migrate/20251029222325_create_grading_period_groups.rb +0 -24
- data/spec/internal/db/migrate/20251029222326_create_content_migrations.rb +0 -30
- data/spec/internal/db/migrate/20251029222327_create_learning_outcomes.rb +0 -36
- data/spec/internal/db/migrate/20251029222328_create_learning_outcome_results.rb +0 -52
- data/spec/internal/db/migrate/20251029222330_create_rubrics.rb +0 -44
- data/spec/internal/db/migrate/20251029222331_create_rubric_associations.rb +0 -42
- data/spec/internal/db/migrate/20251029222332_create_rubric_assessments.rb +0 -37
- data/spec/internal/db/migrate/20251029222334_create_assignment_overrides.rb +0 -25
- data/spec/internal/db/migrate/20251029222335_create_scores.rb +0 -42
- data/spec/internal/db/migrate/20251029223411_create_user_observers.rb +0 -23
- data/spec/internal/db/migrate/20251029224009_create_course_nicknames.rb +0 -23
- data/spec/internal/db/migrate/20251029224010_create_course_progresses.rb +0 -26
- data/spec/support/fixtures/reports/provisioning_csv_unzipped/courses.csv +0 -3
- data/spec/support/fixtures/reports/provisioning_csv_unzipped/users.csv +0 -4
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "spec_helper"
|
|
4
|
+
|
|
5
|
+
# Focused on what this concern contributes on top of PandaPal: that it asks for
|
|
6
|
+
# INHERITED role labels, and that it keys its Session-persisted cache so the
|
|
7
|
+
# pre-traversal answers don't outlive the change. The traversal itself belongs
|
|
8
|
+
# to (and is tested by) PandaPal::Session#canvas_account_role_labels.
|
|
9
|
+
#
|
|
10
|
+
# panda_pal is not in this gem's bundle, so the session is a hand-rolled double
|
|
11
|
+
# — which is also the only way to assert the exact call that gets made.
|
|
12
|
+
RSpec.describe CanvasSync::Concerns::AbilityHelper do
|
|
13
|
+
let(:helper_class) do
|
|
14
|
+
Class.new do
|
|
15
|
+
include CanvasSync::Concerns::AbilityHelper
|
|
16
|
+
|
|
17
|
+
attr_reader :panda_pal_session
|
|
18
|
+
|
|
19
|
+
def initialize(session)
|
|
20
|
+
@panda_pal_session = session
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Shared bookkeeping: real #cache semantics (memoised into the session under
|
|
26
|
+
# an arbitrary key), plus a record of every call made.
|
|
27
|
+
session_base = Class.new do
|
|
28
|
+
attr_reader :cache_keys, :label_calls
|
|
29
|
+
|
|
30
|
+
def initialize(labels: [], site_admin: false, preset_cache: {})
|
|
31
|
+
@labels = labels
|
|
32
|
+
@site_admin = site_admin
|
|
33
|
+
@cache = preset_cache
|
|
34
|
+
@cache_keys = []
|
|
35
|
+
@label_calls = []
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def cache(key)
|
|
39
|
+
@cache_keys << key
|
|
40
|
+
return @cache[key] if @cache.key?(key)
|
|
41
|
+
|
|
42
|
+
@cache[key] = yield
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def canvas_site_admin?
|
|
46
|
+
@site_admin
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Declared exactly as PandaPal >= 5.17 declares it, so keyword detection runs
|
|
51
|
+
# against a real signature rather than a catch-all that would pass for the
|
|
52
|
+
# wrong reason.
|
|
53
|
+
let(:modern_session) do
|
|
54
|
+
Class.new(session_base) do
|
|
55
|
+
def canvas_account_role_labels(account = 'self', inherited: false)
|
|
56
|
+
@label_calls << [account, { inherited: inherited }]
|
|
57
|
+
@labels
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# PandaPal < 5.17: no keyword at all. Passing one must not reach it.
|
|
63
|
+
let(:legacy_session) do
|
|
64
|
+
Class.new(session_base) do
|
|
65
|
+
def canvas_account_role_labels(account = 'self')
|
|
66
|
+
@label_calls << [account, {}]
|
|
67
|
+
@labels
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# A host app decorating the Session and forwarding keywords.
|
|
73
|
+
let(:forwarding_session) do
|
|
74
|
+
Class.new(session_base) do
|
|
75
|
+
def canvas_account_role_labels(account = 'self', **opts)
|
|
76
|
+
@label_calls << [account, opts]
|
|
77
|
+
@labels
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def helper_for(klass = nil, **kwargs)
|
|
83
|
+
helper_class.new((klass || modern_session).new(**kwargs))
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe "#canvas_account_admin?" do
|
|
87
|
+
it "asks PandaPal for inherited role labels" do
|
|
88
|
+
helper = helper_for(labels: ["AccountAdmin"])
|
|
89
|
+
|
|
90
|
+
expect(helper.canvas_account_admin?(300)).to be true
|
|
91
|
+
expect(helper.panda_pal_session.label_calls).to eq([[300, { inherited: true }]])
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "accepts the human-readable \"Account Admin\" label" do
|
|
95
|
+
expect(helper_for(labels: ["Account Admin"]).canvas_account_admin?(300)).to be true
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "is false when the user holds only non-admin roles anywhere in the chain" do
|
|
99
|
+
expect(helper_for(labels: ["Ops", "Department Admin"]).canvas_account_admin?(300)).to be false
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "is true for a Canvas site admin regardless of role labels" do
|
|
103
|
+
expect(helper_for(labels: [], site_admin: true).canvas_account_admin?(300)).to be true
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "keys its cache separately from the pre-traversal answer" do
|
|
107
|
+
helper = helper_for(labels: ["AccountAdmin"])
|
|
108
|
+
|
|
109
|
+
helper.canvas_account_admin?(:root)
|
|
110
|
+
|
|
111
|
+
expect(helper.panda_pal_session.cache_keys).to eq([[:canvas_account_admin?, :root, :inherited]])
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# The regression this guards: a Session launched before the traversal
|
|
115
|
+
# existed has `false` persisted under the OLD key. Reusing that key would
|
|
116
|
+
# keep denying an admin who should now pass.
|
|
117
|
+
it "ignores a stale pre-traversal cache entry" do
|
|
118
|
+
helper = helper_class.new(
|
|
119
|
+
modern_session.new(labels: ["AccountAdmin"], preset_cache: { [:canvas_account_admin?, :root] => false })
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
expect(helper.canvas_account_admin?(:root)).to be true
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "still memoises within its own key" do
|
|
126
|
+
helper = helper_for(labels: ["AccountAdmin"])
|
|
127
|
+
|
|
128
|
+
helper.canvas_account_admin?(:root)
|
|
129
|
+
helper.canvas_account_admin?(:root)
|
|
130
|
+
|
|
131
|
+
expect(helper.panda_pal_session.label_calls.size).to eq(1)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
describe "#canvas_super_user?" do
|
|
136
|
+
it "delegates to canvas_account_admin? for the install Account" do
|
|
137
|
+
helper = helper_for(labels: ["AccountAdmin"])
|
|
138
|
+
|
|
139
|
+
expect(helper.canvas_super_user?).to be true
|
|
140
|
+
expect(helper.panda_pal_session.label_calls).to eq([[:root, { inherited: true }]])
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it "is false for a user with no admin role above or at the install Account" do
|
|
144
|
+
expect(helper_for(labels: []).canvas_super_user?).to be false
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# Upgrade-order safety: an app on a CanvasSync with this change but PandaPal
|
|
149
|
+
# < 5.17 must not blow up an authorization check with ArgumentError.
|
|
150
|
+
describe "keyword detection" do
|
|
151
|
+
it "falls back to the non-inherited call against an older PandaPal" do
|
|
152
|
+
helper = helper_for(legacy_session, labels: ["AccountAdmin"])
|
|
153
|
+
|
|
154
|
+
expect(helper.canvas_account_admin?(300)).to be true
|
|
155
|
+
expect(helper.panda_pal_session.label_calls).to eq([[300, {}]])
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it "treats a keyword-forwarding Session as supporting inherited" do
|
|
159
|
+
helper = helper_for(forwarding_session, labels: ["AccountAdmin"])
|
|
160
|
+
|
|
161
|
+
expect(helper.canvas_account_admin?(300)).to be true
|
|
162
|
+
expect(helper.panda_pal_session.label_calls).to eq([[300, { inherited: true }]])
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -17,7 +17,7 @@ RSpec.describe CanvasSync::Jobs::SyncProvisioningReportJob do
|
|
|
17
17
|
'courses' => true,
|
|
18
18
|
enrollment_term_id: term.canvas_id,
|
|
19
19
|
}
|
|
20
|
-
})
|
|
20
|
+
}.with_indifferent_access)
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
@@ -33,7 +33,7 @@ RSpec.describe CanvasSync::Jobs::SyncProvisioningReportJob do
|
|
|
33
33
|
'users' => true,
|
|
34
34
|
'courses' => true,
|
|
35
35
|
}
|
|
36
|
-
})
|
|
36
|
+
}.with_indifferent_access)
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
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
|
|
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
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: canvas_sync
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.27.
|
|
4
|
+
version: 0.27.15
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Instructure CustomDev
|
|
@@ -569,6 +569,7 @@ files:
|
|
|
569
569
|
- lib/canvas_sync/version.rb
|
|
570
570
|
- lib/tasks/canvas_sync_tasks.rake
|
|
571
571
|
- spec/canvas_sync/canvas_sync_spec.rb
|
|
572
|
+
- spec/canvas_sync/concerns/ability_helper_spec.rb
|
|
572
573
|
- spec/canvas_sync/concerns/deleted_scoping_spec.rb
|
|
573
574
|
- spec/canvas_sync/concerns/legacy_columns_spec.rb
|
|
574
575
|
- spec/canvas_sync/engine_spec.rb
|
|
@@ -636,79 +637,11 @@ files:
|
|
|
636
637
|
- spec/factories/submission_factory.rb
|
|
637
638
|
- spec/factories/term_factory.rb
|
|
638
639
|
- spec/factories/user_factory.rb
|
|
639
|
-
- spec/internal/app/models/account.rb
|
|
640
|
-
- spec/internal/app/models/admin.rb
|
|
641
640
|
- spec/internal/app/models/application_record.rb
|
|
642
|
-
- spec/internal/app/models/assignment.rb
|
|
643
|
-
- spec/internal/app/models/assignment_group.rb
|
|
644
|
-
- spec/internal/app/models/assignment_override.rb
|
|
645
|
-
- spec/internal/app/models/content_migration.rb
|
|
646
|
-
- spec/internal/app/models/context_module.rb
|
|
647
|
-
- spec/internal/app/models/context_module_item.rb
|
|
648
|
-
- spec/internal/app/models/course.rb
|
|
649
|
-
- spec/internal/app/models/course_nickname.rb
|
|
650
|
-
- spec/internal/app/models/course_progress.rb
|
|
651
|
-
- spec/internal/app/models/enrollment.rb
|
|
652
|
-
- spec/internal/app/models/grading_period.rb
|
|
653
|
-
- spec/internal/app/models/grading_period_group.rb
|
|
654
|
-
- spec/internal/app/models/group.rb
|
|
655
|
-
- spec/internal/app/models/group_membership.rb
|
|
656
|
-
- spec/internal/app/models/learning_outcome.rb
|
|
657
|
-
- spec/internal/app/models/learning_outcome_result.rb
|
|
658
|
-
- spec/internal/app/models/pseudonym.rb
|
|
659
|
-
- spec/internal/app/models/role.rb
|
|
660
|
-
- spec/internal/app/models/rubric.rb
|
|
661
|
-
- spec/internal/app/models/rubric_assessment.rb
|
|
662
|
-
- spec/internal/app/models/rubric_association.rb
|
|
663
|
-
- spec/internal/app/models/score.rb
|
|
664
|
-
- spec/internal/app/models/section.rb
|
|
665
|
-
- spec/internal/app/models/submission.rb
|
|
666
|
-
- spec/internal/app/models/term.rb
|
|
667
|
-
- spec/internal/app/models/user.rb
|
|
668
|
-
- spec/internal/app/models/user_observer.rb
|
|
669
|
-
- spec/internal/app/services/live_events/assignment_event.rb
|
|
670
|
-
- spec/internal/app/services/live_events/course_event.rb
|
|
671
|
-
- spec/internal/app/services/live_events/course_section_event.rb
|
|
672
|
-
- spec/internal/app/services/live_events/enrollment_event.rb
|
|
673
|
-
- spec/internal/app/services/live_events/grade_event.rb
|
|
674
|
-
- spec/internal/app/services/live_events/module_event.rb
|
|
675
|
-
- spec/internal/app/services/live_events/module_item_event.rb
|
|
676
|
-
- spec/internal/app/services/live_events/submission_event.rb
|
|
677
|
-
- spec/internal/app/services/live_events/syllabus_event.rb
|
|
678
|
-
- spec/internal/app/services/live_events/user_event.rb
|
|
679
641
|
- spec/internal/bin/rails
|
|
680
642
|
- spec/internal/config/database.yml
|
|
681
643
|
- spec/internal/config/routes.rb
|
|
682
644
|
- spec/internal/config/storage.yml
|
|
683
|
-
- spec/internal/db/migrate/20251029222307_create_users.rb
|
|
684
|
-
- spec/internal/db/migrate/20251029222308_create_pseudonyms.rb
|
|
685
|
-
- spec/internal/db/migrate/20251029222309_create_courses.rb
|
|
686
|
-
- spec/internal/db/migrate/20251029222310_create_groups.rb
|
|
687
|
-
- spec/internal/db/migrate/20251029222311_create_group_memberships.rb
|
|
688
|
-
- spec/internal/db/migrate/20251029222312_create_accounts.rb
|
|
689
|
-
- spec/internal/db/migrate/20251029222313_create_terms.rb
|
|
690
|
-
- spec/internal/db/migrate/20251029222314_create_enrollments.rb
|
|
691
|
-
- spec/internal/db/migrate/20251029222315_create_sections.rb
|
|
692
|
-
- spec/internal/db/migrate/20251029222316_create_assignments.rb
|
|
693
|
-
- spec/internal/db/migrate/20251029222317_create_submissions.rb
|
|
694
|
-
- spec/internal/db/migrate/20251029222318_create_roles.rb
|
|
695
|
-
- spec/internal/db/migrate/20251029222319_create_admins.rb
|
|
696
|
-
- spec/internal/db/migrate/20251029222320_create_assignment_groups.rb
|
|
697
|
-
- spec/internal/db/migrate/20251029222321_create_context_modules.rb
|
|
698
|
-
- spec/internal/db/migrate/20251029222322_create_context_module_items.rb
|
|
699
|
-
- spec/internal/db/migrate/20251029222324_create_grading_periods.rb
|
|
700
|
-
- spec/internal/db/migrate/20251029222325_create_grading_period_groups.rb
|
|
701
|
-
- spec/internal/db/migrate/20251029222326_create_content_migrations.rb
|
|
702
|
-
- spec/internal/db/migrate/20251029222327_create_learning_outcomes.rb
|
|
703
|
-
- spec/internal/db/migrate/20251029222328_create_learning_outcome_results.rb
|
|
704
|
-
- spec/internal/db/migrate/20251029222330_create_rubrics.rb
|
|
705
|
-
- spec/internal/db/migrate/20251029222331_create_rubric_associations.rb
|
|
706
|
-
- spec/internal/db/migrate/20251029222332_create_rubric_assessments.rb
|
|
707
|
-
- spec/internal/db/migrate/20251029222334_create_assignment_overrides.rb
|
|
708
|
-
- spec/internal/db/migrate/20251029222335_create_scores.rb
|
|
709
|
-
- spec/internal/db/migrate/20251029223411_create_user_observers.rb
|
|
710
|
-
- spec/internal/db/migrate/20251029224009_create_course_nicknames.rb
|
|
711
|
-
- spec/internal/db/migrate/20251029224010_create_course_progresses.rb
|
|
712
645
|
- spec/internal/db/schema.rb
|
|
713
646
|
- spec/spec_helper.rb
|
|
714
647
|
- spec/support/fake_canvas.rb
|
|
@@ -737,8 +670,6 @@ files:
|
|
|
737
670
|
- spec/support/fixtures/reports/learning_outcome_results.csv
|
|
738
671
|
- spec/support/fixtures/reports/learning_outcomes.csv
|
|
739
672
|
- spec/support/fixtures/reports/provisioning_csv
|
|
740
|
-
- spec/support/fixtures/reports/provisioning_csv_unzipped/courses.csv
|
|
741
|
-
- spec/support/fixtures/reports/provisioning_csv_unzipped/users.csv
|
|
742
673
|
- spec/support/fixtures/reports/rubric_assessments.csv
|
|
743
674
|
- spec/support/fixtures/reports/rubric_associations.csv
|
|
744
675
|
- spec/support/fixtures/reports/rubrics.csv
|
|
@@ -770,6 +701,7 @@ specification_version: 4
|
|
|
770
701
|
summary: Gem for generating Canvas models and migrations and syncing data from Canvas
|
|
771
702
|
test_files:
|
|
772
703
|
- spec/canvas_sync/canvas_sync_spec.rb
|
|
704
|
+
- spec/canvas_sync/concerns/ability_helper_spec.rb
|
|
773
705
|
- spec/canvas_sync/concerns/deleted_scoping_spec.rb
|
|
774
706
|
- spec/canvas_sync/concerns/legacy_columns_spec.rb
|
|
775
707
|
- spec/canvas_sync/engine_spec.rb
|
|
@@ -837,79 +769,11 @@ test_files:
|
|
|
837
769
|
- spec/factories/submission_factory.rb
|
|
838
770
|
- spec/factories/term_factory.rb
|
|
839
771
|
- spec/factories/user_factory.rb
|
|
840
|
-
- spec/internal/app/models/account.rb
|
|
841
|
-
- spec/internal/app/models/admin.rb
|
|
842
772
|
- spec/internal/app/models/application_record.rb
|
|
843
|
-
- spec/internal/app/models/assignment.rb
|
|
844
|
-
- spec/internal/app/models/assignment_group.rb
|
|
845
|
-
- spec/internal/app/models/assignment_override.rb
|
|
846
|
-
- spec/internal/app/models/content_migration.rb
|
|
847
|
-
- spec/internal/app/models/context_module.rb
|
|
848
|
-
- spec/internal/app/models/context_module_item.rb
|
|
849
|
-
- spec/internal/app/models/course.rb
|
|
850
|
-
- spec/internal/app/models/course_nickname.rb
|
|
851
|
-
- spec/internal/app/models/course_progress.rb
|
|
852
|
-
- spec/internal/app/models/enrollment.rb
|
|
853
|
-
- spec/internal/app/models/grading_period.rb
|
|
854
|
-
- spec/internal/app/models/grading_period_group.rb
|
|
855
|
-
- spec/internal/app/models/group.rb
|
|
856
|
-
- spec/internal/app/models/group_membership.rb
|
|
857
|
-
- spec/internal/app/models/learning_outcome.rb
|
|
858
|
-
- spec/internal/app/models/learning_outcome_result.rb
|
|
859
|
-
- spec/internal/app/models/pseudonym.rb
|
|
860
|
-
- spec/internal/app/models/role.rb
|
|
861
|
-
- spec/internal/app/models/rubric.rb
|
|
862
|
-
- spec/internal/app/models/rubric_assessment.rb
|
|
863
|
-
- spec/internal/app/models/rubric_association.rb
|
|
864
|
-
- spec/internal/app/models/score.rb
|
|
865
|
-
- spec/internal/app/models/section.rb
|
|
866
|
-
- spec/internal/app/models/submission.rb
|
|
867
|
-
- spec/internal/app/models/term.rb
|
|
868
|
-
- spec/internal/app/models/user.rb
|
|
869
|
-
- spec/internal/app/models/user_observer.rb
|
|
870
|
-
- spec/internal/app/services/live_events/assignment_event.rb
|
|
871
|
-
- spec/internal/app/services/live_events/course_event.rb
|
|
872
|
-
- spec/internal/app/services/live_events/course_section_event.rb
|
|
873
|
-
- spec/internal/app/services/live_events/enrollment_event.rb
|
|
874
|
-
- spec/internal/app/services/live_events/grade_event.rb
|
|
875
|
-
- spec/internal/app/services/live_events/module_event.rb
|
|
876
|
-
- spec/internal/app/services/live_events/module_item_event.rb
|
|
877
|
-
- spec/internal/app/services/live_events/submission_event.rb
|
|
878
|
-
- spec/internal/app/services/live_events/syllabus_event.rb
|
|
879
|
-
- spec/internal/app/services/live_events/user_event.rb
|
|
880
773
|
- spec/internal/bin/rails
|
|
881
774
|
- spec/internal/config/database.yml
|
|
882
775
|
- spec/internal/config/routes.rb
|
|
883
776
|
- spec/internal/config/storage.yml
|
|
884
|
-
- spec/internal/db/migrate/20251029222307_create_users.rb
|
|
885
|
-
- spec/internal/db/migrate/20251029222308_create_pseudonyms.rb
|
|
886
|
-
- spec/internal/db/migrate/20251029222309_create_courses.rb
|
|
887
|
-
- spec/internal/db/migrate/20251029222310_create_groups.rb
|
|
888
|
-
- spec/internal/db/migrate/20251029222311_create_group_memberships.rb
|
|
889
|
-
- spec/internal/db/migrate/20251029222312_create_accounts.rb
|
|
890
|
-
- spec/internal/db/migrate/20251029222313_create_terms.rb
|
|
891
|
-
- spec/internal/db/migrate/20251029222314_create_enrollments.rb
|
|
892
|
-
- spec/internal/db/migrate/20251029222315_create_sections.rb
|
|
893
|
-
- spec/internal/db/migrate/20251029222316_create_assignments.rb
|
|
894
|
-
- spec/internal/db/migrate/20251029222317_create_submissions.rb
|
|
895
|
-
- spec/internal/db/migrate/20251029222318_create_roles.rb
|
|
896
|
-
- spec/internal/db/migrate/20251029222319_create_admins.rb
|
|
897
|
-
- spec/internal/db/migrate/20251029222320_create_assignment_groups.rb
|
|
898
|
-
- spec/internal/db/migrate/20251029222321_create_context_modules.rb
|
|
899
|
-
- spec/internal/db/migrate/20251029222322_create_context_module_items.rb
|
|
900
|
-
- spec/internal/db/migrate/20251029222324_create_grading_periods.rb
|
|
901
|
-
- spec/internal/db/migrate/20251029222325_create_grading_period_groups.rb
|
|
902
|
-
- spec/internal/db/migrate/20251029222326_create_content_migrations.rb
|
|
903
|
-
- spec/internal/db/migrate/20251029222327_create_learning_outcomes.rb
|
|
904
|
-
- spec/internal/db/migrate/20251029222328_create_learning_outcome_results.rb
|
|
905
|
-
- spec/internal/db/migrate/20251029222330_create_rubrics.rb
|
|
906
|
-
- spec/internal/db/migrate/20251029222331_create_rubric_associations.rb
|
|
907
|
-
- spec/internal/db/migrate/20251029222332_create_rubric_assessments.rb
|
|
908
|
-
- spec/internal/db/migrate/20251029222334_create_assignment_overrides.rb
|
|
909
|
-
- spec/internal/db/migrate/20251029222335_create_scores.rb
|
|
910
|
-
- spec/internal/db/migrate/20251029223411_create_user_observers.rb
|
|
911
|
-
- spec/internal/db/migrate/20251029224009_create_course_nicknames.rb
|
|
912
|
-
- spec/internal/db/migrate/20251029224010_create_course_progresses.rb
|
|
913
777
|
- spec/internal/db/schema.rb
|
|
914
778
|
- spec/spec_helper.rb
|
|
915
779
|
- spec/support/fake_canvas.rb
|
|
@@ -938,8 +802,6 @@ test_files:
|
|
|
938
802
|
- spec/support/fixtures/reports/learning_outcome_results.csv
|
|
939
803
|
- spec/support/fixtures/reports/learning_outcomes.csv
|
|
940
804
|
- spec/support/fixtures/reports/provisioning_csv
|
|
941
|
-
- spec/support/fixtures/reports/provisioning_csv_unzipped/courses.csv
|
|
942
|
-
- spec/support/fixtures/reports/provisioning_csv_unzipped/users.csv
|
|
943
805
|
- spec/support/fixtures/reports/rubric_assessments.csv
|
|
944
806
|
- spec/support/fixtures/reports/rubric_associations.csv
|
|
945
807
|
- spec/support/fixtures/reports/rubrics.csv
|
|
@@ -1,35 +0,0 @@
|
|
|
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 Account < ApplicationRecord
|
|
10
|
-
include CanvasSync::Record
|
|
11
|
-
include CanvasSync::Concerns::ApiSyncable
|
|
12
|
-
# include CanvasSync::Concerns::Account::Ancestry # Add support for the ancestry Gem
|
|
13
|
-
# include CanvasSync::Concerns::LiveEventSync
|
|
14
|
-
# include CanvasSync::Concerns::DeletedScoping
|
|
15
|
-
|
|
16
|
-
canvas_sync_features :defaults
|
|
17
|
-
|
|
18
|
-
validates :canvas_id, uniqueness: true, presence: true
|
|
19
|
-
|
|
20
|
-
has_many :admins, primary_key: :canvas_id, foreign_key: :canvas_account_id
|
|
21
|
-
belongs_to :canvas_parent, class_name: 'Account', optional: true,
|
|
22
|
-
primary_key: :canvas_id, foreign_key: :canvas_parent_account_id
|
|
23
|
-
has_many :sub_accounts, class_name: 'Account',
|
|
24
|
-
primary_key: :canvas_id, foreign_key: :canvas_parent_account_id
|
|
25
|
-
has_many :groups, primary_key: :canvas_id, foreign_key: :canvas_account_id
|
|
26
|
-
|
|
27
|
-
scope :active, -> { where.not(workflow_state: 'deleted') }
|
|
28
|
-
# scope :should_canvas_sync, -> { active } # Optional - uses .active if not given
|
|
29
|
-
|
|
30
|
-
api_syncable({
|
|
31
|
-
name: :name,
|
|
32
|
-
workflow_state: :workflow_state,
|
|
33
|
-
canvas_parent_account_id: :parent_account_id,
|
|
34
|
-
}, -> (api) { api.account(canvas_id) })
|
|
35
|
-
end
|