update docviewer iwork flag to check region

The docviewer iwork flag only looked at the shipping address before,
this follows the model of what we did with heap, but is contained as a
separate file as the two projects requirements may drift.

closes CAS-1123

test plan:
 - specs pass

Change-Id: Ia9c9a72f7bf000a1dcf352b09751ac0a28713b90
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/307660
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Murilo Paiva <murilo.paiva@instructure.com>
QA-Review: Keith Garner <kgarner@instructure.com>
Product-Review: Keith Garner <kgarner@instructure.com>
This commit is contained in:
Keith T. Garner 2022-12-19 13:54:01 -06:00 committed by Keith Garner
parent 1f9174aa8d
commit 9ec9597907
4 changed files with 106 additions and 4 deletions

View File

@ -0,0 +1,50 @@
# frozen_string_literal: true
#
# Copyright (C) 2022 - 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/>.
#
# This was copied from usage_metrics_predicate as the requirements are the same right now. This might not always be
# true, so this was recreated in a separate file.
#
# Right now Apple only has a server in the US, to comply with GDPR, we'll only turn this on for folks in the US.
module FeatureFlags
class DocviewerIworkPredicate
def initialize(context, region)
@context = context
@region = region
end
def call
overridden? || (us_billing_code? && in_approved_us_aws_region?)
end
private
def overridden?
@context&.root_account&.settings&.[](:docviewer_enable_iwork_files)
end
def us_billing_code?
@context&.root_account&.external_integration_keys&.find_by(key_type: "salesforce_billing_country_code")&.key_value == "US"
end
def in_approved_us_aws_region?
["us-east-1", "us-west-2"].include? @region
end
end
end

View File

@ -67,10 +67,7 @@ module FeatureFlags
end
def self.docviewer_enable_iwork_visible_on_hook(context)
root_account = context.root_account
# Right now Apple only has a server in the US, to comply with GDPR, we'll only turn this on for folks in the US.
root_account.external_integration_keys.find_by(key_type: "salesforce_billing_country_code")&.key_value == "US"
DocviewerIworkPredicate.new(context, Shard.current.database_server.config[:region]).call
end
def self.usage_metrics_allowed_hook(context)

View File

@ -0,0 +1,53 @@
# frozen_string_literal: true
#
# Copyright (C) 2019 - 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/>.
#
describe FeatureFlags::DocviewerIworkPredicate do
let(:settings) { nil }
let(:external_integration_keys) { nil }
let(:root_account) { double(settings: settings, external_integration_keys: external_integration_keys) }
let(:context) { double(root_account: root_account) }
let(:region) { nil }
let(:predicate) { FeatureFlags::DocviewerIworkPredicate.new context, region }
it "defaults to false" do
expect(predicate.call).to be_falsey
end
describe "when overridden" do
let(:settings) { { docviewer_enable_iwork_files: true } }
it "returns true" do
expect(predicate.call).to be_truthy
end
end
describe "when US billing country and approved US aws region" do
let(:external_integration_keys) do
keys = double
allow(keys).to receive(:find_by).with({ key_type: "salesforce_billing_country_code" }) { double(key_value: "US") }
keys
end
let(:region) { "us-east-1" }
it "returns true" do
expect(predicate.call).to be_truthy
end
end
end

View File

@ -151,6 +151,8 @@ describe "Canvadoc" do
before do
Account.current_domain_root_account = Account.default
Account.default.external_integration_keys.create!(key_type: "salesforce_billing_country_code", key_value: "US")
allow(Shard.current.database_server.config).to receive(:[]).and_call_original
allow(Shard.current.database_server.config).to receive(:[]).with(:region).and_return("us-east-1")
end
after do