fix datafixup to work outside of a transaction
fixes CNVS-7780 test plan: - specs pass, and running the job manually works Change-Id: Ib34dd01c08b88e47110548af71c364e7274abeed Reviewed-on: https://gerrit.instructure.com/23797 Reviewed-by: Rob Orton <rob@instructure.com> Tested-by: Jenkins <jenkins@instructure.com> Product-Review: Brian Palmer <brianp@instructure.com> QA-Review: Brian Palmer <brianp@instructure.com> QA-Review: Amber Taniuchi <amber@instructure.com>
This commit is contained in:
parent
f5694b8305
commit
6dba1f3701
|
@ -1,70 +1,124 @@
|
|||
module DataFixup::FixOutOfSyncOutcomeAlignments
|
||||
def self.run
|
||||
# Active alignments to deleted rubrics
|
||||
ContentTag.joins("
|
||||
INNER JOIN rubrics r
|
||||
ON content_tags.content_id = r.id
|
||||
AND content_tags.content_type = 'Rubric'
|
||||
").where("
|
||||
if Rails.version < '3.0'
|
||||
scope = ContentTag.scoped(joins:
|
||||
"INNER JOIN rubrics r
|
||||
ON content_tags.content_id = r.id
|
||||
AND content_tags.content_type = 'Rubric'
|
||||
", select: "content_tags.*")
|
||||
else
|
||||
scope = ContentTag.joins("
|
||||
INNER JOIN rubrics r
|
||||
ON content_tags.content_id = r.id
|
||||
AND content_tags.content_type = 'Rubric'
|
||||
").select("content_tags.*")
|
||||
end
|
||||
scope = scope.where("
|
||||
content_tags.tag_type = 'learning_outcome'
|
||||
AND content_tags.workflow_state = 'active'
|
||||
AND r.workflow_state = 'deleted'
|
||||
").find_each do |ct|
|
||||
")
|
||||
scope.find_each do |ct|
|
||||
ct.destroy
|
||||
end
|
||||
|
||||
# Active alignments to rubrics that should no longer be aligned
|
||||
ContentTag.joins("
|
||||
INNER JOIN rubrics r
|
||||
ON content_tags.content_id = r.id
|
||||
AND content_tags.content_type = 'Rubric'
|
||||
").where("
|
||||
if Rails.version < '3.0'
|
||||
scope = ContentTag.scoped(joins:
|
||||
"INNER JOIN rubrics r
|
||||
ON content_tags.content_id = r.id
|
||||
AND content_tags.content_type = 'Rubric'
|
||||
", select: "content_tags.*")
|
||||
else
|
||||
scope = ContentTag.joins("
|
||||
INNER JOIN rubrics r
|
||||
ON content_tags.content_id = r.id
|
||||
AND content_tags.content_type = 'Rubric'
|
||||
").select("content_tags.*")
|
||||
end
|
||||
scope = scope.where("
|
||||
content_tags.tag_type = 'learning_outcome'
|
||||
AND content_tags.workflow_state = 'active'
|
||||
AND r.workflow_state = 'active'
|
||||
AND NOT r.data LIKE '%:learning_outcome_id: ' || content_tags.learning_outcome_id || '%'
|
||||
").find_each do |ct|
|
||||
")
|
||||
scope.find_each do |ct|
|
||||
ct.destroy
|
||||
end
|
||||
|
||||
# Active alignments to assignments without rubrics
|
||||
ContentTag.joins("
|
||||
INNER JOIN assignments a
|
||||
ON content_tags.content_id = a.id
|
||||
AND content_tags.content_type = 'Assignment'
|
||||
LEFT OUTER JOIN rubric_associations ra
|
||||
ON ra.association_id = a.id
|
||||
AND ra.association_type = 'Assignment'
|
||||
").where("
|
||||
if Rails.version < '3.0'
|
||||
scope = ContentTag.scoped(joins:
|
||||
"INNER JOIN assignments a
|
||||
ON content_tags.content_id = a.id
|
||||
AND content_tags.content_type = 'Assignment'
|
||||
LEFT OUTER JOIN rubric_associations ra
|
||||
ON ra.association_id = a.id
|
||||
AND ra.association_type = 'Assignment'
|
||||
", select: "content_tags.*")
|
||||
else
|
||||
scope = ContentTag.joins("
|
||||
INNER JOIN assignments a
|
||||
ON content_tags.content_id = a.id
|
||||
AND content_tags.content_type = 'Assignment'
|
||||
LEFT OUTER JOIN rubric_associations ra
|
||||
ON ra.association_id = a.id
|
||||
AND ra.association_type = 'Assignment'
|
||||
").select("content_tags.*")
|
||||
end
|
||||
scope = scope.where("
|
||||
content_tags.tag_type = 'learning_outcome'
|
||||
AND content_tags.workflow_state = 'active'
|
||||
AND ra.id IS NULL
|
||||
").find_each do |ct|
|
||||
")
|
||||
scope.find_each do |ct|
|
||||
ct.destroy
|
||||
end
|
||||
|
||||
# Active alignments to assignments with rubrics
|
||||
# that don't have a matching alignment
|
||||
ContentTag.joins("
|
||||
INNER JOIN assignments a
|
||||
ON content_tags.content_id = a.id
|
||||
AND content_tags.content_type = 'Assignment'
|
||||
INNER JOIN rubric_associations ra
|
||||
ON ra.association_id = a.id
|
||||
AND ra.association_type = 'Assignment'
|
||||
INNER JOIN rubrics r
|
||||
ON ra.rubric_id = r.id
|
||||
LEFT OUTER JOIN content_tags ct2
|
||||
ON ct2.content_id = r.id
|
||||
AND ct2.content_type = 'Rubric'
|
||||
AND ct2.tag_type = 'learning_outcome'
|
||||
AND ct2.workflow_state = 'active'
|
||||
AND ct2.learning_outcome_id = content_tags.learning_outcome_id
|
||||
").where("
|
||||
if Rails.version < '3.0'
|
||||
scope = ContentTag.scoped(joins:
|
||||
"INNER JOIN assignments a
|
||||
ON content_tags.content_id = a.id
|
||||
AND content_tags.content_type = 'Assignment'
|
||||
INNER JOIN rubric_associations ra
|
||||
ON ra.association_id = a.id
|
||||
AND ra.association_type = 'Assignment'
|
||||
INNER JOIN rubrics r
|
||||
ON ra.rubric_id = r.id
|
||||
LEFT OUTER JOIN content_tags ct2
|
||||
ON ct2.content_id = r.id
|
||||
AND ct2.content_type = 'Rubric'
|
||||
AND ct2.tag_type = 'learning_outcome'
|
||||
AND ct2.workflow_state = 'active'
|
||||
AND ct2.learning_outcome_id = content_tags.learning_outcome_id
|
||||
", select: "content_tags.*")
|
||||
else
|
||||
scope = ContentTag.joins("
|
||||
INNER JOIN assignments a
|
||||
ON content_tags.content_id = a.id
|
||||
AND content_tags.content_type = 'Assignment'
|
||||
INNER JOIN rubric_associations ra
|
||||
ON ra.association_id = a.id
|
||||
AND ra.association_type = 'Assignment'
|
||||
INNER JOIN rubrics r
|
||||
ON ra.rubric_id = r.id
|
||||
LEFT OUTER JOIN content_tags ct2
|
||||
ON ct2.content_id = r.id
|
||||
AND ct2.content_type = 'Rubric'
|
||||
AND ct2.tag_type = 'learning_outcome'
|
||||
AND ct2.workflow_state = 'active'
|
||||
AND ct2.learning_outcome_id = content_tags.learning_outcome_id
|
||||
").select("content_tags.*")
|
||||
end
|
||||
scope = scope.where("
|
||||
content_tags.tag_type = 'learning_outcome'
|
||||
AND content_tags.workflow_state = 'active'
|
||||
AND ct2.id IS NULL
|
||||
").find_each do |ct|
|
||||
")
|
||||
scope.find_each do |ct|
|
||||
ct.destroy
|
||||
end
|
||||
end
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
|
||||
|
||||
describe DataFixup::FixOutOfSyncOutcomeAlignments do
|
||||
self.use_transactional_fixtures = false
|
||||
|
||||
before do
|
||||
course_with_teacher_logged_in(:active_all => true)
|
||||
|
@ -81,4 +82,8 @@ describe DataFixup::FixOutOfSyncOutcomeAlignments do
|
|||
DataFixup::FixOutOfSyncOutcomeAlignments.run
|
||||
align.reload.should be_deleted
|
||||
end
|
||||
|
||||
after(:all) do
|
||||
truncate_all_tables
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue