From 70ea1912925425128d454a5e7f5de4a263c55f91 Mon Sep 17 00:00:00 2001 From: Pavel Balashou Date: Mon, 18 Mar 2024 19:42:49 +0100 Subject: [PATCH] [#53429] Project storage menu links does not include prefix. https://community.openproject.org/work_packages/53429 --- .../storages/admin/submit_or_cancel_form.rb | 2 +- .../app/models/storages/project_storage.rb | 2 +- .../spec/features/storages_menu_links_spec.rb | 40 ++++++++++++++----- .../support/ensure_connection_path_helper.rb | 5 ++- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/modules/storages/app/forms/storages/admin/submit_or_cancel_form.rb b/modules/storages/app/forms/storages/admin/submit_or_cancel_form.rb index e6a8b227aca0..3204742b2f18 100644 --- a/modules/storages/app/forms/storages/admin/submit_or_cancel_form.rb +++ b/modules/storages/app/forms/storages/admin/submit_or_cancel_form.rb @@ -58,7 +58,7 @@ def default_cancel_button_options name: :cancel, scheme: :default, tag: :a, - href: Rails.application.routes.url_helpers.admin_settings_storages_path, + href: OpenProject::StaticRouting::StaticRouter.new.admin_settings_storages_path, label: I18n.t('button_cancel') } end diff --git a/modules/storages/app/models/storages/project_storage.rb b/modules/storages/app/models/storages/project_storage.rb index 3ae6dcb71e4e..8e9563377f06 100644 --- a/modules/storages/app/models/storages/project_storage.rb +++ b/modules/storages/app/models/storages/project_storage.rb @@ -92,7 +92,7 @@ def open(user) def open_with_connection_ensured return unless storage.configured? - url_helpers = Rails.application.routes.url_helpers + url_helpers = OpenProject::StaticRouting::StaticRouter.new.url_helpers open_project_storage_url = url_helpers.open_project_storage_url( host: Setting.host_name, protocol: 'https', diff --git a/modules/storages/spec/features/storages_menu_links_spec.rb b/modules/storages/spec/features/storages_menu_links_spec.rb index 969b12c2ad73..63d4347af018 100644 --- a/modules/storages/spec/features/storages_menu_links_spec.rb +++ b/modules/storages/spec/features/storages_menu_links_spec.rb @@ -31,23 +31,25 @@ require 'spec_helper' require_module_spec_helper -RSpec.describe 'Storage links in project menu', :js, :with_cuprite do +RSpec.describe 'Storage links in project menu' do include EnsureConnectionPathHelper - let!(:storage_configured_linked1) { create(:nextcloud_storage_configured, :as_automatically_managed, name: "Storage 1") } - let!(:project_storage1) { create(:project_storage, :as_automatically_managed, project:, storage: storage_configured_linked1) } - let!(:storage_configured_linked2) { create(:nextcloud_storage_configured, name: "Storage 2") } - let!(:project_storage2) do + shared_let(:project) { create(:project, enabled_module_names: %i[storages]) } + shared_let(:storage_configured_linked1) { create(:nextcloud_storage_configured, :as_automatically_managed, name: "Storage 1") } + shared_let(:project_storage1) do + create(:project_storage, :as_automatically_managed, project:, storage: storage_configured_linked1) + end + shared_let(:storage_configured_linked2) { create(:nextcloud_storage_configured, name: "Storage 2") } + shared_let(:project_storage2) do create(:project_storage, project_folder_mode: 'inactive', project:, storage: storage_configured_linked2) end - let!(:storage_configured_linked3) { create(:nextcloud_storage_configured, name: "Storage 3") } - let!(:project_storage3) do + shared_let(:storage_configured_linked3) { create(:nextcloud_storage_configured, name: "Storage 3") } + shared_let(:project_storage3) do create(:project_storage, project_folder_mode: 'manual', project:, storage: storage_configured_linked3) end - let!(:storage_configured_unlinked) { create(:nextcloud_storage_configured, name: "Storage 4") } - let!(:storage_unconfigured_linked) { create(:nextcloud_storage, name: "Storage 5") } - let!(:project_storage4) { create(:project_storage, project:, storage: storage_unconfigured_linked) } - let!(:project) { create(:project, enabled_module_names: %i[storages]) } + shared_let(:storage_configured_unlinked) { create(:nextcloud_storage_configured, name: "Storage 4") } + shared_let(:storage_unconfigured_linked) { create(:nextcloud_storage, name: "Storage 5") } + shared_let(:project_storage4) { create(:project_storage, project:, storage: storage_unconfigured_linked) } let(:user) { create(:user, member_with_permissions: { project => permissions }) } before do @@ -82,6 +84,22 @@ expect(page).to have_no_link(storage_configured_unlinked.name) expect(page).to have_no_link(storage_unconfigured_linked.name) end + + context 'when OP has been installed behind prefix' do + let(:prefix) { '/qwerty' } + + before { allow(OpenProject::Configuration).to receive(:rails_relative_url_root).and_return(prefix) } + + it 'has all links prefixed' do + visit(project_path(id: project.id)) + + expect(page).to have_link(storage_configured_linked1.name, href: ensure_connection_path(project_storage1)) + expect(page).to have_link(storage_configured_linked2.name, href: ensure_connection_path(project_storage2)) + expect(page).to have_link(storage_configured_linked3.name, href: ensure_connection_path(project_storage3)) + expect(page).to have_no_link(storage_configured_unlinked.name) + expect(page).to have_no_link(storage_unconfigured_linked.name) + end + end end context 'read_files' do diff --git a/modules/storages/spec/support/ensure_connection_path_helper.rb b/modules/storages/spec/support/ensure_connection_path_helper.rb index 82d621094f03..58d1baecda45 100644 --- a/modules/storages/spec/support/ensure_connection_path_helper.rb +++ b/modules/storages/spec/support/ensure_connection_path_helper.rb @@ -30,10 +30,11 @@ module EnsureConnectionPathHelper def ensure_connection_path(project_storage) - oauth_clients_ensure_connection_path( + url_helpers = OpenProject::StaticRouting::StaticRouter.new.url_helpers + url_helpers.oauth_clients_ensure_connection_path( oauth_client_id: project_storage.storage.oauth_client.client_id, storage_id: project_storage.storage.id, - destination_url: open_project_storage_url( + destination_url: url_helpers.open_project_storage_url( protocol: 'https', project_id: project_storage.project.identifier, id: project_storage.id