canvas-lms/spec/shared_examples/learning_outcome_context.rb

70 lines
2.4 KiB
Ruby

# frozen_string_literal: true
#
# Copyright (C) 2011 - present Instructure, Inc.
#
# This file is part of Canvas.
#
# Canvas is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the Free
# Software Foundation, version 3 of the License.
#
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
shared_examples_for 'a learning outcome context' do
let_once(:outcome_context) { described_class.create name: 'Foo' }
describe 'root_outcome_group' do
it 'creates a root outcome group' do
root = outcome_context.root_outcome_group
expect(root).not_to be_nil
expect(root.title).to eq 'Foo'
expect(root.context).to eq outcome_context
end
it 'returns an existing root outcome group' do
root1 = outcome_context.root_outcome_group
root2 = outcome_context.root_outcome_group
expect(root1).to eq root2
end
it 'does not create a root outcome group if force is false' do
root = outcome_context.root_outcome_group(false)
expect(root).to be_nil
end
end
describe 'update_root_outcome_group_name' do
let_once(:root) { outcome_context.root_outcome_group }
it 'updates the root name' do
outcome_context.update! name: 'Bar'
expect(root.reload.title).to eq 'Bar'
end
it 'updates outside of primary transaction' do
allow(outcome_context).to receive(:root_outcome_group).and_return(root)
expect(root).to receive(:update!).and_raise('Ha ha!')
expect { outcome_context.update! name: 'Bar' }.to raise_error('Ha ha!')
expect(outcome_context.reload.name).to eq 'Bar' # transaction completed
expect(root.reload.title).to eq 'Foo' # after_transaction failed
end
it 'does not update if name is not changed' do
allow(outcome_context).to receive(:root_outcome_group).and_return(root)
expect(root).not_to receive(:update!)
outcome_context.update! workflow_state: 'deleted'
end
end
end