From 7c52f9e9038a3fb3333972a9ae30292971892db9 Mon Sep 17 00:00:00 2001 From: Kabiru Mwenja Date: Wed, 21 Aug 2024 14:48:41 +0300 Subject: [PATCH] [#57367] Disable edit for OneDrive/Sharepoint with AMPF enabled https://community.openproject.org/work_packages/57367 --- .../projects/row_component.rb | 34 ++++++++++++------- .../spec/factories/storage_factory.rb | 7 ++++ .../storages/admin/project_storages_spec.rb | 14 ++++++++ 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/modules/storages/app/components/storages/project_storages/projects/row_component.rb b/modules/storages/app/components/storages/project_storages/projects/row_component.rb index 05b63b0ef3c3..b144b519edd1 100644 --- a/modules/storages/app/components/storages/project_storages/projects/row_component.rb +++ b/modules/storages/app/components/storages/project_storages/projects/row_component.rb @@ -40,24 +40,26 @@ def project_folder_type def more_menu_items return [] unless can_view_more_menu_items? - @more_menu_items ||= [more_menu_edit_project_storage, more_menu_detach_project] + @more_menu_items ||= [more_menu_edit_project_storage, more_menu_detach_project].compact end private def more_menu_edit_project_storage - { - scheme: :default, - icon: :pencil, - label: I18n.t("project_storages.edit_project_folder.label"), - href: edit_admin_settings_storage_project_storage_path( - storage_id: project_storage.storage.id, - id: project_storage.id - ), - data: { - controller: "async-dialog" + if can_edit? + { + scheme: :default, + icon: :pencil, + label: I18n.t("project_storages.edit_project_folder.label"), + href: edit_admin_settings_storage_project_storage_path( + storage_id: project_storage.storage.id, + id: project_storage.id + ), + data: { + controller: "async-dialog" + } } - } + end end def more_menu_detach_project @@ -78,6 +80,14 @@ def can_view_more_menu_items? User.current.admin && project.active? end + def can_edit? + !one_drive_storage_ampf_enabled? + end + + def one_drive_storage_ampf_enabled? + project_storage.storage.provider_type_one_drive? && project_storage.storage.automatic_management_enabled? + end + def project_storage table.project_storages[project.id] end diff --git a/modules/storages/spec/factories/storage_factory.rb b/modules/storages/spec/factories/storage_factory.rb index 0a28bf4e87ab..048e890902e7 100644 --- a/modules/storages/spec/factories/storage_factory.rb +++ b/modules/storages/spec/factories/storage_factory.rb @@ -175,6 +175,13 @@ end end + factory :one_drive_storage_configured, parent: :one_drive_storage do + after(:create) do |storage, _evaluator| + create(:oauth_client, integration: storage) + create(:oauth_application, integration: storage) + end + end + factory :sharepoint_dev_drive_storage, parent: :one_drive_storage do automatically_managed { false } diff --git a/modules/storages/spec/features/storages/admin/project_storages_spec.rb b/modules/storages/spec/features/storages/admin/project_storages_spec.rb index b63518814746..3c5759eb6c4e 100644 --- a/modules/storages/spec/features/storages/admin/project_storages_spec.rb +++ b/modules/storages/spec/features/storages/admin/project_storages_spec.rb @@ -319,6 +319,20 @@ end end end + + context "with OneDrive/Sharepoint with AMPF enabled" do + let(:storage) { create(:one_drive_storage_configured, :as_automatically_managed) } + let(:project_storage) { create(:project_storage, storage:) } + + it "does not show the edit option" do + project_storage + + visit admin_settings_storage_project_storages_path(storage) + project_storages_index_page.activate_menu_of(project_storage.project) do + expect(page).to have_no_text("Edit project folder") + end + end + end end describe "Removal of a project from a storage" do