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:
Michael Nomitch 2015-04-06 16:32:35 -05:00 committed by Mike Nomitch
parent 14458825ec
commit d1b4fdf978
3 changed files with 88 additions and 14 deletions

View File

@ -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]

View File

@ -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

View File

@ -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