Add developer key to context external tools
Closes PLAT-3657 Test Plan: Verify an association between the context_external_tools table and developer_keys table exists. One developer key can have many tools. Verify that a developer key is not required to save a tool and that a tool is not required to save a developer key. Change-Id: I129c611104fd656580905a248213df1014c68071 Reviewed-on: https://gerrit.instructure.com/160414 Reviewed-by: Cody Cutrer <cody@instructure.com> Reviewed-by: August Thornton <august@instructure.com> QA-Review: August Thornton <august@instructure.com> Tested-by: Jenkins Product-Review: Weston Dransfield <wdransfield@instructure.com>
This commit is contained in:
parent
7f606a5a27
commit
4ae2b173aa
|
@ -23,6 +23,7 @@ class ContextExternalTool < ActiveRecord::Base
|
||||||
has_many :context_external_tool_placements, :autosave => true
|
has_many :context_external_tool_placements, :autosave => true
|
||||||
|
|
||||||
belongs_to :context, polymorphic: [:course, :account]
|
belongs_to :context, polymorphic: [:course, :account]
|
||||||
|
belongs_to :developer_key
|
||||||
|
|
||||||
include MasterCourses::Restrictor
|
include MasterCourses::Restrictor
|
||||||
restrict_columns :content, [:name, :description]
|
restrict_columns :content, [:name, :description]
|
||||||
|
|
|
@ -28,6 +28,7 @@ class DeveloperKey < ActiveRecord::Base
|
||||||
has_many :page_views
|
has_many :page_views
|
||||||
has_many :access_tokens, -> { where(:workflow_state => "active") }
|
has_many :access_tokens, -> { where(:workflow_state => "active") }
|
||||||
has_many :developer_key_account_bindings, inverse_of: :developer_key, dependent: :destroy
|
has_many :developer_key_account_bindings, inverse_of: :developer_key, dependent: :destroy
|
||||||
|
has_many :context_external_tools
|
||||||
|
|
||||||
has_one :tool_consumer_profile, :class_name => 'Lti::ToolConsumerProfile'
|
has_one :tool_consumer_profile, :class_name => 'Lti::ToolConsumerProfile'
|
||||||
serialize :scopes, Array
|
serialize :scopes, Array
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2018 - 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/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
class AddDeveloperKeyIdToContextExternalTools < ActiveRecord::Migration[5.1]
|
||||||
|
tag :predeploy
|
||||||
|
disable_ddl_transaction!
|
||||||
|
|
||||||
|
def change
|
||||||
|
add_column :context_external_tools, :developer_key_id, :integer, limit: 8
|
||||||
|
add_index :context_external_tools, :developer_key_id, algorithm: :concurrently
|
||||||
|
end
|
||||||
|
end
|
|
@ -26,6 +26,24 @@ describe ContextExternalTool do
|
||||||
@course.update_attribute(:account, @account)
|
@course.update_attribute(:account, @account)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'associations' do
|
||||||
|
let_once(:developer_key) { DeveloperKey.create! }
|
||||||
|
let_once(:tool) do
|
||||||
|
ContextExternalTool.create!(
|
||||||
|
context: @course,
|
||||||
|
consumer_key: 'key',
|
||||||
|
shared_secret: 'secret',
|
||||||
|
name: 'test tool',
|
||||||
|
url: 'http://www.tool.com/launch',
|
||||||
|
developer_key: developer_key
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'allows setting the developer key' do
|
||||||
|
expect(tool.developer_key).to eq developer_key
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#duplicated_in_context?' do
|
describe '#duplicated_in_context?' do
|
||||||
shared_examples_for 'detects duplication in contexts' do
|
shared_examples_for 'detects duplication in contexts' do
|
||||||
let(:context) { raise 'Override in spec' }
|
let(:context) { raise 'Override in spec' }
|
||||||
|
|
|
@ -176,6 +176,20 @@ describe DeveloperKey do
|
||||||
developer_key_saved.destroy_permanently!
|
developer_key_saved.destroy_permanently!
|
||||||
expect(DeveloperKeyAccountBinding.find_by(id: binding_id)).to be_nil
|
expect(DeveloperKeyAccountBinding.find_by(id: binding_id)).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'has many context external tools' do
|
||||||
|
tool = ContextExternalTool.create!(
|
||||||
|
context: account,
|
||||||
|
consumer_key: 'key',
|
||||||
|
shared_secret: 'secret',
|
||||||
|
name: 'test tool',
|
||||||
|
url: 'http://www.tool.com/launch',
|
||||||
|
developer_key: developer_key_saved
|
||||||
|
)
|
||||||
|
expect(developer_key_saved.context_external_tools).to match_array [
|
||||||
|
tool
|
||||||
|
]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#account_binding_for' do
|
describe '#account_binding_for' do
|
||||||
|
|
Loading…
Reference in New Issue