don't lose our enrollment when navigating between multiple courses with pending invitations

refs #5833

Change-Id: I9e91bb20f7f4f412b2c604f27acb86a02d338323
Reviewed-on: https://gerrit.instructure.com/6596
Tested-by: Hudson <hudson@instructure.com>
Reviewed-by: Brian Palmer <brianp@instructure.com>
This commit is contained in:
Cody Cutrer 2011-10-31 14:30:22 -06:00
parent 03d8d6df64
commit 4e1f699a71
2 changed files with 23 additions and 1 deletions

View File

@ -420,7 +420,7 @@ class CoursesController < ApplicationController
# Use the enrollment we already fetched, if possible
enrollment = @context_enrollment if @context_enrollment && @context_enrollment.pending? && (@context_enrollment.uuid == params[:invitation] || params[:invitation].blank?)
# Overwrite with the session enrollment, if one exists, and it's different than the current user's
enrollment = @context.enrollments.find_by_uuid_and_workflow_state(session[:enrollment_uuid], "invited") if session[:enrollment_uuid] && enrollment.try(:uuid) != session[:enrollment_uuid] && params[:invitation].blank?
enrollment = @context.enrollments.find_by_uuid_and_workflow_state(session[:enrollment_uuid], "invited") if session[:enrollment_uuid] && enrollment.try(:uuid) != session[:enrollment_uuid] && params[:invitation].blank? && session[:enrollment_uuid_course_id] == @context.id
# Look up the explicitly provided invitation
enrollment ||= @context.enrollments.find(:first, :conditions => ["uuid=? AND workflow_state IN ('invited', 'rejected')", params[:invitation]]) unless params[:invitation].blank?
if enrollment && enrollment.state_based_on_date == :inactive

View File

@ -255,6 +255,28 @@ describe CoursesController do
get 'show', :id => @course.id, :invitation => @enrollment.uuid
response.should redirect_to(registration_confirmation_url(@user.email_channel.confirmation_code, :enrollment => @enrollment.uuid))
end
it "should not use the session enrollment if it's for the wrong course" do
course_with_student(:active_course => 1)
@enrollment1 = @enrollment
@course1 = @course
course(:active_course => 1)
student_in_course(:user => @user)
@enrollment2 = @enrollment
@course2 = @course
user_session(@user)
get 'show', :id => @course1.id
response.should be_success
assigns[:pending_enrollment].should == @enrollment1
session[:enrollment_uuid].should == @enrollment1.uuid
controller.instance_variable_set(:@pending_enrollment, nil)
get 'show', :id => @course2.id
response.should be_success
assigns[:pending_enrollment].should == @enrollment2
session[:enrollment_uuid].should == @enrollment2.uuid
end
end
end