From 1be3e21887f269dce251656ef3e5777112b89b18 Mon Sep 17 00:00:00 2001 From: James Williams Date: Wed, 21 Sep 2016 14:22:15 -0600 Subject: [PATCH] show quiz descriptions to observers test plan: * be an observer * should be able to see quiz descriptions (if published) closes #CNVS-31029 Change-Id: I5f77d379c9540698fc8ee4d3f6066c846aaacccc Reviewed-on: https://gerrit.instructure.com/90985 Tested-by: Jenkins Reviewed-by: Jeremy Stanley QA-Review: Heath Hales Product-Review: James Williams --- app/controllers/quizzes/quizzes_controller.rb | 3 ++- app/models/quizzes/quiz.rb | 2 +- spec/selenium/quizzes/quizzes_student_spec.rb | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/controllers/quizzes/quizzes_controller.rb b/app/controllers/quizzes/quizzes_controller.rb index b44d926d813..e31443ecfd6 100644 --- a/app/controllers/quizzes/quizzes_controller.rb +++ b/app/controllers/quizzes/quizzes_controller.rb @@ -176,7 +176,8 @@ class Quizzes::QuizzesController < ApplicationController if session[:quiz_id] == @quiz.id && !request.xhr? session.delete(:quiz_id) end - @locked_reason = @quiz.locked_for?(@current_user, :check_policies => true, :deep_check_if_needed => true) + is_observer = @context_enrollment && @context_enrollment.observer? + @locked_reason = @quiz.locked_for?(@current_user, :check_policies => true, :deep_check_if_needed => true, :is_observer => is_observer) @locked = @locked_reason && !can_preview? @context_module_tag = ContextModuleItem.find_tag_with_preferred([@quiz, @quiz.assignment], params[:module_item_id]) diff --git a/app/models/quizzes/quiz.rb b/app/models/quizzes/quiz.rb index 32b988af5d6..70a40b7117a 100644 --- a/app/models/quizzes/quiz.rb +++ b/app/models/quizzes/quiz.rb @@ -748,7 +748,7 @@ class Quizzes::Quiz < ActiveRecord::Base locked = assignment_lock elsif (module_lock = locked_by_module_item?(user, opts[:deep_check_if_needed])) locked = lock_info.merge({ context_module: module_lock.context_module.attributes }) - elsif !context.try_rescue(:is_public) && !context.grants_right?(user, :participate_as_student) + elsif !context.try_rescue(:is_public) && !context.grants_right?(user, :participate_as_student) && !opts[:is_observer] locked = lock_info.merge({ missing_permission: :participate_as_student.to_s }) end diff --git a/spec/selenium/quizzes/quizzes_student_spec.rb b/spec/selenium/quizzes/quizzes_student_spec.rb index f9adb7bd0b3..06cf21adc2f 100644 --- a/spec/selenium/quizzes/quizzes_student_spec.rb +++ b/spec/selenium/quizzes/quizzes_student_spec.rb @@ -235,4 +235,21 @@ describe 'quizzes' do take_and_answer_quiz expect(f("#section-tabs .grades .nav-badge").text).to eq "1" end + + it "should show quiz descriptions to observers" do + @context = @course + quiz = quiz_model + description = "some description" + quiz.description = description + quiz.save! + + @student = @user + @observer = user + @course.enroll_user(@observer, 'ObserverEnrollment', :enrollment_state => 'active', :associated_user_id => @student.id) + user_session(@observer) + + open_quiz_show_page + + expect(f(".description")).to include_text(description) + end end