From 251fe0a7b72a5d95477f8ba5f650ca5eb610588d Mon Sep 17 00:00:00 2001 From: Braden Anderson Date: Sun, 13 Apr 2014 16:09:19 -0600 Subject: [PATCH] dashboard: hide stream items from concluded courses fixes CNVS-1485 test plan: * verify that stream items show up on the dashboard * create a term with an end date in the past * assign a course to that term * verify that items from that course are no longer on the dashboard Change-Id: I9851997c9672f73335f54bdba78bdb71ee24d029 Reviewed-on: https://gerrit.instructure.com/33264 Tested-by: Jenkins Reviewed-by: Joel Hough QA-Review: Trevor deHaan Product-Review: Braden Anderson --- app/controllers/application_controller.rb | 2 +- app/controllers/context_controller.rb | 6 +++--- app/controllers/courses_controller.rb | 2 +- app/controllers/enrollments_api_controller.rb | 2 +- app/models/course.rb | 4 ++++ app/models/user.rb | 3 ++- spec/models/user_spec.rb | 9 +++++++++ 7 files changed, 21 insertions(+), 7 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a0ce3045479..90196075755 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -474,7 +474,7 @@ class ApplicationController < ActionController::Base # again. courses = @context.current_enrollments.with_each_shard.select { |e| e.state_based_on_date == :active }.map(&:course).uniq groups = opts[:include_groups] ? @context.current_groups.with_each_shard.reject{|g| g.context_type == "Course" && - (g.context.completed? || g.context.soft_concluded?)} : [] + g.context.concluded?} : [] if only_contexts.present? # find only those courses and groups passed in the only_contexts # parameter, but still scoped by user so we know they have rights to diff --git a/app/controllers/context_controller.rb b/app/controllers/context_controller.rb index 4c59d2b6d48..16741e61a04 100644 --- a/app/controllers/context_controller.rb +++ b/app/controllers/context_controller.rb @@ -204,9 +204,9 @@ class ContextController < ApplicationController }, :course => { :id => @context.id, - :completed => (completed = @context.completed?), - :soft_concluded => (soft_concluded = @context.soft_concluded?), - :concluded => completed || soft_concluded, + :completed => @context.completed?, + :soft_concluded => @context.soft_concluded?, + :concluded => @context.concluded?, :teacherless => @context.teacherless?, :available => @context.available?, :pendingInvitationsCount => @context.invited_count_visible_to(@current_user) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 80a33c1c22d..c74d20eaddb 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -1466,7 +1466,7 @@ class CoursesController < ApplicationController :root_account => @context.root_account, :search_method => @context.user_list_search_mode_for(@current_user), :initial_type => params[:enrollment_type]) - if !(@context.completed? || @context.soft_concluded?) && (@enrollments = EnrollmentsFromUserList.process(list, @context, enrollment_options)) + if !@context.concluded? && (@enrollments = EnrollmentsFromUserList.process(list, @context, enrollment_options)) Enrollment.send(:preload_associations, @enrollments, [:course_section, {:user => [:communication_channel, :pseudonym]}]) json = @enrollments.map { |e| { 'enrollment' => diff --git a/app/controllers/enrollments_api_controller.rb b/app/controllers/enrollments_api_controller.rb index 93f711973b0..6df14aa9fdf 100644 --- a/app/controllers/enrollments_api_controller.rb +++ b/app/controllers/enrollments_api_controller.rb @@ -313,7 +313,7 @@ class EnrollmentsApiController < ApplicationController errors << @@errors[:missing_user_id] unless params[:enrollment][:user_id].present? end - errors << @@errors[:concluded_course] if @context.completed? || @context.soft_concluded? + errors << @@errors[:concluded_course] if @context.concluded? return render_create_errors(errors) if errors.present? # create enrollment diff --git a/app/models/course.rb b/app/models/course.rb index bf262fc50ed..e5d39a3d355 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -1159,6 +1159,10 @@ class Course < ActiveRecord::Base self.restrict_enrollments_to_course_dates = true end + def concluded? + completed? || soft_concluded? + end + def state_sortable case state when :invited diff --git a/app/models/user.rb b/app/models/user.rb index 0df342ad2f7..b7c6a2ac508 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1837,12 +1837,13 @@ class User < ActiveRecord::Base self.shard.activate do Shackles.activate(:slave) do visible_instances = visible_stream_item_instances(opts). - includes(:stream_item). + includes(:stream_item => :context). limit(Setting.get('recent_stream_item_limit', 100)) visible_instances.map do |sii| si = sii.stream_item next unless si.present? next if si.asset_type == 'Submission' + next if si.context_type == "Course" && si.context.concluded? si.data.write_attribute(:unread, sii.unread?) si end.compact diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 139e7d22ece..6d07d1c6138 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -156,6 +156,15 @@ describe User do @user.recent_stream_items.size.should == 0 end + it "should ignore stream item instances from concluded courses" do + course_with_teacher(:active_all => true) + google_docs_collaboration_model(:user_id => @user.id) + @user.recent_stream_items.size.should == 1 + @course.soft_conclude! + @course.save + @user.recent_stream_items.size.should == 0 + end + describe "#recent_stream_items" do it "should skip submission stream items" do course_with_teacher(:active_all => true)