fix nil context in NewQuizzesFeaturesHelper placements check

There are instances where @context is undefined in the feature
helper. This updates the method to take a passed context and
default to the class define context.

fixes QUIZ-8516
flag=new_quizzes_account_course_level_item_banks

Test Plan:
1. specs pass
2. open up the broswer dev console for your local canvas
3. Run `fetch('http://canvas.docker/api/v1/courses?include[]=tabs'}`
4. You should not get an error.

Change-Id: I331e921f626651244738ca6bc7d7007f06d30d9a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/267422
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Stephen Kacsmark <skacsmark@instructure.com>
QA-Review: Mark McDermott <mmcdermott@instructure.com>
Product-Review: Stephen Kacsmark <skacsmark@instructure.com>
This commit is contained in:
James Logan 2021-06-21 13:29:05 -05:00
parent 03562453a0
commit 87bfd63341
5 changed files with 33 additions and 6 deletions

View File

@ -347,7 +347,7 @@ module ApplicationHelper
if (tab[:id] == @context.class::TAB_COLLABORATIONS rescue false)
Collaboration.any_collaborations_configured?(@context) && !@context.feature_enabled?(:new_collaborations)
elsif (quiz_lti_tab?(tab) rescue false)
new_quizzes_navigation_placements_enabled?
new_quizzes_navigation_placements_enabled?(@context)
elsif (tab[:id] == @context.class::TAB_COLLABORATIONS_NEW rescue false)
@context.feature_enabled?(:new_collaborations)
elsif (tab[:id] == @context.class::TAB_CONFERENCES rescue false)

View File

@ -35,14 +35,14 @@ module NewQuizzesFeaturesHelper
@context.root_account.feature_enabled?(:migrate_to_new_quizzes_by_default) || new_quizzes_require_migration?
end
def new_quizzes_navigation_placements_enabled?
Account.site_admin.feature_enabled?(:new_quizzes_account_course_level_item_banks) && @context.feature_enabled?(:quizzes_next)
def new_quizzes_navigation_placements_enabled?(context = @context)
Account.site_admin.feature_enabled?(:new_quizzes_account_course_level_item_banks) && context.feature_enabled?(:quizzes_next)
end
module_function
def new_quizzes_enabled?(context = @context)
context.feature_enabled?(:quizzes_next) && context.quiz_lti_tool.present? && !new_quizzes_require_migration?(context)
context.feature_enabled?(:quizzes_next) && context.quiz_lti_tool.present? && !new_quizzes_require_migration?(context)
end
def new_quizzes_require_migration?(context = @context)

View File

@ -112,7 +112,7 @@ module SectionTabHelper
elsif tab_is?(tab, 'TAB_CONFERENCES')
!WebConference.config(context: @context)
elsif quiz_lti_tab?(tab)
!new_quizzes_navigation_placements_enabled?
!new_quizzes_navigation_placements_enabled?(context)
end
end
end

View File

@ -118,7 +118,7 @@ module Api::V1::Tab
elsif (tab[:id] == context.class::TAB_CONFERENCES rescue false)
tab[:href] && tab[:label] && feature_enabled?(:web_conferences)
elsif (quiz_lti_tab?(tab) rescue false)
tab[:href] && tab[:label] && new_quizzes_navigation_placements_enabled?
tab[:href] && tab[:label] && new_quizzes_navigation_placements_enabled?(context)
else
tab[:href] && tab[:label]
end

View File

@ -126,4 +126,31 @@ describe NewQuizzesFeaturesHelper do
expect(new_quizzes_require_migration?).to eq true
end
end
describe "#new_quizzes_navigation_placements_enabled" do
before(:each) do
allow(@context).to receive(:feature_enabled?).with(:quizzes_next).and_return(true)
Account.site_admin.enable_feature!(:new_quizzes_account_course_level_item_banks)
end
it 'should be true when new_quizzes_account_course_level_item_banks and quizzes_next are true' do
expect(new_quizzes_navigation_placements_enabled?).to eq true
end
it 'should be false when new_quizzes_account_course_level_item_banks is disabled' do
Account.site_admin.disable_feature!(:new_quizzes_account_course_level_item_banks)
expect(new_quizzes_navigation_placements_enabled?).to eq false
end
it 'should be false when quizzes_next is disabled' do
allow(@context).to receive(:feature_enabled?).with(:quizzes_next).and_return(false)
expect(new_quizzes_navigation_placements_enabled?).to eq false
end
it 'should accept a context' do
fake_context = Course.create(name: 'fake context')
fake_context.disable_feature!(:quizzes_next)
expect(new_quizzes_navigation_placements_enabled?(fake_context)).to eq false
end
end
end