DA - group discussion topic index works with DA on
fixes CNVS-19639 test plan: - in a course with DA on make a group discussion topic (without an attached assignment) - go to the group discussion topic index page - make sure it shows up - make sure that the courses assignment & discussion topic indeces are working like normal Change-Id: Ibe5802a32e59e4ae0fab21707d66fb3bcba1a7fd Reviewed-on: https://gerrit.instructure.com/51695 QA-Review: Adam Stone <astone@instructure.com> Reviewed-by: Simon Williams <simon@instructure.com> Product-Review: Simon Williams <simon@instructure.com> Tested-by: Jenkins
This commit is contained in:
parent
14458825ec
commit
d1b4fdf978
|
@ -280,7 +280,7 @@ class DiscussionTopicsController < ApplicationController
|
|||
end
|
||||
|
||||
if @context.feature_enabled?(:differentiated_assignments)
|
||||
scope = DifferentiableAssignment.scope_filter(scope, @current_user, @context)
|
||||
scope = scope_for_differentiated_assignments(scope)
|
||||
end
|
||||
|
||||
@topics = Api.paginate(scope, self, topic_pagination_url)
|
||||
|
@ -332,6 +332,23 @@ class DiscussionTopicsController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def scope_for_differentiated_assignments(scope)
|
||||
return scope if @context.is_a?(Account)
|
||||
return DifferentiableAssignment.scope_filter(scope, @current_user, @context) if @context.is_a?(Course)
|
||||
return scope if @context.context.is_a?(Account)
|
||||
|
||||
# group context owned by a course
|
||||
course = @context.context
|
||||
course_scope = course.discussion_topics.active
|
||||
course_level_topic_ids = DifferentiableAssignment.scope_filter(course_scope, @current_user, course).pluck(:id)
|
||||
if course_level_topic_ids.any?
|
||||
scope.where("root_topic_id IN (?) OR root_topic_id IS NULL OR id IN (?)", course_level_topic_ids, course_level_topic_ids)
|
||||
else
|
||||
scope.where(root_topic_id: nil)
|
||||
end
|
||||
end
|
||||
private :scope_for_differentiated_assignments
|
||||
|
||||
def is_child_topic?
|
||||
root_topic_id = params[:root_discussion_topic_id]
|
||||
|
||||
|
|
|
@ -467,24 +467,24 @@ class DiscussionTopic < ActiveRecord::Base
|
|||
scope :by_position_legacy, -> { order("discussion_topics.position DESC, discussion_topics.created_at DESC, discussion_topics.id DESC") }
|
||||
scope :by_last_reply_at, -> { order("discussion_topics.last_reply_at DESC, discussion_topics.created_at DESC, discussion_topics.id DESC") }
|
||||
|
||||
scope :visible_to_students_in_course_with_da, lambda { |user_ids, course_ids|
|
||||
without_assignment_in_course(course_ids).union(joins_assignment_student_visibilities(user_ids, course_ids))
|
||||
}
|
||||
scope :visible_to_students_in_course_with_da, lambda { |user_ids, course_ids|
|
||||
without_assignment_in_course(course_ids).union(joins_assignment_student_visibilities(user_ids, course_ids))
|
||||
}
|
||||
|
||||
scope :without_assignment_in_course, lambda { |course_ids|
|
||||
where(context_id: course_ids, context_type: "Course").where("discussion_topics.assignment_id IS NULL")
|
||||
}
|
||||
scope :without_assignment_in_course, lambda { |course_ids|
|
||||
where(context_id: course_ids, context_type: "Course").where("discussion_topics.assignment_id IS NULL")
|
||||
}
|
||||
|
||||
scope :joins_assignment_student_visibilities, lambda { |user_ids, course_ids|
|
||||
user_ids = Array.wrap(user_ids).join(',')
|
||||
course_ids = Array.wrap(course_ids).join(',')
|
||||
joins(sanitize_sql([<<-SQL, user_ids, course_ids]))
|
||||
scope :joins_assignment_student_visibilities, lambda { |user_ids, course_ids|
|
||||
user_ids = Array.wrap(user_ids).join(',')
|
||||
course_ids = Array.wrap(course_ids).join(',')
|
||||
joins(sanitize_sql([<<-SQL, user_ids, course_ids]))
|
||||
JOIN assignment_student_visibilities
|
||||
ON (assignment_student_visibilities.assignment_id = discussion_topics.assignment_id
|
||||
AND assignment_student_visibilities.user_id IN (%s)
|
||||
AND assignment_student_visibilities.course_id IN (%s)
|
||||
AND assignment_student_visibilities.user_id IN (%s)
|
||||
AND assignment_student_visibilities.course_id IN (%s)
|
||||
)
|
||||
SQL
|
||||
SQL
|
||||
}
|
||||
|
||||
alias_attribute :available_from, :delayed_post_at
|
||||
|
|
|
@ -72,6 +72,63 @@ describe DiscussionTopicsController do
|
|||
get 'index', :group_id => @group.id
|
||||
expect(response).to be_success
|
||||
end
|
||||
|
||||
context "graded group discussion" do
|
||||
before do
|
||||
@course.account.role_overrides.create!(
|
||||
role: student_role,
|
||||
permission: 'view_group_pages',
|
||||
enabled: true
|
||||
)
|
||||
@course.enable_feature!(:differentiated_assignments)
|
||||
|
||||
group_discussion_assignment
|
||||
@child_topic = @topic.child_topics.first
|
||||
@group = @child_topic.context
|
||||
@group.add_user(@student)
|
||||
@assignment.only_visible_to_overrides = true
|
||||
@assignment.save!
|
||||
end
|
||||
it "should return graded and visible group discussions properly" do
|
||||
cs = @student.enrollments.first.course_section
|
||||
create_section_override_for_assignment(@assignment, {course_section: cs})
|
||||
|
||||
user_session(@student)
|
||||
|
||||
get 'index', :group_id => @group.id
|
||||
expect(response).to be_success
|
||||
expect(assigns["topics"]).to include(@child_topic)
|
||||
end
|
||||
|
||||
it "should not return graded group discussions if a student has no visibility" do
|
||||
user_session(@student)
|
||||
|
||||
get 'index', :group_id => @group.id
|
||||
expect(response).to be_success
|
||||
expect(assigns["topics"]).not_to include(@child_topic)
|
||||
end
|
||||
end
|
||||
|
||||
it "should return non-graded group discussions properly" do
|
||||
@course.account.role_overrides.create!(
|
||||
role: student_role,
|
||||
permission: 'view_group_pages',
|
||||
enabled: true
|
||||
)
|
||||
@course.enable_feature!(:differentiated_assignments)
|
||||
|
||||
group_category(context: @course)
|
||||
membership = group_with_user(group_category: @group_category, user: @student, context: @course)
|
||||
@topic = @group.discussion_topics.create(:title => "group topic")
|
||||
@topic.context = @group
|
||||
@topic.save!
|
||||
|
||||
user_session(@student)
|
||||
|
||||
get 'index', :group_id => @group.id
|
||||
expect(response).to be_success
|
||||
expect(assigns["topics"]).to include(@topic)
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET 'show'" do
|
||||
|
|
Loading…
Reference in New Issue