add provisioning report and fix security issue
closes #10201 test plan * run report * report should contain all active accounts, users, course ... Change-Id: I591300670fb5fea0ca01b74c5fe90f0610997d24 Reviewed-on: https://gerrit.instructure.com/13260 Reviewed-by: Cody Cutrer <cody@instructure.com> Tested-by: Jenkins <jenkins@instructure.com>
This commit is contained in:
parent
e31aa27b6b
commit
3369c4e2b3
2
vendor/plugins/account_reports/app/views/accounts/_provisioning_csv_description.html.erb
vendored
Normal file
2
vendor/plugins/account_reports/app/views/accounts/_provisioning_csv_description.html.erb
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
<p><%= t('account_reports.sis_export.description.text', %{This report will export all the needed information that
|
||||
relates to provisioning Canvas in its respective categories.}) %></p>
|
3
vendor/plugins/account_reports/app/views/accounts/_sis_export_csv_description.html.erb
vendored
Normal file
3
vendor/plugins/account_reports/app/views/accounts/_sis_export_csv_description.html.erb
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
<p><%= t('account_reports.sis_export.description.text', %{ SIS Export report: This report will export all the needed
|
||||
files for Users, Accounts, Terms, Courses, Sections, Enrollments, Groups, Group Memberships, and Cross Listings for an
|
||||
SIS import in their respective categories.}) %></p>
|
|
@ -39,6 +39,7 @@ Rails.configuration.to_prepare do
|
|||
'sis_export_csv'=> {
|
||||
:title => 'SIS Export',
|
||||
:parameters_partial => true,
|
||||
:description_partial => true,
|
||||
:parameters => {
|
||||
:users => {
|
||||
:description => 'Get the SIS file for users'
|
||||
|
@ -68,6 +69,40 @@ Rails.configuration.to_prepare do
|
|||
:description => 'Get the SIS file for cross listed courses'
|
||||
},
|
||||
}
|
||||
},
|
||||
'provisioning_csv'=> {
|
||||
:title => 'Provisioning',
|
||||
:parameters_partial => 'sis_export_csv_parameters',
|
||||
:description_partial => true,
|
||||
:parameters => {
|
||||
:users => {
|
||||
:description => 'Get the Provisioning file for users'
|
||||
},
|
||||
:accounts => {
|
||||
:description => 'Get the Provisioning file for accounts'
|
||||
},
|
||||
:terms => {
|
||||
:description => 'Get the Provisioning file for terms'
|
||||
},
|
||||
:courses => {
|
||||
:description => 'Get the Provisioning file for courses'
|
||||
},
|
||||
:sections => {
|
||||
:description => 'Get the Provisioning file for sections'
|
||||
},
|
||||
:enrollments => {
|
||||
:description => 'Get the Provisioning file for enrollments'
|
||||
},
|
||||
:groups => {
|
||||
:description => 'Get the Provisioning file for groups'
|
||||
},
|
||||
:group_membership => {
|
||||
:description => 'Get the Provisioning file for group_membership'
|
||||
},
|
||||
:xlist => {
|
||||
:description => 'Get the Provisioning file for cross listed courses'
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
|
|
|
@ -132,237 +132,12 @@ module Canvas::AccountReports
|
|||
result
|
||||
end
|
||||
|
||||
SIS_CSV_REPORTS = ["users", "accounts", "terms", "courses", "sections", "enrollments", "groups", "group_membership", "xlist"]
|
||||
|
||||
def self.sis_export_csv(account_report)
|
||||
term = account_report.parameters["enrollment_term"].presence
|
||||
reports = SIS_CSV_REPORTS & account_report.parameters.keys
|
||||
|
||||
if reports.length == 0
|
||||
Canvas::AccountReports.message_recipient(account_report, "SIS export report for #{account_report.account.name} has been successfully generated.")
|
||||
elsif reports.length == 1
|
||||
csv = self.send(reports.first, term, account_report.account)
|
||||
Canvas::AccountReports.message_recipient(account_report, "SIS export report for #{account_report.account.name} has been successfully generated.", csv)
|
||||
csv
|
||||
else
|
||||
csvs = {}
|
||||
reports.each do |report_name|
|
||||
csvs[report_name] = self.send(report_name, term, account_report.account)
|
||||
end
|
||||
Canvas::AccountReports.message_recipient(account_report, "SIS export reports for #{account_report.account.name} have been successfully generated.", csvs)
|
||||
csvs
|
||||
end
|
||||
SisExporter.new(account_report, {:sis_format => true}).csv
|
||||
end
|
||||
|
||||
def self.users(term, account)
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
csv << ['user_id','login_id', 'password','first_name','last_name','email', 'status']
|
||||
pseudonym = account.pseudonyms.active.scoped(:include => [ :user], :conditions => "sis_user_id IS NOT NULL")
|
||||
pseudonym.each do |i|
|
||||
row = []
|
||||
row << i.sis_user_id
|
||||
row << i.login
|
||||
row << nil
|
||||
row << i.user.first_name
|
||||
row << i.user.last_name
|
||||
row << i.user.email
|
||||
row << i.workflow_state
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def self.accounts(term, account)
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
csv << ['account_id','parent_account_id', 'name','status']
|
||||
Account.find_each(:select => "accounts.*, parent_account.sis_source_id as parent_sis_source_id",
|
||||
:joins => "INNER JOIN accounts as parent_account ON accounts.parent_account_id = parent_account.id",
|
||||
:conditions => "accounts.sis_source_id IS NOT NULL and accounts.workflow_state = 'active' and accounts.root_account_id = #{account.id}") do |a|
|
||||
row = []
|
||||
row << a.sis_source_id
|
||||
row << a.parent_sis_source_id
|
||||
row << a.name
|
||||
row << a.workflow_state
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def self.terms(term, account)
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
csv << ['term_id','name','status', 'start_date', 'end_date']
|
||||
terms = account.enrollment_terms.scoped(:conditions => "sis_source_id IS NOT NULL")
|
||||
terms.each do |t|
|
||||
row = []
|
||||
row << t.sis_source_id
|
||||
row << t.name
|
||||
row << t.workflow_state
|
||||
row << t.start_at.try(:iso8601)
|
||||
row << t.end_at.try(:iso8601)
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def self.courses(term, account)
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
csv << ['course_id','short_name', 'long_name','account_id','term_id', 'status', 'start_date', 'end_date']
|
||||
if term
|
||||
term = " and enrollment_term_id =#{term}"
|
||||
else
|
||||
term = ""
|
||||
end
|
||||
courses = account.all_courses.active.scoped(:conditions => "sis_source_id IS NOT NULL#{term}", :include => [:account, :enrollment_term])
|
||||
courses.find_each do |c|
|
||||
row = []
|
||||
row << c.sis_source_id
|
||||
row << c.course_code
|
||||
row << c.name
|
||||
row << c.account.try(:sis_source_id)
|
||||
row << c.enrollment_term.try(:sis_source_id)
|
||||
row << 'active'
|
||||
if c.restrict_enrollments_to_course_dates
|
||||
row << c.start_at.try(:iso8601)
|
||||
row << c.conclude_at.try(:iso8601)
|
||||
else
|
||||
row << nil
|
||||
row << nil
|
||||
end
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def self.sections(term, account)
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
csv << ['section_id', 'course_id', 'name', 'status', 'start_date', 'end_date', 'account_id']
|
||||
|
||||
if term
|
||||
term = " and courses.enrollment_term_id =#{term}"
|
||||
else
|
||||
term = ""
|
||||
end
|
||||
|
||||
sections = account.course_sections.active.scoped(:include => [:course, :account, :nonxlist_course], :conditions => "course_sections.sis_source_id IS NOT NULL#{term}")
|
||||
sections.find_each do |s|
|
||||
row = []
|
||||
row << s.sis_source_id
|
||||
row << (s.nonxlist_course || s.course).sis_source_id
|
||||
row << s.name
|
||||
row << s.workflow_state
|
||||
if s.restrict_enrollments_to_section_dates
|
||||
row << s.start_at.try(:iso8601)
|
||||
row << s.end_at.try(:iso8601)
|
||||
else
|
||||
row << nil
|
||||
row << nil
|
||||
end
|
||||
row << s.account.try(:sis_source_id)
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def self.enrollments(term, account)
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
csv << ['course_id', 'user_id', 'role', 'section_id', 'status', 'associated_user_id']
|
||||
if term
|
||||
term = " and courses.enrollment_term_id = #{term}"
|
||||
else
|
||||
term = ""
|
||||
end
|
||||
Enrollment.find_each(:select => "enrollments.*, courses.sis_source_id as course_sis_id,
|
||||
course_sections.sis_source_id as course_section_sis_id,
|
||||
pseudonyms.sis_user_id as pseudonym_sis_id,
|
||||
associated_user.sis_user_id as associated_user_sis_id,
|
||||
CASE WHEN enrollments.type = 'TeacherEnrollment' THEN 'teacher'
|
||||
WHEN enrollments.type='TaEnrollment' THEN 'ta'
|
||||
WHEN enrollments.type='StudentEnrollment' THEN 'student'
|
||||
WHEN enrollments.type='ObserverEnrollment' THEN 'observer' END as enrollment_type",
|
||||
:joins => "INNER JOIN courses on courses.id = enrollments.course_id
|
||||
INNER JOIN course_sections on course_sections.id = enrollments.course_section_id
|
||||
INNER JOIN pseudonyms ON pseudonyms.user_id=enrollments.user_id
|
||||
AND pseudonyms.sis_user_id IS NOT NULL AND pseudonyms.account_id=#{account.id}
|
||||
LEFT OUTER JOIN pseudonyms as associated_user on associated_user.user_id = enrollments.associated_user_id
|
||||
AND pseudonyms.sis_user_id IS NOT NULL AND pseudonyms.account_id=#{account.id}",
|
||||
:conditions => "enrollments.root_account_id = #{account.id}
|
||||
and enrollments.workflow_state = 'active'
|
||||
and pseudonyms.sis_user_id IS NOT NULL
|
||||
and (courses.sis_source_id IS NOT NULL or course_sections.sis_source_id IS NOT NULL)
|
||||
#{term}") do |e|
|
||||
row = []
|
||||
row << e.course_sis_id
|
||||
row << e.pseudonym_sis_id
|
||||
row << e.enrollment_type
|
||||
row << e.course_section_sis_id
|
||||
row << 'active'
|
||||
row << e.associated_user_sis_id
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def self.groups(term, account)
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
csv << ['group_id', 'account_id', 'name', 'status']
|
||||
Group.find_each(:select => "groups.*, accounts.sis_source_id as account_sis_id",
|
||||
:joins => "INNER JOIN accounts on accounts.id = groups.account_id",
|
||||
:conditions => "groups.sis_source_id IS NOT NULL and groups.root_account_id = #{account.id}") do |g|
|
||||
row = []
|
||||
row << g.sis_source_id
|
||||
row << g.account_sis_id
|
||||
row << g.name
|
||||
row << g.workflow_state
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def self.group_membership(term, account)
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
csv << ['group_id', 'user_id', 'status']
|
||||
GroupMembership.find_each(:select => "group_memberships.*, groups.sis_source_id as group_sis_id, pseudonyms.sis_user_id as users_sis_id",
|
||||
:joins => "INNER JOIN groups on groups.id = group_memberships.group_id
|
||||
INNER JOIN pseudonyms ON pseudonyms.user_id=group_memberships.user_id
|
||||
AND pseudonyms.sis_user_id IS NOT NULL AND pseudonyms.account_id=#{account.id}",
|
||||
:conditions => "groups.root_account_id = #{account.id}
|
||||
and group_memberships.sis_batch_id IS NOT NULL
|
||||
and group_memberships.workflow_state = 'accepted'") do |gm|
|
||||
row = []
|
||||
row << gm.group_sis_id
|
||||
row << gm.users_sis_id
|
||||
row << gm.workflow_state
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def self.xlist(term, account)
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
csv << ['xlist_course_id','section_id', 'status']
|
||||
if term
|
||||
term = " and courses.enrollment_term_id =#{term}"
|
||||
else
|
||||
term = ""
|
||||
end
|
||||
xlists = account.course_sections.active.scoped(:include => [:course, :account, :nonxlist_course], :conditions => "courses.sis_source_id IS NOT NULL AND course_sections.sis_source_id IS NOT NULL AND course_sections.nonxlist_course_id IS NOT NULL#{term}")
|
||||
xlists.find_each do |x|
|
||||
row = []
|
||||
row << x.course.sis_source_id
|
||||
row << x.sis_source_id
|
||||
row << x.workflow_state
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
def self.provisioning_csv(account_report)
|
||||
SisExporter.new(account_report, {:sis_format => false}).csv
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,319 @@
|
|||
#
|
||||
# Copyright (C) 2012 Instructure, Inc.
|
||||
#
|
||||
# This file is part of Canvas.
|
||||
#
|
||||
# Canvas is free software: you can redistribute it and/or modify it under
|
||||
# the terms of the GNU Affero General Public License as published by the Free
|
||||
# Software Foundation, version 3 of the License.
|
||||
#
|
||||
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
# details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
module Canvas::AccountReports
|
||||
class SisExporter
|
||||
SIS_CSV_REPORTS = ["users", "accounts", "terms", "courses", "sections", "enrollments", "groups", "group_membership", "xlist"]
|
||||
|
||||
def initialize(account_report, params = {})
|
||||
@account_report = account_report
|
||||
@term = @account_report.parameters["enrollment_term"].presence
|
||||
@account = @account_report.account
|
||||
@reports = SIS_CSV_REPORTS & @account_report.parameters.keys
|
||||
@sis_format = params[:sis_format]
|
||||
end
|
||||
|
||||
def csv
|
||||
if @reports.length == 0
|
||||
Canvas::AccountReports.message_recipient(@account_report, "SIS export report for #{@account.name} has been successfully generated.")
|
||||
elsif @reports.length == 1
|
||||
csv = self.send(@reports.first)
|
||||
Canvas::AccountReports.message_recipient(@account_report, "SIS export report for #{@account.name} has been successfully generated.", csv)
|
||||
csv
|
||||
else
|
||||
csvs = {}
|
||||
|
||||
@reports.each do |report_name|
|
||||
csvs[report_name] = self.send(report_name)
|
||||
end
|
||||
Canvas::AccountReports.message_recipient(@account_report, "SIS export reports for #{@account.name} have been successfully generated.", csvs)
|
||||
csvs
|
||||
end
|
||||
end
|
||||
|
||||
def users
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
headers = ['user_id','login_id', 'password','first_name','last_name','email', 'status']
|
||||
headers.unshift 'canvas_user_id' unless @sis_format
|
||||
csv << headers
|
||||
users = @account.pseudonyms.active.scoped(:include => :user)
|
||||
users = users.scoped(:conditions => 'sis_user_id IS NOT NULL') if @sis_format
|
||||
users.find_each do |i|
|
||||
row = []
|
||||
row << i.user_id unless @sis_format
|
||||
row << i.sis_user_id
|
||||
row << i.login
|
||||
row << nil
|
||||
row << i.user.first_name
|
||||
row << i.user.last_name
|
||||
row << i.user.email
|
||||
row << i.workflow_state
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def accounts
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
headers = ['account_id','parent_account_id', 'name','status']
|
||||
headers.unshift 'canvas_account_id' unless @sis_format
|
||||
csv << headers
|
||||
accounts = Account.active.scoped(:conditions => ["accounts.root_account_id=?", @account.id],
|
||||
:select => "accounts.*, parent_account.sis_source_id as parent_sis_source_id",
|
||||
:joins => "INNER JOIN accounts as parent_account ON accounts.parent_account_id = parent_account.id")
|
||||
accounts = accounts.scoped(:conditions => "accounts.sis_source_id IS NOT NULL") if @sis_format
|
||||
accounts.find_each do |a|
|
||||
row = []
|
||||
row << a.id unless @sis_format
|
||||
row << a.sis_source_id
|
||||
row << a.parent_sis_source_id
|
||||
row << a.name
|
||||
row << a.workflow_state
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def terms
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
headers = ['term_id','name','status', 'start_date', 'end_date']
|
||||
headers.unshift 'canvas_term_id' unless @sis_format
|
||||
csv << headers
|
||||
terms = @account.enrollment_terms.active
|
||||
terms = terms.scoped(:conditions => "sis_source_id IS NOT NULL") if @sis_format
|
||||
terms.each do |t|
|
||||
row = []
|
||||
row << t.id unless @sis_format
|
||||
row << t.sis_source_id
|
||||
row << t.name
|
||||
row << t.workflow_state
|
||||
row << t.start_at.try(:iso8601)
|
||||
row << t.end_at.try(:iso8601)
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def courses
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
headers = ['course_id','short_name', 'long_name','account_id','term_id', 'status', 'start_date', 'end_date']
|
||||
headers.unshift 'canvas_course_id' unless @sis_format
|
||||
csv << headers
|
||||
courses = @account.all_courses.active.scoped(:include => [:account, :enrollment_term],
|
||||
:select => "courses.*,
|
||||
CASE WHEN courses.workflow_state = 'claimed' THEN 'unpublished'
|
||||
WHEN courses.workflow_state = 'created' THEN 'unpublished'
|
||||
WHEN courses.workflow_state = 'available' THEN 'active' END as course_state")
|
||||
courses = courses.scoped(:conditions => ["enrollment_term_id=?", @term]) if @term
|
||||
courses = courses.scoped(:conditions => "sis_source_id IS NOT NULL") if @sis_format
|
||||
|
||||
courses.find_each do |c|
|
||||
row = []
|
||||
row << c.id unless @sis_format
|
||||
row << c.sis_source_id
|
||||
row << c.course_code
|
||||
row << c.name
|
||||
row << c.account.try(:sis_source_id)
|
||||
row << c.enrollment_term.try(:sis_source_id)
|
||||
row << 'active' if @sis_format
|
||||
row << c.course_state unless @sis_format
|
||||
if c.restrict_enrollments_to_course_dates
|
||||
row << c.start_at.try(:iso8601)
|
||||
row << c.conclude_at.try(:iso8601)
|
||||
else
|
||||
row << nil
|
||||
row << nil
|
||||
end
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def sections
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
headers = ['section_id', 'course_id', 'name', 'status', 'start_date', 'end_date', 'account_id']
|
||||
unless @sis_format
|
||||
headers = [ 'canvas_section_id', 'section_id', 'canvas_course_id', 'course_id', 'name', 'status', 'start_date', 'end_date', 'canvas_account_id', 'account_id']
|
||||
end
|
||||
csv << headers
|
||||
sections = @account.course_sections.active.scoped(
|
||||
:select => "course_sections.*,
|
||||
Coalesce(non_xlist_courses.sis_source_id, real_courses.sis_source_id) as section_course_sis_id,
|
||||
accounts.sis_source_id as account_sis_id",
|
||||
:joins => "INNER JOIN courses as real_courses ON course_sections.course_id = real_courses.id
|
||||
LEFT OUTER JOIN courses as non_xlist_courses ON course_sections.nonxlist_course_id = non_xlist_courses.id
|
||||
LEFT OUTER JOIN accounts on course_sections.account_id = accounts.id")
|
||||
sections = sections.scoped(:conditions => ["real_courses.enrollment_term_id=?", @term]) if @term
|
||||
sections = sections.scoped(:conditions => "course_sections.sis_source_id IS NOT NULL
|
||||
and (non_xlist_courses.sis_source_id IS NOT NULL
|
||||
or real_courses.sis_source_id IS NOT NULL)") if @sis_format
|
||||
sections.find_each do |s|
|
||||
row = []
|
||||
row << s.id unless @sis_format
|
||||
row << s.sis_source_id
|
||||
row << (s.nonxlist_course_id || s.course_id) unless @sis_format
|
||||
row << s.section_course_sis_id
|
||||
row << s.name
|
||||
row << s.workflow_state
|
||||
if s.restrict_enrollments_to_section_dates
|
||||
row << s.start_at.try(:iso8601)
|
||||
row << s.end_at.try(:iso8601)
|
||||
else
|
||||
row << nil
|
||||
row << nil
|
||||
end
|
||||
row << s.account_id unless @sis_format
|
||||
row << s.try(:account_sis_id)
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def enrollments
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
headers = ['course_id', 'user_id', 'role', 'section_id', 'status', 'associated_user_id']
|
||||
unless @sis_format
|
||||
headers = ['canvas_course_id', 'course_id', 'canvas_user_id', 'user_id', 'role', 'canvas_section_id', 'section_id', 'status', 'canvas_associated_user_id', 'associated_user_id']
|
||||
end
|
||||
csv << headers
|
||||
parameters = {}
|
||||
parameters[:root_account_id] = @account.id
|
||||
if @term
|
||||
parameters[:term ] = @term
|
||||
end
|
||||
enrollments = Enrollment.active.scoped(:select => "enrollments.*, courses.sis_source_id as course_sis_id,
|
||||
course_sections.sis_source_id as course_section_sis_id,
|
||||
pseudonyms.sis_user_id as pseudonym_sis_id,
|
||||
associated_user.sis_user_id as associated_user_sis_id,
|
||||
CASE WHEN enrollments.type = 'TeacherEnrollment' THEN 'teacher'
|
||||
WHEN enrollments.type='TaEnrollment' THEN 'ta'
|
||||
WHEN enrollments.type='StudentEnrollment' THEN 'student'
|
||||
WHEN enrollments.type='ObserverEnrollment' THEN 'observer' END as enrollment_type",
|
||||
:joins => "INNER JOIN courses on courses.id = enrollments.course_id
|
||||
INNER JOIN course_sections on course_sections.id = enrollments.course_section_id
|
||||
INNER JOIN pseudonyms ON pseudonyms.user_id=enrollments.user_id
|
||||
LEFT OUTER JOIN pseudonyms as associated_user on associated_user.user_id = enrollments.associated_user_id
|
||||
AND associated_user.account_id = #{@account.id}",
|
||||
:conditions => ["enrollments.root_account_id = :root_account_id
|
||||
AND enrollments.workflow_state = 'active'
|
||||
AND pseudonyms.account_id = :root_account_id", parameters])
|
||||
enrollments = enrollments.scoped(:conditions => ["courses.enrollment_term_id = :term", parameters]) if @term
|
||||
enrollments = enrollments.scoped(:conditions => "pseudonyms.sis_user_id IS NOT NULL
|
||||
AND (courses.sis_source_id IS NOT NULL or course_sections.sis_source_id IS NOT NULL)") if @sis_format
|
||||
enrollments.find_each do |e|
|
||||
row = []
|
||||
row << e.course_id unless @sis_format
|
||||
row << e.course_sis_id
|
||||
row << e.user_id unless @sis_format
|
||||
row << e.pseudonym_sis_id
|
||||
row << e.enrollment_type
|
||||
row << e.course_section_id unless @sis_format
|
||||
row << e.course_section_sis_id
|
||||
row << 'active'
|
||||
row << e.associated_user_id unless @sis_format
|
||||
row << e.associated_user_sis_id
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def groups
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
headers = ['group_id', 'account_id', 'name', 'status']
|
||||
unless @sis_format
|
||||
headers = ['canvas_group_id', 'group_id', 'canvas_account_id', 'account_id', 'name', 'status']
|
||||
end
|
||||
csv << headers
|
||||
groups = Group.active.scoped(:select => "groups.*, accounts.sis_source_id as account_sis_id",
|
||||
:joins => "INNER JOIN accounts on accounts.id = groups.account_id",
|
||||
:conditions => ["groups.root_account_id=?", @account.id])
|
||||
groups = groups.scoped(:conditions => "groups.sis_source_id IS NOT NULL") if @sis_format
|
||||
groups.find_each do |g|
|
||||
row = []
|
||||
row << g.id unless @sis_format
|
||||
row << g.sis_source_id
|
||||
row << g.account_id unless @sis_format
|
||||
row << g.account_sis_id
|
||||
row << g.name
|
||||
row << g.workflow_state
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def group_membership
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
headers = ['group_id', 'user_id', 'status']
|
||||
unless @sis_format
|
||||
headers = ['canvas_group_id', 'group_id','canvas_user_id', 'user_id', 'status']
|
||||
end
|
||||
csv << headers
|
||||
group_members = GroupMembership.active.scoped(:select => "group_memberships.*, groups.sis_source_id as group_sis_id, pseudonyms.sis_user_id as user_sis_id",
|
||||
:joins => "INNER JOIN groups on groups.id = group_memberships.group_id
|
||||
INNER JOIN pseudonyms ON pseudonyms.user_id=group_memberships.user_id",
|
||||
:conditions => ["groups.root_account_id=?
|
||||
AND pseudonyms.account_id=?
|
||||
AND group_memberships.workflow_state in ('accepted', 'invited')", @account.id, @account.id])
|
||||
group_members = group_members.scoped(:conditions => "pseudonyms.sis_user_id IS NOT NULL
|
||||
AND group_memberships.sis_batch_id IS NOT NULL
|
||||
AND group_memberships.workflow_state in ('accepted')") if @sis_format
|
||||
group_members.find_each do |gm|
|
||||
row = []
|
||||
row << gm.group_id unless @sis_format
|
||||
row << gm.group_sis_id
|
||||
row << gm.user_id unless @sis_format
|
||||
row << gm.user_sis_id
|
||||
row << gm.workflow_state
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
|
||||
def xlist
|
||||
list_csv = FasterCSV.generate do |csv|
|
||||
headers = ['xlist_course_id', 'section_id', 'status']
|
||||
unless @sis_format
|
||||
headers = ['canvas_xlist_course_id', 'xlist_course_id', 'canvas_section_id', 'section_id', 'status']
|
||||
end
|
||||
csv << headers
|
||||
cross_listings = @account.course_sections.active.scoped(:include => [:course, :account, :nonxlist_course],
|
||||
:conditions => "course_sections.nonxlist_course_id IS NOT NULL")
|
||||
cross_listings = cross_listings.scoped(:conditions => ["courses.enrollment_term_id=?", @term]) if @term
|
||||
cross_listings = cross_listings.scoped(:conditions => "courses.sis_source_id IS NOT NULL AND course_sections.sis_source_id IS NOT NULL") if @sis_format
|
||||
cross_listings.find_each do |x|
|
||||
row = []
|
||||
row << x.course_id unless @sis_format
|
||||
row << x.course.sis_source_id
|
||||
row << x.id unless @sis_format
|
||||
row << x.sis_source_id
|
||||
row << x.workflow_state
|
||||
csv << row
|
||||
end
|
||||
end
|
||||
list_csv
|
||||
end
|
||||
end
|
||||
end
|
|
@ -350,706 +350,6 @@ describe "Default Account Reports" do
|
|||
|
||||
end
|
||||
|
||||
def run_report(parameters = {}, column = 0)
|
||||
|
||||
account_report = AccountReport.new(:user => @admin, :account => @account, :report_type => "sis_export_csv")
|
||||
account_report.parameters = {}
|
||||
account_report.parameters = parameters
|
||||
account_report.save
|
||||
csv_report = Canvas::AccountReports::Default.sis_export_csv(account_report)
|
||||
if csv_report.is_a? Hash
|
||||
csv_report.inject({}) do |result, (key, csv)|
|
||||
all_parsed = FasterCSV.parse(csv).to_a
|
||||
all_parsed[1..-1].sort_by { |r| r[column] }
|
||||
result[key] = all_parsed
|
||||
result
|
||||
end
|
||||
else
|
||||
all_parsed = FasterCSV.parse(csv_report).to_a
|
||||
all_parsed[1..-1].sort_by { |r| r[column] }
|
||||
end
|
||||
end
|
||||
|
||||
describe "SIS export reports" do
|
||||
|
||||
it "should run the SIS Users" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
@admin = account_admin_user(:account => @account)
|
||||
user1 = user_with_pseudonym(:active_all => true, :account => @account, :name => "John St. Clair", :sortable_name => "St. Clair, John", :username => 'john@stclair.com')
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_01"
|
||||
@user.pseudonym.save!
|
||||
user2 = user_with_pseudonym(:active_all => true, :username => 'micheal@michaelbolton.com', :name => 'Michael Bolton', :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_02"
|
||||
@user.pseudonym.save!
|
||||
user3 = user_with_pseudonym(:name => 'Rick Astley', :account => @account)
|
||||
#user3 has no sis_id and should not be in the report
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["users"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 2
|
||||
|
||||
parsed[0][0].should == user1.pseudonym.sis_user_id
|
||||
parsed[0][1].should == user1.pseudonym.login
|
||||
parsed[0][2].should == nil
|
||||
parsed[0][3].should == "John St."
|
||||
parsed[0][4].should == "Clair"
|
||||
parsed[0][5].should == "john@stclair.com"
|
||||
parsed[0][6].should == "active"
|
||||
|
||||
parsed[1][0].should == user2.pseudonym.sis_user_id
|
||||
parsed[1][1].should == user2.pseudonym.login
|
||||
parsed[1][2].should == nil
|
||||
parsed[1][3].should == "Michael"
|
||||
parsed[1][4].should == "Bolton"
|
||||
parsed[1][5].should == "micheal@michaelbolton.com"
|
||||
parsed[1][6].should == "active"
|
||||
|
||||
parameters = {}
|
||||
parameters["users"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 2
|
||||
|
||||
parsed[0].should == ["user_sis_id_01", "john@stclair.com", nil, "John St.", "Clair", "john@stclair.com", "active"]
|
||||
parsed[1].should == ["user_sis_id_02", "micheal@michaelbolton.com", nil, "Michael", "Bolton", "micheal@michaelbolton.com", "active"]
|
||||
end
|
||||
|
||||
it "should run the SIS Accounts" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
sub_sub_account = Account.create(:parent_account => sub_account, :name => 'ESL')
|
||||
sub_sub_account.sis_source_id = 'subsub1'
|
||||
sub_sub_account.save!
|
||||
sub_account2 = Account.create(:parent_account => @account, :name => 'Math')
|
||||
sub_account2.sis_source_id = 'sub2'
|
||||
sub_account2.save!
|
||||
sub_account3 = Account.create(:parent_account => @account, :name => 'other')
|
||||
#sub_account 3 does not have sis id and should not be in the report
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["accounts"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 3
|
||||
|
||||
parsed[0][0].should == sub_account.sis_source_id
|
||||
parsed[0][1].should == nil
|
||||
parsed[0][2].should == "English"
|
||||
parsed[0][3].should == "active"
|
||||
|
||||
parsed[1][0].should == sub_account2.sis_source_id
|
||||
parsed[1][1].should == nil
|
||||
parsed[1][2].should == "Math"
|
||||
parsed[1][3].should == "active"
|
||||
|
||||
parsed[2][0].should == sub_sub_account.sis_source_id
|
||||
parsed[2][1].should == sub_account.sis_source_id
|
||||
parsed[2][2].should == "ESL"
|
||||
parsed[2][3].should == "active"
|
||||
|
||||
parameters = {}
|
||||
parameters["accounts"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 3
|
||||
parsed[0].should == ["sub1", nil, "English", "active"]
|
||||
parsed[1].should == ["sub2", nil, "Math", "active"]
|
||||
parsed[2].should == ["subsub1", "sub1", "ESL", "active"]
|
||||
end
|
||||
|
||||
it "should run the SIS Terms" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
term2 = EnrollmentTerm.create(:name => 'Winter', :start_at => '07-01-2013', :end_at => '28-04-2013')
|
||||
term2.root_account = @account
|
||||
term2.sis_source_id = 'winter13'
|
||||
term2.save!
|
||||
#default term should not be included in the report since it does not have an sis id
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["terms"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 2
|
||||
|
||||
parsed[0][0].should == term1.sis_source_id
|
||||
parsed[0][1].should == term1.name
|
||||
parsed[0][2].should == "active"
|
||||
parsed[0][3].should == term1.start_at.iso8601
|
||||
parsed[0][4].should == term1.end_at.iso8601
|
||||
|
||||
parsed[1][0].should == term2.sis_source_id
|
||||
parsed[1][1].should == term2.name
|
||||
parsed[1][2].should == "active"
|
||||
parsed[1][3].should == term2.start_at.iso8601
|
||||
parsed[1][4].should == term2.end_at.iso8601
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["terms"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == ["fall12", "Fall", "active", "2012-08-20T00:00:00Z", "2012-12-20T00:00:00Z"]
|
||||
parsed[1].should == ["winter13", "Winter", "active", "2013-01-07T00:00:00Z", "2013-04-28T00:00:00Z"]
|
||||
end
|
||||
|
||||
it "should run the SIS Courses" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
|
||||
start_at = 1.day.ago
|
||||
end_at = 10.days.from_now
|
||||
|
||||
course1 = Course.new(:name => 'English 101', :course_code => 'ENG101', :start_at => start_at, :conclude_at => end_at, :account => sub_account, :enrollment_term => term1)
|
||||
course1.save
|
||||
course1.sis_source_id = "SIS_COURSE_ID_1"
|
||||
course1.restrict_enrollments_to_course_dates = true
|
||||
course1.save!
|
||||
|
||||
course2 = Course.new(:name => 'Math 101', :course_code => 'MAT101', :conclude_at => end_at, :account => @account)
|
||||
course2.save
|
||||
course2.sis_source_id = "SIS_COURSE_ID_2"
|
||||
course2.restrict_enrollments_to_course_dates = true
|
||||
course2.save!
|
||||
|
||||
course3 = Course.new(:name => 'Science 101', :course_code => 'SCI101', :account => @account)
|
||||
course3.save
|
||||
course3.sis_source_id = "SIS_COURSE_ID_3"
|
||||
course3.save!
|
||||
|
||||
course4 = Course.new(:name => 'self help')
|
||||
#course4 should not show up since it does not have sis id
|
||||
|
||||
course5 = Course.new(:name => 'math 100', :course_code => 'ENG101', :start_at => start_at, :conclude_at => end_at, :account => sub_account, :enrollment_term => term1)
|
||||
course5.workflow_state = 'completed'
|
||||
course5.save!
|
||||
#course5 should not show up since it is not active
|
||||
parameters = {}
|
||||
parameters["courses"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 3
|
||||
|
||||
parsed[0][0].should == course1.sis_source_id
|
||||
parsed[0][1].should == course1.course_code
|
||||
parsed[0][2].should == course1.name
|
||||
parsed[0][3].should == sub_account.sis_source_id
|
||||
parsed[0][4].should == term1.sis_source_id
|
||||
parsed[0][5].should == "active"
|
||||
parsed[0][6].should == start_at.iso8601
|
||||
parsed[0][7].should == end_at.iso8601
|
||||
|
||||
parsed[1][0].should == course2.sis_source_id
|
||||
parsed[1][1].should == course2.course_code
|
||||
parsed[1][2].should == course2.name
|
||||
parsed[1][3].should == nil
|
||||
parsed[1][4].should == nil
|
||||
parsed[1][5].should == "active"
|
||||
parsed[1][6].should == nil
|
||||
parsed[1][7].should == end_at.iso8601
|
||||
|
||||
parsed[2][0].should == course3.sis_source_id
|
||||
parsed[2][1].should == course3.course_code
|
||||
parsed[2][2].should == course3.name
|
||||
parsed[2][3].should == nil
|
||||
parsed[2][4].should == nil
|
||||
parsed[2][5].should == "active"
|
||||
parsed[2][6].should == nil
|
||||
parsed[2][7].should == nil
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["courses"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == ["SIS_COURSE_ID_2", "MAT101", "Math 101", nil, nil, "active", nil, end_at.iso8601]
|
||||
parsed[1].should == ["SIS_COURSE_ID_3", "SCI101", "Science 101", nil, nil, "active", nil, nil]
|
||||
end
|
||||
|
||||
it "should run the SIS Sections" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
|
||||
start_at = 1.day.ago
|
||||
end_at = 10.days.from_now
|
||||
|
||||
course1 = Course.new(:name => 'English 101', :course_code => 'ENG101', :start_at => start_at, :conclude_at => end_at, :account => sub_account)
|
||||
course1.save
|
||||
course1.sis_source_id = "SIS_COURSE_ID_1"
|
||||
course1.save!
|
||||
|
||||
course2 = Course.new(:name => 'Math 101', :course_code => 'MAT101', :conclude_at => end_at, :account => @account, :enrollment_term => term1)
|
||||
course2.save
|
||||
course2.sis_source_id = "SIS_COURSE_ID_2"
|
||||
course2.save!
|
||||
|
||||
section1 = CourseSection.new(:name => 'English_01', :course => course1, :account => sub_account, :start_at => start_at, :end_at => end_at)
|
||||
section1.sis_source_id = 'english_section_1'
|
||||
section1.root_account_id = @account.id
|
||||
section1.restrict_enrollments_to_section_dates = true
|
||||
section1.save!
|
||||
|
||||
section2 = CourseSection.new(:name => 'English_02', :course => course1, :end_at => end_at)
|
||||
section2.sis_source_id = 'english_section_2'
|
||||
section2.root_account_id = @account.id
|
||||
section2.restrict_enrollments_to_section_dates = true
|
||||
section2.save!
|
||||
|
||||
section3 = CourseSection.new(:name => 'Math_01', :course => course2, :end_at => end_at)
|
||||
section3.sis_source_id = 'english_section_3'
|
||||
section3.root_account_id = @account.id
|
||||
section3.restrict_enrollments_to_section_dates = true
|
||||
section3.save!
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["sections"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 2
|
||||
|
||||
parsed[0][0].should == section1.sis_source_id
|
||||
parsed[0][1].should == course1.sis_source_id
|
||||
parsed[0][2].should == section1.name
|
||||
parsed[0][3].should == "active"
|
||||
parsed[0][4].should == start_at.iso8601
|
||||
parsed[0][5].should == end_at.iso8601
|
||||
parsed[0][6].should == sub_account.sis_source_id
|
||||
|
||||
parsed[1][0].should == section2.sis_source_id
|
||||
parsed[1][1].should == course1.sis_source_id
|
||||
parsed[1][2].should == section2.name
|
||||
parsed[1][3].should == "active"
|
||||
parsed[1][4].should == nil
|
||||
parsed[1][5].should == end_at.iso8601
|
||||
parsed[1][6].should == nil
|
||||
|
||||
parameters = {}
|
||||
parameters["sections"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 3
|
||||
|
||||
parsed[0][0].should == section1.sis_source_id
|
||||
parsed[0][1].should == course1.sis_source_id
|
||||
parsed[0][2].should == section1.name
|
||||
parsed[0][3].should == "active"
|
||||
parsed[0][4].should == start_at.iso8601
|
||||
parsed[0][5].should == end_at.iso8601
|
||||
parsed[0][6].should == sub_account.sis_source_id
|
||||
|
||||
parsed[1][0].should == section2.sis_source_id
|
||||
parsed[1][1].should == course1.sis_source_id
|
||||
parsed[1][2].should == section2.name
|
||||
parsed[1][3].should == "active"
|
||||
parsed[1][4].should == nil
|
||||
parsed[1][5].should == end_at.iso8601
|
||||
parsed[1][6].should == nil
|
||||
|
||||
parsed[2].should == ["english_section_3", "SIS_COURSE_ID_2", "Math_01", "active", nil, end_at.iso8601, nil]
|
||||
|
||||
end
|
||||
|
||||
it "should run the SIS Enrollments" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
|
||||
course1 = Course.new(:name => 'English 101', :course_code => 'ENG101', :account => @account)
|
||||
course1.save
|
||||
course1.sis_source_id = "SIS_COURSE_ID_1"
|
||||
course1.save!
|
||||
course2 = Course.new(:name => 'Math 101', :course_code => 'MAT101', :account => @account, :enrollment_term => term1)
|
||||
course2.save
|
||||
course2.sis_source_id = "SIS_COURSE_ID_2"
|
||||
course2.save!
|
||||
course3 = Course.new(:name => 'Science 101', :course_code => 'SCI101', :account => @account)
|
||||
course3.save!
|
||||
#this course should not be in the report since it does not have an sis id
|
||||
section1 = CourseSection.new(:name => 'sci_01', :course => course3)
|
||||
section1.sis_source_id = 'science_section_1'
|
||||
section1.root_account_id = @account.id
|
||||
section1.save!
|
||||
|
||||
user1 = user_with_pseudonym(:active_all => true, :account => @account, :name => "John St. Clair", :sortable_name => "St. Clair, John", :username => 'john@stclair.com')
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_01"
|
||||
@user.pseudonym.save!
|
||||
user2 = user_with_pseudonym(:active_all => true, :username => 'micheal@michaelbolton.com', :name => 'Michael Bolton', :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_02"
|
||||
@user.pseudonym.save!
|
||||
user3 = user_with_pseudonym(:active_all => true, :account => @account, :name => "Rick Astley", :sortable_name => "Astley, Rick", :username => 'rick@roll.com')
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_03"
|
||||
@user.pseudonym.save!
|
||||
user4 = user_with_pseudonym(:active_all => true, :username => 'jason@donovan.com', :name => 'Jason Donovan', :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_04"
|
||||
@user.pseudonym.save!
|
||||
user5 = user_with_pseudonym(:name => 'James Brown', :account => @account)
|
||||
#user5 has no sis_id and should not be in the report
|
||||
user6 = user_with_pseudonym(:active_all => true, :username => 'john@smith.com', :name => 'John Smith',:sortable_name => "Smith, John", :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_06"
|
||||
@user.pseudonym.save!
|
||||
|
||||
enrollment1 = course1.enroll_user(user1, 'ObserverEnrollment')
|
||||
enrollment1.invite
|
||||
enrollment1.accept
|
||||
enrollment1.save!
|
||||
enrollment2 = course3.enroll_user(user2, 'StudentEnrollment')
|
||||
enrollment2.invite
|
||||
enrollment2.accept
|
||||
enrollment2.save!
|
||||
enrollment3 = course1.enroll_user(user2, 'TaEnrollment')
|
||||
enrollment3.accept
|
||||
enrollment3.save!
|
||||
user2.reload
|
||||
enrollment4 = course1.enroll_user(user3, 'StudentEnrollment')
|
||||
enrollment4.invite
|
||||
enrollment4.accept
|
||||
enrollment4.save!
|
||||
enrollment5 = course2.enroll_user(user3, 'StudentEnrollment')
|
||||
enrollment5.invite
|
||||
enrollment5.accept
|
||||
enrollment5.save!
|
||||
user3.reload
|
||||
enrollment6 = course1.enroll_user(user4, 'TeacherEnrollment')
|
||||
enrollment6.accept
|
||||
enrollment6.save!
|
||||
enrollment7 = course2.enroll_user(user1, 'ObserverEnrollment')
|
||||
enrollment7.associated_user_id = user3.id
|
||||
enrollment7.invite
|
||||
enrollment7.accept
|
||||
enrollment7.save!
|
||||
user1.reload
|
||||
enrollment8 = course2.enroll_user(user5, 'TeacherEnrollment')
|
||||
enrollment8.accept
|
||||
enrollment8.save!
|
||||
user5.reload
|
||||
enrollment9 = section1.enroll_user(user4, 'TeacherEnrollment')
|
||||
enrollment9.accept
|
||||
enrollment9.save!
|
||||
user4.reload
|
||||
enrollment10 = course1.enroll_user(user6, 'TeacherEnrollment')
|
||||
enrollment10.accept
|
||||
enrollment10.save!
|
||||
enrollment10.workflow_state = 'completed'
|
||||
enrollment10.save!
|
||||
user6.reload
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollments"] = true
|
||||
parsed = run_report(parameters, 1)
|
||||
parsed.length.should == 7
|
||||
|
||||
parsed[0].should == ["SIS_COURSE_ID_1", "user_sis_id_01", "observer", nil, "active", nil]
|
||||
parsed[1].should == ["SIS_COURSE_ID_2", "user_sis_id_01", "observer", nil, "active", "user_sis_id_03"]
|
||||
parsed[2].should == ["SIS_COURSE_ID_1", "user_sis_id_02", "ta", nil, "active", nil]
|
||||
parsed[3].should == ["SIS_COURSE_ID_1", "user_sis_id_03", "student", nil, "active", nil]
|
||||
parsed[4].should == ["SIS_COURSE_ID_2", "user_sis_id_03", "student", nil, "active", nil]
|
||||
parsed[5].should == ["SIS_COURSE_ID_1", "user_sis_id_04", "teacher", nil, "active", nil]
|
||||
parsed[6].should == [nil, "user_sis_id_04", "teacher", "science_section_1", "active", nil]
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["enrollments"] = true
|
||||
parsed = run_report(parameters, 1)
|
||||
parsed.length.should == 5
|
||||
|
||||
parsed[0].should == ["SIS_COURSE_ID_1", "user_sis_id_01", "observer", nil, "active", nil]
|
||||
parsed[1].should == ["SIS_COURSE_ID_1", "user_sis_id_02", "ta", nil, "active", nil]
|
||||
parsed[2].should == ["SIS_COURSE_ID_1", "user_sis_id_03", "student", nil, "active", nil]
|
||||
parsed[3].should == ["SIS_COURSE_ID_1", "user_sis_id_04", "teacher", nil, "active", nil]
|
||||
parsed[4].should == [nil, "user_sis_id_04", "teacher", "science_section_1", "active", nil]
|
||||
|
||||
end
|
||||
|
||||
it "should run the SIS Groups" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
|
||||
group1 = @account.groups.create(:name => 'group1name')
|
||||
group1.sis_source_id = 'group1sis'
|
||||
group1.save!
|
||||
group2 = sub_account.groups.create(:name => 'group2name')
|
||||
group2.sis_source_id = 'group2sis'
|
||||
group2.save!
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["groups"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == ["group1sis", nil, "group1name", "available"]
|
||||
parsed[1].should == ["group2sis", "sub1", "group2name", "available"]
|
||||
|
||||
parameters = {}
|
||||
parameters["groups"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == ["group1sis", nil, "group1name", "available"]
|
||||
parsed[1].should == ["group2sis", "sub1", "group2name", "available"]
|
||||
end
|
||||
|
||||
it "should run the SIS Groups Memberships" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
user1 = user_with_pseudonym(:active_all => true, :account => @account, :name => "John St. Clair", :sortable_name => "St. Clair, John", :username => 'john@stclair.com')
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_01"
|
||||
@user.pseudonym.save!
|
||||
user2 = user_with_pseudonym(:active_all => true, :username => 'micheal@michaelbolton.com', :name => 'Michael Bolton', :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_02"
|
||||
@user.pseudonym.save!
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
|
||||
group1 = @account.groups.create(:name => 'group1name')
|
||||
group1.sis_source_id = 'group1sis'
|
||||
group1.save!
|
||||
group2 = sub_account.groups.create(:name => 'group2name')
|
||||
group2.sis_source_id = 'group2sis'
|
||||
group2.save!
|
||||
gm1 = GroupMembership.create(:group => group1, :user => user1, :workflow_state => "accepted")
|
||||
gm1.sis_batch_id = 1
|
||||
gm1.save!
|
||||
gm2 = GroupMembership.create(:group => group2, :user => user2, :workflow_state => "accepted")
|
||||
gm2.sis_batch_id = 1
|
||||
gm2.save!
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["group_membership"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == [group1.sis_source_id, "user_sis_id_01", "accepted"]
|
||||
parsed[1].should == [group2.sis_source_id, "user_sis_id_02", "accepted"]
|
||||
|
||||
parameters = {}
|
||||
parameters["group_membership"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == [group1.sis_source_id, "user_sis_id_01", "accepted"]
|
||||
parsed[1].should == [group2.sis_source_id, "user_sis_id_02", "accepted"]
|
||||
end
|
||||
|
||||
it "should run the x list report" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
course1 = Course.new(:name => 'English 101', :course_code => 'ENG101', :account => @account, :enrollment_term => term1)
|
||||
course1.save
|
||||
course1.sis_source_id = "SIS_COURSE_ID_1"
|
||||
course1.save!
|
||||
course2 = Course.new(:name => 'Math 101', :course_code => 'MAT101', :account => @account, :enrollment_term => term1)
|
||||
course2.save
|
||||
course2.sis_source_id = "SIS_COURSE_ID_2"
|
||||
course2.save!
|
||||
course3 = Course.new(:name => 'Science 101', :course_code => 'SCI101', :account => @account)
|
||||
course3.save
|
||||
course3.sis_source_id = "SIS_COURSE_ID_3"
|
||||
course3.save!
|
||||
course4 = Course.new(:name => 'Science 1011', :course_code => 'SCI1011', :account => @account)
|
||||
course4.save
|
||||
course4.sis_source_id = "SIS_COURSE_ID_4"
|
||||
course4.save!
|
||||
section1 = CourseSection.new(:name => 'English_01', :course => course1)
|
||||
section1.sis_source_id = 'english_section_1'
|
||||
section1.root_account_id = @account.id
|
||||
section1.save!
|
||||
section2 = CourseSection.new(:name => 'English_02', :course => course2)
|
||||
section2.sis_source_id = 'english_section_2'
|
||||
section2.root_account_id = @account.id
|
||||
section2.save!
|
||||
section3 = CourseSection.new(:name => 'Math_01', :course => course3)
|
||||
section3.sis_source_id = 'english_section_3'
|
||||
section3.root_account_id = @account.id
|
||||
section3.save!
|
||||
section4 = CourseSection.new(:name => 'Math_012', :course => course4)
|
||||
section4.sis_source_id = 'english_section_4'
|
||||
section4.root_account_id = @account.id
|
||||
section4.save!
|
||||
|
||||
section1.crosslist_to_course(course2)
|
||||
section3.crosslist_to_course(course4)
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["xlist"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 1
|
||||
parsed[0].should == ["SIS_COURSE_ID_4", "english_section_3", "active"]
|
||||
|
||||
parameters = {}
|
||||
parameters["xlist"] = true
|
||||
parsed = run_report(parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == ["SIS_COURSE_ID_2", "english_section_1", "active"]
|
||||
parsed[1].should == ["SIS_COURSE_ID_4", "english_section_3", "active"]
|
||||
end
|
||||
|
||||
it "should run the SIS Export" do
|
||||
@account = Account.default
|
||||
@admin = account_admin_user(:account => @account)
|
||||
user1 = user_with_pseudonym(:active_all => true, :account => @account, :name => "John St. Clair", :sortable_name => "St. Clair, John", :username => 'john@stclair.com')
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_01"
|
||||
@user.pseudonym.save!
|
||||
user2 = user_with_pseudonym(:active_all => true, :username => 'micheal@michaelbolton.com', :name => 'Michael Bolton', :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_02"
|
||||
@user.pseudonym.save!
|
||||
user3 = user_with_pseudonym(:name => 'Rick Astley', :account => @account)
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
sub_sub_account = Account.create(:parent_account => sub_account, :name => 'ESL')
|
||||
sub_sub_account.sis_source_id = 'subsub1'
|
||||
sub_sub_account.save!
|
||||
sub_account2 = Account.create(:parent_account => @account, :name => 'Math')
|
||||
sub_account2.sis_source_id = 'sub2'
|
||||
sub_account2.save!
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
term2 = EnrollmentTerm.create(:name => 'Winter', :start_at => '07-01-2013', :end_at => '28-04-2013')
|
||||
term2.root_account = @account
|
||||
term2.sis_source_id = 'winter13'
|
||||
term2.save!
|
||||
start_at = 1.day.ago
|
||||
end_at = 10.days.from_now
|
||||
|
||||
course1 = Course.new(:name => 'English 101', :course_code => 'ENG101', :start_at => start_at, :conclude_at => end_at, :account => sub_account, :enrollment_term => term1)
|
||||
course1.save
|
||||
course1.sis_source_id = "SIS_COURSE_ID_1"
|
||||
course1.restrict_enrollments_to_course_dates = true
|
||||
course1.save!
|
||||
|
||||
course2 = Course.new(:name => 'Math 101', :course_code => 'MAT101', :conclude_at => end_at, :account => @account)
|
||||
course2.save
|
||||
course2.sis_source_id = "SIS_COURSE_ID_2"
|
||||
course2.restrict_enrollments_to_course_dates = true
|
||||
course2.save!
|
||||
|
||||
course3 = Course.new(:name => 'Science 101', :course_code => 'SCI101', :account => @account)
|
||||
course3.save
|
||||
course3.sis_source_id = "SIS_COURSE_ID_3"
|
||||
course3.save!
|
||||
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["accounts"] = true
|
||||
parameters["users"] = true
|
||||
parameters["courses"] = true
|
||||
parsed = run_report(parameters)
|
||||
|
||||
accounts_report = parsed["accounts"][1..-1].sort_by { |r| r[0] }
|
||||
accounts_report[0].should == ["sub1", nil, "English", "active"]
|
||||
accounts_report[1].should == ["sub2", nil, "Math", "active"]
|
||||
accounts_report[2].should == ["subsub1", "sub1", "ESL", "active"]
|
||||
|
||||
users_report = parsed["users"][1..-1].sort_by { |r| r[0] }
|
||||
users_report[0].should == ["user_sis_id_01", "john@stclair.com", nil, "John St.", "Clair", "john@stclair.com", "active"]
|
||||
users_report[1].should == ["user_sis_id_02", "micheal@michaelbolton.com", nil, "Michael", "Bolton", "micheal@michaelbolton.com", "active"]
|
||||
|
||||
courses_report = parsed["courses"][1..-1].sort_by { |r| r[0] }
|
||||
courses_report[0].should == ["SIS_COURSE_ID_2", "MAT101", "Math 101", nil, nil, "active", nil, end_at.iso8601]
|
||||
courses_report[1].should == ["SIS_COURSE_ID_3", "SCI101", "Science 101", nil, nil, "active", nil, nil]
|
||||
|
||||
parameters = {}
|
||||
parameters["accounts"] = true
|
||||
parameters["users"] = true
|
||||
parameters["courses"] = true
|
||||
parsed = run_report(parameters)
|
||||
|
||||
accounts_report = parsed["accounts"][1..-1].sort_by { |r| r[0] }
|
||||
accounts_report[0].should == ["sub1", nil, "English", "active"]
|
||||
accounts_report[1].should == ["sub2", nil, "Math", "active"]
|
||||
accounts_report[2].should == ["subsub1", "sub1", "ESL", "active"]
|
||||
|
||||
users_report = parsed["users"][1..-1].sort_by { |r| r[0] }
|
||||
users_report[0].should == ["user_sis_id_01", "john@stclair.com", nil, "John St.", "Clair", "john@stclair.com", "active"]
|
||||
users_report[1].should == ["user_sis_id_02", "micheal@michaelbolton.com", nil, "Michael", "Bolton", "micheal@michaelbolton.com", "active"]
|
||||
|
||||
courses_report = parsed["courses"][1..-1].sort_by { |r| r[0] }
|
||||
courses_report[0].should == ["SIS_COURSE_ID_1", "ENG101", "English 101", "sub1", "fall12", "active", start_at.iso8601, end_at.iso8601]
|
||||
courses_report[1].should == ["SIS_COURSE_ID_2", "MAT101", "Math 101", nil, nil, "active", nil, end_at.iso8601]
|
||||
courses_report[2].should == ["SIS_COURSE_ID_3", "SCI101", "Science 101", nil, nil, "active", nil, nil]
|
||||
end
|
||||
it "should run the SIS Export reports with no data" do
|
||||
@account = Account.default
|
||||
@admin = account_admin_user(:account => @account)
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
parameters = {}
|
||||
parameters["accounts"] = true
|
||||
parameters["users"] = true
|
||||
parameters["terms"] = true
|
||||
parameters["courses"] = true
|
||||
parameters["sections"] = true
|
||||
parameters["enrollments"] = true
|
||||
parameters["groups"] = true
|
||||
parameters["group_membership"] = true
|
||||
parameters["xlist"] = true
|
||||
parsed = run_report(parameters)
|
||||
|
||||
parsed["accounts"].should == [["account_id", "parent_account_id", "name", "status"]]
|
||||
parsed["terms"].should == [["term_id", "name", "status", "start_date", "end_date"]]
|
||||
parsed["users"].should == [["user_id", "login_id", "password", "first_name", "last_name", "email", "status"]]
|
||||
parsed["courses"].should == [["course_id", "short_name", "long_name", "account_id", "term_id", "status", "start_date", "end_date"]]
|
||||
parsed["sections"].should == [["section_id", "course_id", "name", "status", "start_date", "end_date", "account_id"]]
|
||||
parsed["enrollments"].should == [["course_id", "user_id", "role", "section_id", "status", "associated_user_id"]]
|
||||
parsed["groups"].should == [["group_id", "account_id", "name", "status"]]
|
||||
parsed["group_membership"].should == [["group_id", "user_id", "status"]]
|
||||
parsed["xlist"].should == [["xlist_course_id", "section_id", "status"]]
|
||||
end
|
||||
end
|
||||
|
||||
it "should find the default module and configured reports" do
|
||||
CustomReportsSpecHelper.find_account_module_and_reports('default')
|
||||
end
|
||||
|
|
745
vendor/plugins/account_reports/spec_canvas/sis_provisioning_reports_spec.rb
vendored
Normal file
745
vendor/plugins/account_reports/spec_canvas/sis_provisioning_reports_spec.rb
vendored
Normal file
|
@ -0,0 +1,745 @@
|
|||
#
|
||||
# Copyright (C) 2012 Instructure, Inc.
|
||||
#
|
||||
# This file is part of Canvas.
|
||||
#
|
||||
# Canvas is free software: you can redistribute it and/or modify it under
|
||||
# the terms of the GNU Affero General Public License as published by the Free
|
||||
# Software Foundation, version 3 of the License.
|
||||
#
|
||||
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
# details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
require File.expand_path(File.dirname(__FILE__) + '/reports_helper')
|
||||
|
||||
describe "Default Account Reports" do
|
||||
|
||||
def run_report(report_type, parameters = {}, column = 0)
|
||||
|
||||
account_report = AccountReport.new(:user => @admin, :account => @account, :report_type => report_type)
|
||||
account_report.parameters = {}
|
||||
account_report.parameters = parameters
|
||||
account_report.save
|
||||
csv_report = Canvas::AccountReports::Default.send(report_type, account_report)
|
||||
if csv_report.is_a? Hash
|
||||
csv_report.inject({}) do |result, (key, csv)|
|
||||
all_parsed = FasterCSV.parse(csv).to_a
|
||||
all_parsed[1..-1].sort_by { |r| r[column] }
|
||||
result[key] = all_parsed
|
||||
result
|
||||
end
|
||||
else
|
||||
all_parsed = FasterCSV.parse(csv_report).to_a
|
||||
all_parsed[1..-1].sort_by { |r| r[column] }
|
||||
end
|
||||
end
|
||||
|
||||
describe "SIS export reports and Provisioning reports" do
|
||||
|
||||
it "should run the SIS and Provisioning Users reports" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
@admin = account_admin_user(:account => @account)
|
||||
user1 = user_with_pseudonym(:active_all => true, :account => @account, :name => "John St. Clair", :sortable_name => "St. Clair, John", :username => 'john@stclair.com')
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_01"
|
||||
@user.pseudonym.save!
|
||||
user2 = user_with_pseudonym(:active_all => true, :username => 'micheal@michaelbolton.com', :name => 'Michael Bolton', :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_02"
|
||||
@user.pseudonym.save!
|
||||
user3 = user_with_pseudonym(:name => 'Rick Astley', :account => @account)
|
||||
#user3 has no sis_id and should not be in the sis report
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["users"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 2
|
||||
|
||||
parsed[0].should == ["user_sis_id_01", "john@stclair.com", nil, "John St.", "Clair", "john@stclair.com", "active"]
|
||||
parsed[1].should == ["user_sis_id_02", "micheal@michaelbolton.com", nil, "Michael", "Bolton", "micheal@michaelbolton.com", "active"]
|
||||
|
||||
parameters = {}
|
||||
parameters["users"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 2
|
||||
|
||||
parsed[0].should == ["user_sis_id_01", "john@stclair.com", nil, "John St.", "Clair", "john@stclair.com", "active"]
|
||||
parsed[1].should == ["user_sis_id_02", "micheal@michaelbolton.com", nil, "Michael", "Bolton", "micheal@michaelbolton.com", "active"]
|
||||
|
||||
parsed = run_report("provisioning_csv", parameters)
|
||||
parsed.length.should == 3
|
||||
|
||||
parsed[0].should == [user1.id.to_s, "user_sis_id_01", "john@stclair.com", nil, "John St.", "Clair", "john@stclair.com", "active"]
|
||||
parsed[1].should == [user2.id.to_s, "user_sis_id_02", "micheal@michaelbolton.com", nil, "Michael", "Bolton", "micheal@michaelbolton.com", "active"]
|
||||
parsed[2].should == [user3.id.to_s, nil, "nobody@example.com", nil, "Rick", "Astley", "nobody@example.com", "active"]
|
||||
end
|
||||
|
||||
it "should run the SIS and Provisioning Accounts reports" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
sub_sub_account = Account.create(:parent_account => sub_account, :name => 'sESL')
|
||||
sub_sub_account.sis_source_id = 'subsub1'
|
||||
sub_sub_account.save!
|
||||
sub_account2 = Account.create(:parent_account => @account, :name => 'Math')
|
||||
sub_account2.sis_source_id = 'sub2'
|
||||
sub_account2.save!
|
||||
sub_account3 = Account.create(:parent_account => @account, :name => 'other')
|
||||
#sub_account 3 does not have sis id and should not be in the sis report
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["accounts"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 3
|
||||
|
||||
parsed[0].should == ["sub1", nil, "English", "active"]
|
||||
parsed[1].should == ["sub2", nil, "Math", "active"]
|
||||
parsed[2].should == ["subsub1", "sub1", "sESL", "active"]
|
||||
|
||||
parameters = {}
|
||||
parameters["accounts"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 3
|
||||
parsed[0].should == ["sub1", nil, "English", "active"]
|
||||
parsed[1].should == ["sub2", nil, "Math", "active"]
|
||||
parsed[2].should == ["subsub1", "sub1", "sESL", "active"]
|
||||
|
||||
parsed = run_report("provisioning_csv", parameters, 3)
|
||||
parsed.length.should == 4
|
||||
parsed[0].should == [sub_account.id.to_s, "sub1", nil, "English", "active"]
|
||||
parsed[1].should == [sub_account2.id.to_s, "sub2", nil, "Math", "active"]
|
||||
parsed[2].should == [sub_account3.id.to_s, nil, nil, "other", "active"]
|
||||
parsed[3].should == [sub_sub_account.id.to_s, "subsub1", "sub1", "sESL", "active"]
|
||||
|
||||
end
|
||||
|
||||
it "should run the SIS and Provisioning Terms reports" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
term2 = EnrollmentTerm.create(:name => 'Winter', :start_at => '07-01-2013', :end_at => '28-04-2013')
|
||||
term2.root_account = @account
|
||||
term2.sis_source_id = 'winter13'
|
||||
term2.save!
|
||||
term3 = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME)
|
||||
#default term should not be included in the sis report since it does not have an sis id
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = term3.id
|
||||
parameters["terms"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 2
|
||||
|
||||
parsed[0][0].should == term1.sis_source_id
|
||||
parsed[0][1].should == term1.name
|
||||
parsed[0][2].should == "active"
|
||||
parsed[0][3].should == term1.start_at.iso8601
|
||||
parsed[0][4].should == term1.end_at.iso8601
|
||||
|
||||
parsed[1][0].should == term2.sis_source_id
|
||||
parsed[1][1].should == term2.name
|
||||
parsed[1][2].should == "active"
|
||||
parsed[1][3].should == term2.start_at.iso8601
|
||||
parsed[1][4].should == term2.end_at.iso8601
|
||||
|
||||
parameters = {}
|
||||
parameters["terms"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == ["fall12", "Fall", "active", "2012-08-20T00:00:00Z", "2012-12-20T00:00:00Z"]
|
||||
parsed[1].should == ["winter13", "Winter", "active", "2013-01-07T00:00:00Z", "2013-04-28T00:00:00Z"]
|
||||
|
||||
parsed = run_report("provisioning_csv", parameters, 2)
|
||||
parsed.length.should == 3
|
||||
parsed[0].should == [term3.id.to_s, nil, "Default Term", "active", nil, nil]
|
||||
parsed[1].should == [term1.id.to_s, "fall12", "Fall", "active", "2012-08-20T00:00:00Z", "2012-12-20T00:00:00Z"]
|
||||
parsed[2].should == [term2.id.to_s, "winter13", "Winter", "active", "2013-01-07T00:00:00Z", "2013-04-28T00:00:00Z"]
|
||||
end
|
||||
|
||||
it "should run the SIS and Provisioning Course reports" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
|
||||
start_at = 1.day.ago
|
||||
end_at = 10.days.from_now
|
||||
|
||||
course1 = Course.new(:name => 'English 101', :course_code => 'ENG101', :start_at => start_at, :conclude_at => end_at, :account => sub_account, :enrollment_term => term1)
|
||||
course1.save
|
||||
course1.workflow_state = 'available'
|
||||
course1.sis_source_id = "SIS_COURSE_ID_1"
|
||||
course1.restrict_enrollments_to_course_dates = true
|
||||
course1.save!
|
||||
|
||||
course2 = Course.new(:name => 'Math 101', :course_code => 'MAT101', :conclude_at => end_at, :account => @account)
|
||||
course2.save
|
||||
course2.workflow_state = 'available'
|
||||
course2.sis_source_id = "SIS_COURSE_ID_2"
|
||||
course2.restrict_enrollments_to_course_dates = true
|
||||
course2.save!
|
||||
|
||||
course3 = Course.new(:name => 'Science 101', :course_code => 'SCI101', :account => @account)
|
||||
course3.save
|
||||
course3.workflow_state = 'available'
|
||||
course3.sis_source_id = "SIS_COURSE_ID_3"
|
||||
course3.save!
|
||||
|
||||
course4 = Course.new(:name => 'self help',:course_code => 'self')
|
||||
course4.workflow_state = 'claimed'
|
||||
course4.save!
|
||||
#course4 should not show up in the sis report since it does not have sis id
|
||||
|
||||
course5 = Course.new(:name => 'math 100', :course_code => 'ENG101', :start_at => start_at, :conclude_at => end_at, :account => sub_account, :enrollment_term => term1)
|
||||
course5.sis_source_id = "SIS_COURSE_ID_5"
|
||||
course5.workflow_state = 'deleted'
|
||||
course5.save!
|
||||
#course5 should not show up since it is not active
|
||||
parameters = {}
|
||||
parameters["courses"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 3
|
||||
|
||||
parsed[0].should == [course1.sis_source_id, course1.course_code, course1.name, sub_account.sis_source_id, term1.sis_source_id, "active", start_at.iso8601, end_at.iso8601]
|
||||
parsed[1].should == ["SIS_COURSE_ID_2", "MAT101", "Math 101", nil, nil, "active", nil, end_at.iso8601]
|
||||
parsed[2].should == ["SIS_COURSE_ID_3", "SCI101", "Science 101", nil, nil, "active", nil, nil]
|
||||
|
||||
parsed = run_report("provisioning_csv", parameters)
|
||||
parsed.length.should == 4
|
||||
parsed[0].should == [course1.id.to_s, course1.sis_source_id, course1.course_code, course1.name, sub_account.sis_source_id, term1.sis_source_id, "active", start_at.iso8601, end_at.iso8601]
|
||||
parsed[1].should == [course2.id.to_s, "SIS_COURSE_ID_2", "MAT101", "Math 101", nil, nil, "active", nil, end_at.iso8601]
|
||||
parsed[2].should == [course3.id.to_s, "SIS_COURSE_ID_3", "SCI101", "Science 101", nil, nil, "active", nil, nil]
|
||||
parsed[3].should == [course4.id.to_s, nil, "self", "self help", nil, nil, "unpublished", nil, nil]
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["courses"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == ["SIS_COURSE_ID_2", "MAT101", "Math 101", nil, nil, "active", nil, end_at.iso8601]
|
||||
parsed[1].should == ["SIS_COURSE_ID_3", "SCI101", "Science 101", nil, nil, "active", nil, nil]
|
||||
|
||||
|
||||
end
|
||||
|
||||
it "should run the SIS and Provisioning Sections reports" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
|
||||
start_at = 1.day.ago
|
||||
end_at = 10.days.from_now
|
||||
|
||||
course1 = Course.new(:name => 'English 101', :course_code => 'ENG101', :start_at => start_at, :conclude_at => end_at, :account => sub_account)
|
||||
course1.save
|
||||
course1.sis_source_id = "SIS_COURSE_ID_1"
|
||||
course1.save!
|
||||
|
||||
course2 = Course.new(:name => 'Math 101', :course_code => 'MAT101', :conclude_at => end_at, :account => @account, :enrollment_term => term1)
|
||||
course2.save
|
||||
course2.sis_source_id = "SIS_COURSE_ID_2"
|
||||
course2.save!
|
||||
|
||||
section1 = CourseSection.new(:name => 'English_01', :course => course1, :account => sub_account, :start_at => start_at, :end_at => end_at)
|
||||
section1.sis_source_id = 'english_section_1'
|
||||
section1.root_account_id = @account.id
|
||||
section1.restrict_enrollments_to_section_dates = true
|
||||
section1.save!
|
||||
|
||||
section2 = CourseSection.new(:name => 'English_02', :course => course1, :end_at => end_at)
|
||||
section2.sis_source_id = 'english_section_2'
|
||||
section2.root_account_id = @account.id
|
||||
section2.restrict_enrollments_to_section_dates = true
|
||||
section2.save!
|
||||
|
||||
section3 = CourseSection.new(:name => 'Math_01', :course => course2, :end_at => end_at)
|
||||
section3.sis_source_id = 'english_section_3'
|
||||
section3.root_account_id = @account.id
|
||||
section3.restrict_enrollments_to_section_dates = true
|
||||
section3.save!
|
||||
|
||||
section4 = CourseSection.new(:name => 'Math_02', :course => course2)
|
||||
section4.root_account_id = @account.id
|
||||
section4.save!
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["sections"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
|
||||
parsed.length.should == 2
|
||||
parsed[0].should ==[section1.sis_source_id, course1.sis_source_id, section1.name, "active", start_at.iso8601, end_at.iso8601, sub_account.sis_source_id]
|
||||
parsed[1].should == [section2.sis_source_id, course1.sis_source_id, section2.name, "active", nil, end_at.iso8601, nil]
|
||||
|
||||
parameters = {}
|
||||
parameters["sections"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
|
||||
parsed.length.should == 3
|
||||
parsed[0].should ==[section1.sis_source_id, course1.sis_source_id, section1.name, "active", start_at.iso8601, end_at.iso8601, sub_account.sis_source_id]
|
||||
parsed[1].should == [section2.sis_source_id, course1.sis_source_id, section2.name, "active", nil, end_at.iso8601, nil]
|
||||
parsed[2].should == ["english_section_3", "SIS_COURSE_ID_2", "Math_01", "active", nil, end_at.iso8601, nil]
|
||||
|
||||
parsed = run_report("provisioning_csv", parameters)
|
||||
parsed.length.should == 4
|
||||
parsed[0].should ==[section1.id.to_s, section1.sis_source_id, course1.id.to_s, course1.sis_source_id, section1.name, "active", start_at.iso8601, end_at.iso8601, sub_account.id.to_s, sub_account.sis_source_id]
|
||||
parsed[1].should == [section2.id.to_s, section2.sis_source_id, course1.id.to_s, course1.sis_source_id, section2.name, "active", nil, end_at.iso8601, nil, nil]
|
||||
parsed[2].should == [section3.id.to_s, "english_section_3", course2.id.to_s, "SIS_COURSE_ID_2", "Math_01", "active", nil, end_at.iso8601, nil, nil]
|
||||
parsed[3].should == [section4.id.to_s, nil, course2.id.to_s, "SIS_COURSE_ID_2", "Math_02", "active", nil, nil, nil, nil]
|
||||
end
|
||||
|
||||
it "should run the SIS and provisioning Enrollment reports" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
|
||||
course1 = Course.new(:name => 'English 101', :course_code => 'ENG101', :account => @account)
|
||||
course1.save
|
||||
course1.sis_source_id = "SIS_COURSE_ID_1"
|
||||
course1.save!
|
||||
course2 = Course.new(:name => 'Math 101', :course_code => 'MAT101', :account => @account, :enrollment_term => term1)
|
||||
course2.save
|
||||
course2.sis_source_id = "SIS_COURSE_ID_2"
|
||||
course2.save!
|
||||
course3 = Course.new(:name => 'Science 101', :course_code => 'SCI101', :account => @account)
|
||||
course3.save!
|
||||
course4 = Course.new(:name => 'Spanish 101', :course_code => 'SPA101', :account => @account)
|
||||
course4.save!
|
||||
#this course should not be in the sis report since it does not have an sis id
|
||||
section1 = CourseSection.new(:name => 'sci_01', :course => course3)
|
||||
section1.sis_source_id = 'science_section_1'
|
||||
section1.root_account_id = @account.id
|
||||
section1.save!
|
||||
|
||||
user1 = user_with_pseudonym(:active_all => true, :account => @account, :name => "John St. Clair", :sortable_name => "St. Clair, John", :username => 'john@stclair.com')
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_01"
|
||||
@user.pseudonym.save!
|
||||
user2 = user_with_pseudonym(:active_all => true, :username => 'micheal@michaelbolton.com', :name => 'Michael Bolton', :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_02"
|
||||
@user.pseudonym.save!
|
||||
user3 = user_with_pseudonym(:active_all => true, :account => @account, :name => "Rick Astley", :sortable_name => "Astley, Rick", :username => 'rick@roll.com')
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_03"
|
||||
@user.pseudonym.save!
|
||||
user4 = user_with_pseudonym(:active_all => true, :username => 'jason@donovan.com', :name => 'Jason Donovan', :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_04"
|
||||
@user.pseudonym.save!
|
||||
user5 = user_with_pseudonym(:name => 'James Brown', :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_05"
|
||||
@user.pseudonym.save!
|
||||
user6 = user_with_pseudonym(:active_all => true, :username => 'john@smith.com', :name => 'John Smith',:sortable_name => "Smith, John", :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_06"
|
||||
@user.pseudonym.save!
|
||||
|
||||
enrollment1 = course1.enroll_user(user1, 'ObserverEnrollment')
|
||||
enrollment1.invite
|
||||
enrollment1.accept
|
||||
enrollment1.save!
|
||||
enrollment2 = course3.enroll_user(user2, 'StudentEnrollment')
|
||||
enrollment2.invite
|
||||
enrollment2.accept
|
||||
enrollment2.save!
|
||||
enrollment3 = course1.enroll_user(user2, 'TaEnrollment')
|
||||
enrollment3.accept
|
||||
enrollment3.save!
|
||||
user2.reload
|
||||
enrollment4 = course1.enroll_user(user3, 'StudentEnrollment')
|
||||
enrollment4.invite
|
||||
enrollment4.accept
|
||||
enrollment4.save!
|
||||
enrollment5 = course2.enroll_user(user3, 'StudentEnrollment')
|
||||
enrollment5.invite
|
||||
enrollment5.accept
|
||||
enrollment5.save!
|
||||
user3.reload
|
||||
enrollment6 = course1.enroll_user(user4, 'TeacherEnrollment')
|
||||
enrollment6.accept
|
||||
enrollment6.save!
|
||||
enrollment7 = course2.enroll_user(user1, 'ObserverEnrollment')
|
||||
enrollment7.associated_user_id = user3.id
|
||||
enrollment7.invite
|
||||
enrollment7.accept
|
||||
enrollment7.save!
|
||||
user1.reload
|
||||
enrollment8 = course4.enroll_user(user5, 'TeacherEnrollment')
|
||||
enrollment8.accept
|
||||
enrollment8.save!
|
||||
user5.reload
|
||||
enrollment9 = section1.enroll_user(user4, 'TeacherEnrollment')
|
||||
enrollment9.accept
|
||||
enrollment9.save!
|
||||
user4.reload
|
||||
enrollment10 = course1.enroll_user(user6, 'TeacherEnrollment')
|
||||
enrollment10.accept
|
||||
enrollment10.save!
|
||||
enrollment10.workflow_state = 'completed'
|
||||
enrollment10.save!
|
||||
user6.reload
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollments"] = true
|
||||
parsed = run_report("sis_export_csv", parameters, 1)
|
||||
parsed.length.should == 7
|
||||
|
||||
parsed[0].should == ["SIS_COURSE_ID_1", "user_sis_id_01", "observer", nil, "active", nil]
|
||||
parsed[1].should == ["SIS_COURSE_ID_2", "user_sis_id_01", "observer", nil, "active", "user_sis_id_03"]
|
||||
parsed[2].should == ["SIS_COURSE_ID_1", "user_sis_id_02", "ta", nil, "active", nil]
|
||||
parsed[3].should == ["SIS_COURSE_ID_1", "user_sis_id_03", "student", nil, "active", nil]
|
||||
parsed[4].should == ["SIS_COURSE_ID_2", "user_sis_id_03", "student", nil, "active", nil]
|
||||
parsed[5].should == ["SIS_COURSE_ID_1", "user_sis_id_04", "teacher", nil, "active", nil]
|
||||
parsed[6].should == [nil, "user_sis_id_04", "teacher", "science_section_1", "active", nil]
|
||||
|
||||
parsed = run_report("provisioning_csv", parameters, 3)
|
||||
parsed.length.should == 9
|
||||
|
||||
parsed[0].should == [course1.id.to_s, "SIS_COURSE_ID_1", user1.id.to_s, "user_sis_id_01", "observer", enrollment1.course_section_id.to_s, nil, "active", nil, nil]
|
||||
parsed[1].should == [course2.id.to_s, "SIS_COURSE_ID_2", user1.id.to_s, "user_sis_id_01", "observer", enrollment7.course_section_id.to_s, nil, "active", user3.id.to_s, "user_sis_id_03"]
|
||||
parsed[2].should == [course3.id.to_s, nil, user2.id.to_s, "user_sis_id_02", "student", enrollment2.course_section_id.to_s, nil, "active", nil, nil]
|
||||
parsed[3].should == [course1.id.to_s, "SIS_COURSE_ID_1", user2.id.to_s, "user_sis_id_02", "ta", enrollment3.course_section_id.to_s, nil, "active", nil, nil]
|
||||
parsed[4].should == [course1.id.to_s, "SIS_COURSE_ID_1", user3.id.to_s, "user_sis_id_03", "student", enrollment4.course_section_id.to_s, nil, "active", nil, nil]
|
||||
parsed[5].should == [course2.id.to_s, "SIS_COURSE_ID_2", user3.id.to_s, "user_sis_id_03", "student", enrollment5.course_section_id.to_s, nil, "active", nil, nil]
|
||||
parsed[6].should == [course1.id.to_s, "SIS_COURSE_ID_1", user4.id.to_s, "user_sis_id_04", "teacher", enrollment6.course_section_id.to_s, nil, "active", nil, nil]
|
||||
parsed[7].should == [course3.id.to_s, nil, user4.id.to_s, "user_sis_id_04", "teacher", enrollment9.course_section_id.to_s, "science_section_1", "active", nil, nil]
|
||||
parsed[8].should == [course4.id.to_s, nil, user5.id.to_s, "user_sis_id_05", "teacher", enrollment8.course_section_id.to_s, nil, "active", nil, nil]
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["enrollments"] = true
|
||||
parsed = run_report("sis_export_csv", parameters, 1)
|
||||
parsed.length.should == 5
|
||||
|
||||
parsed[0].should == ["SIS_COURSE_ID_1", "user_sis_id_01", "observer", nil, "active", nil]
|
||||
parsed[1].should == ["SIS_COURSE_ID_1", "user_sis_id_02", "ta", nil, "active", nil]
|
||||
parsed[2].should == ["SIS_COURSE_ID_1", "user_sis_id_03", "student", nil, "active", nil]
|
||||
parsed[3].should == ["SIS_COURSE_ID_1", "user_sis_id_04", "teacher", nil, "active", nil]
|
||||
parsed[4].should == [nil, "user_sis_id_04", "teacher", "science_section_1", "active", nil]
|
||||
|
||||
end
|
||||
|
||||
it "should run the SIS and provisioning Groups reports" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
|
||||
group1 = @account.groups.create(:name => 'group1name')
|
||||
group1.sis_source_id = 'group1sis'
|
||||
group1.save!
|
||||
group2 = sub_account.groups.create(:name => 'group2name')
|
||||
group2.sis_source_id = 'group2sis'
|
||||
group2.save!
|
||||
group3 = sub_account.groups.create(:name => 'group3name')
|
||||
group3.save!
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["groups"] = true
|
||||
parsed = run_report("sis_export_csv", parameters, 2)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == ["group1sis", nil, "group1name", "available"]
|
||||
parsed[1].should == ["group2sis", "sub1", "group2name", "available"]
|
||||
|
||||
parameters = {}
|
||||
parameters["groups"] = true
|
||||
parsed = run_report("sis_export_csv", parameters, 2)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == ["group1sis", nil, "group1name", "available"]
|
||||
parsed[1].should == ["group2sis", "sub1", "group2name", "available"]
|
||||
|
||||
parsed = run_report("provisioning_csv", parameters, 4)
|
||||
parsed.length.should == 3
|
||||
parsed[0].should == [group1.id.to_s, "group1sis", @account.id.to_s, nil, "group1name", "available"]
|
||||
parsed[1].should == [group2.id.to_s, "group2sis", sub_account.id.to_s, "sub1", "group2name", "available"]
|
||||
parsed[2].should == [group3.id.to_s, nil, sub_account.id.to_s, "sub1", "group3name", "available"]
|
||||
end
|
||||
|
||||
it "should run the SIS and provisioning Groups Membership reports" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
user1 = user_with_pseudonym(:active_all => true, :account => @account, :name => "John St. Clair", :sortable_name => "St. Clair, John", :username => 'john@stclair.com')
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_01"
|
||||
@user.pseudonym.save!
|
||||
user2 = user_with_pseudonym(:active_all => true, :username => 'micheal@michaelbolton.com', :name => 'Michael Bolton', :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_02"
|
||||
@user.pseudonym.save!
|
||||
user3 = user_with_pseudonym(:active_all => true, :username => 'micheal@michaelscott.com', :name => 'Michael Scott', :account => @account)
|
||||
@user.pseudonym.save!
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
|
||||
group1 = @account.groups.create(:name => 'group1name')
|
||||
group1.sis_source_id = 'group1sis'
|
||||
group1.save!
|
||||
group2 = sub_account.groups.create(:name => 'group2name')
|
||||
group2.sis_source_id = 'group2sis'
|
||||
group2.save!
|
||||
group3 = sub_account.groups.create(:name => 'group3name')
|
||||
group3.save!
|
||||
gm1 = GroupMembership.create(:group => group1, :user => user1, :workflow_state => "accepted")
|
||||
gm1.sis_batch_id = 1
|
||||
gm1.save!
|
||||
gm2 = GroupMembership.create(:group => group2, :user => user2, :workflow_state => "accepted")
|
||||
gm2.sis_batch_id = 1
|
||||
gm2.save!
|
||||
gm3 = GroupMembership.create(:group => group3, :user => user3, :workflow_state => "accepted")
|
||||
gm3.save!
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["group_membership"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == [group1.sis_source_id, "user_sis_id_01", "accepted"]
|
||||
parsed[1].should == [group2.sis_source_id, "user_sis_id_02", "accepted"]
|
||||
|
||||
parameters = {}
|
||||
parameters["group_membership"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == [group1.sis_source_id, "user_sis_id_01", "accepted"]
|
||||
parsed[1].should == [group2.sis_source_id, "user_sis_id_02", "accepted"]
|
||||
|
||||
parsed = run_report("provisioning_csv", parameters)
|
||||
parsed.length.should == 3
|
||||
parsed[0].should == [group1.id.to_s, group1.sis_source_id, user1.id.to_s, "user_sis_id_01", "accepted"]
|
||||
parsed[1].should == [group2.id.to_s, group2.sis_source_id, user2.id.to_s, "user_sis_id_02", "accepted"]
|
||||
parsed[2].should == [group3.id.to_s, group3.sis_source_id, user3.id.to_s, nil, "accepted"]
|
||||
end
|
||||
|
||||
it "should run the x list reports" do
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
@account = Account.default
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
course1 = Course.new(:name => 'English 101', :course_code => 'ENG101', :account => @account, :enrollment_term => term1)
|
||||
course1.save
|
||||
course1.sis_source_id = "SIS_COURSE_ID_1"
|
||||
course1.save!
|
||||
course2 = Course.new(:name => 'Math 101', :course_code => 'MAT101', :account => @account, :enrollment_term => term1)
|
||||
course2.save
|
||||
course2.sis_source_id = "SIS_COURSE_ID_2"
|
||||
course2.save!
|
||||
course3 = Course.new(:name => 'Science 101', :course_code => 'SCI101', :account => @account)
|
||||
course3.save
|
||||
course3.sis_source_id = "SIS_COURSE_ID_3"
|
||||
course3.save!
|
||||
course4 = Course.new(:name => 'Science 1011', :course_code => 'SCI1011', :account => @account)
|
||||
course4.save
|
||||
course4.sis_source_id = "SIS_COURSE_ID_4"
|
||||
course4.save!
|
||||
course5 = Course.new(:name => 'Spanish 1011', :course_code => 'SPA1011', :account => @account)
|
||||
course5.save
|
||||
section1 = CourseSection.new(:name => 'English_01', :course => course1)
|
||||
section1.sis_source_id = 'english_section_1'
|
||||
section1.root_account_id = @account.id
|
||||
section1.save!
|
||||
section2 = CourseSection.new(:name => 'English_02', :course => course2)
|
||||
section2.sis_source_id = 'english_section_2'
|
||||
section2.root_account_id = @account.id
|
||||
section2.save!
|
||||
section3 = CourseSection.new(:name => 'Math_01', :course => course3)
|
||||
section3.sis_source_id = 'english_section_3'
|
||||
section3.root_account_id = @account.id
|
||||
section3.save!
|
||||
section4 = CourseSection.new(:name => 'Math_012', :course => course4)
|
||||
section4.sis_source_id = 'english_section_4'
|
||||
section4.root_account_id = @account.id
|
||||
section4.save!
|
||||
section5 = CourseSection.new(:name => 'spanish_012', :course => course5)
|
||||
section5.root_account_id = @account.id
|
||||
section5.save!
|
||||
|
||||
section1.crosslist_to_course(course2)
|
||||
section3.crosslist_to_course(course4)
|
||||
section5.crosslist_to_course(course2)
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["xlist"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 1
|
||||
parsed[0].should == ["SIS_COURSE_ID_4", "english_section_3", "active"]
|
||||
|
||||
parameters = {}
|
||||
parameters["xlist"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
parsed.length.should == 2
|
||||
parsed[0].should == ["SIS_COURSE_ID_2", "english_section_1", "active"]
|
||||
parsed[1].should == ["SIS_COURSE_ID_4", "english_section_3", "active"]
|
||||
|
||||
parsed = run_report("provisioning_csv", parameters)
|
||||
parsed.length.should == 3
|
||||
parsed[0].should == [course2.id.to_s, "SIS_COURSE_ID_2", section1.id.to_s, "english_section_1", "active"]
|
||||
parsed[1].should == [course2.id.to_s, "SIS_COURSE_ID_2", section5.id.to_s, nil, "active"]
|
||||
parsed[2].should == [course4.id.to_s, "SIS_COURSE_ID_4", section3.id.to_s, "english_section_3", "active"]
|
||||
end
|
||||
|
||||
it "should run the SIS Export" do
|
||||
@account = Account.default
|
||||
@admin = account_admin_user(:account => @account)
|
||||
user1 = user_with_pseudonym(:active_all => true, :account => @account, :name => "John St. Clair", :sortable_name => "St. Clair, John", :username => 'john@stclair.com')
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_01"
|
||||
@user.pseudonym.save!
|
||||
user2 = user_with_pseudonym(:active_all => true, :username => 'micheal@michaelbolton.com', :name => 'Michael Bolton', :account => @account)
|
||||
@user.pseudonym.sis_user_id = "user_sis_id_02"
|
||||
@user.pseudonym.save!
|
||||
user3 = user_with_pseudonym(:name => 'Rick Astley', :account => @account)
|
||||
sub_account = Account.create(:parent_account => @account, :name => 'English')
|
||||
sub_account.sis_source_id = 'sub1'
|
||||
sub_account.save!
|
||||
sub_sub_account = Account.create(:parent_account => sub_account, :name => 'ESL')
|
||||
sub_sub_account.sis_source_id = 'subsub1'
|
||||
sub_sub_account.save!
|
||||
sub_account2 = Account.create(:parent_account => @account, :name => 'Math')
|
||||
sub_account2.sis_source_id = 'sub2'
|
||||
sub_account2.save!
|
||||
term1 = EnrollmentTerm.create(:name => 'Fall', :start_at => '20-08-2012', :end_at => '20-12-2012')
|
||||
term1.root_account = @account
|
||||
term1.sis_source_id = 'fall12'
|
||||
term1.save!
|
||||
term2 = EnrollmentTerm.create(:name => 'Winter', :start_at => '07-01-2013', :end_at => '28-04-2013')
|
||||
term2.root_account = @account
|
||||
term2.sis_source_id = 'winter13'
|
||||
term2.save!
|
||||
start_at = 1.day.ago
|
||||
end_at = 10.days.from_now
|
||||
|
||||
course1 = Course.new(:name => 'English 101', :course_code => 'ENG101', :start_at => start_at, :conclude_at => end_at, :account => sub_account, :enrollment_term => term1)
|
||||
course1.save
|
||||
course1.workflow_state = 'available'
|
||||
course1.sis_source_id = "SIS_COURSE_ID_1"
|
||||
course1.restrict_enrollments_to_course_dates = true
|
||||
course1.save!
|
||||
|
||||
course2 = Course.new(:name => 'Math 101', :course_code => 'MAT101', :conclude_at => end_at, :account => @account)
|
||||
course2.save
|
||||
course2.workflow_state = 'available'
|
||||
course2.sis_source_id = "SIS_COURSE_ID_2"
|
||||
course2.restrict_enrollments_to_course_dates = true
|
||||
course2.save!
|
||||
|
||||
course3 = Course.new(:name => 'Science 101', :course_code => 'SCI101', :account => @account)
|
||||
course3.save
|
||||
course3.workflow_state = 'available'
|
||||
course3.sis_source_id = "SIS_COURSE_ID_3"
|
||||
course3.save!
|
||||
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
parameters = {}
|
||||
parameters["enrollment_term"] = @account.enrollment_terms.active.find_or_create_by_name(EnrollmentTerm::DEFAULT_TERM_NAME).id
|
||||
parameters["accounts"] = true
|
||||
parameters["users"] = true
|
||||
parameters["courses"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
|
||||
accounts_report = parsed["accounts"][1..-1].sort_by { |r| r[0] }
|
||||
accounts_report[0].should == ["sub1", nil, "English", "active"]
|
||||
accounts_report[1].should == ["sub2", nil, "Math", "active"]
|
||||
accounts_report[2].should == ["subsub1", "sub1", "ESL", "active"]
|
||||
|
||||
users_report = parsed["users"][1..-1].sort_by { |r| r[0] }
|
||||
users_report[0].should == ["user_sis_id_01", "john@stclair.com", nil, "John St.", "Clair", "john@stclair.com", "active"]
|
||||
users_report[1].should == ["user_sis_id_02", "micheal@michaelbolton.com", nil, "Michael", "Bolton", "micheal@michaelbolton.com", "active"]
|
||||
|
||||
courses_report = parsed["courses"][1..-1].sort_by { |r| r[0] }
|
||||
courses_report[0].should == ["SIS_COURSE_ID_2", "MAT101", "Math 101", nil, nil, "active", nil, end_at.iso8601]
|
||||
courses_report[1].should == ["SIS_COURSE_ID_3", "SCI101", "Science 101", nil, nil, "active", nil, nil]
|
||||
|
||||
parameters = {}
|
||||
parameters["accounts"] = true
|
||||
parameters["users"] = true
|
||||
parameters["courses"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
|
||||
accounts_report = parsed["accounts"][1..-1].sort_by { |r| r[0] }
|
||||
accounts_report[0].should == ["sub1", nil, "English", "active"]
|
||||
accounts_report[1].should == ["sub2", nil, "Math", "active"]
|
||||
accounts_report[2].should == ["subsub1", "sub1", "ESL", "active"]
|
||||
|
||||
users_report = parsed["users"][1..-1].sort_by { |r| r[0] }
|
||||
users_report[0].should == ["user_sis_id_01", "john@stclair.com", nil, "John St.", "Clair", "john@stclair.com", "active"]
|
||||
users_report[1].should == ["user_sis_id_02", "micheal@michaelbolton.com", nil, "Michael", "Bolton", "micheal@michaelbolton.com", "active"]
|
||||
|
||||
courses_report = parsed["courses"][1..-1].sort_by { |r| r[0] }
|
||||
courses_report[0].should == ["SIS_COURSE_ID_1", "ENG101", "English 101", "sub1", "fall12", "active", start_at.iso8601, end_at.iso8601]
|
||||
courses_report[1].should == ["SIS_COURSE_ID_2", "MAT101", "Math 101", nil, nil, "active", nil, end_at.iso8601]
|
||||
courses_report[2].should == ["SIS_COURSE_ID_3", "SCI101", "Science 101", nil, nil, "active", nil, nil]
|
||||
end
|
||||
it "should run the SIS Export reports with no data" do
|
||||
@account = Account.default
|
||||
@admin = account_admin_user(:account => @account)
|
||||
Notification.find_or_create_by_name("Report Generated")
|
||||
Notification.find_or_create_by_name("Report Generation Failed")
|
||||
|
||||
parameters = {}
|
||||
parameters["accounts"] = true
|
||||
parameters["users"] = true
|
||||
parameters["terms"] = true
|
||||
parameters["courses"] = true
|
||||
parameters["sections"] = true
|
||||
parameters["enrollments"] = true
|
||||
parameters["groups"] = true
|
||||
parameters["group_membership"] = true
|
||||
parameters["xlist"] = true
|
||||
parsed = run_report("sis_export_csv", parameters)
|
||||
|
||||
parsed["accounts"].should == [["account_id", "parent_account_id", "name", "status"]]
|
||||
parsed["terms"].should == [["term_id", "name", "status", "start_date", "end_date"]]
|
||||
parsed["users"].should == [["user_id", "login_id", "password", "first_name", "last_name", "email", "status"]]
|
||||
parsed["courses"].should == [["course_id", "short_name", "long_name", "account_id", "term_id", "status", "start_date", "end_date"]]
|
||||
parsed["sections"].should == [["section_id", "course_id", "name", "status", "start_date", "end_date", "account_id"]]
|
||||
parsed["enrollments"].should == [["course_id", "user_id", "role", "section_id", "status", "associated_user_id"]]
|
||||
parsed["groups"].should == [["group_id", "account_id", "name", "status"]]
|
||||
parsed["group_membership"].should == [["group_id", "user_id", "status"]]
|
||||
parsed["xlist"].should == [["xlist_course_id", "section_id", "status"]]
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue