Skip to content
Snippets Groups Projects
Verified Commit ce4a9f4b authored by Aakriti Gupta's avatar Aakriti Gupta :red_circle:
Browse files

Redirect legacy /admin/geo/replication/projects route

/admin/geo/replication/projects is redirected to
/admin/geo/sites/<site-id>/replication/project_repositories

Changelog: deprecated
EE: true
parent 2c400452
No related branches found
No related tags found
1 merge request!130737Redirect legacy /admin/geo/replication/projects route
......@@ -714,7 +714,6 @@ Layout/LineLength:
- 'danger/z_metadata/Dangerfile'
- 'ee/app/controllers/admin/elasticsearch_controller.rb'
- 'ee/app/controllers/admin/geo/application_controller.rb'
- 'ee/app/controllers/admin/geo/projects_controller.rb'
- 'ee/app/controllers/admin/licenses_controller.rb'
- 'ee/app/controllers/concerns/audit_events/date_range.rb'
- 'ee/app/controllers/concerns/credentials_inventory_actions.rb'
......@@ -1305,7 +1304,6 @@ Layout/LineLength:
- 'ee/lib/tasks/gitlab/seed/metrics.rake'
- 'ee/lib/world.rb'
- 'ee/spec/controllers/admin/elasticsearch_controller_spec.rb'
- 'ee/spec/controllers/admin/geo/projects_controller_spec.rb'
- 'ee/spec/controllers/admin/impersonations_controller_spec.rb'
- 'ee/spec/controllers/admin/licenses_controller_spec.rb'
- 'ee/spec/controllers/admin/projects_controller_spec.rb'
......
......@@ -6,7 +6,6 @@ RSpec/ContextWording:
- 'ee/spec/controllers/admin/audit_logs_controller_spec.rb'
- 'ee/spec/controllers/admin/dev_ops_report_controller_spec.rb'
- 'ee/spec/controllers/admin/emails_controller_spec.rb'
- 'ee/spec/controllers/admin/geo/projects_controller_spec.rb'
- 'ee/spec/controllers/admin/licenses_controller_spec.rb'
- 'ee/spec/controllers/admin/push_rules_controller_spec.rb'
- 'ee/spec/controllers/admin/users_controller_spec.rb'
......
......@@ -358,7 +358,6 @@ Style/ClassAndModuleChildren:
- 'ee/app/controllers/admin/geo/application_controller.rb'
- 'ee/app/controllers/admin/geo/designs_controller.rb'
- 'ee/app/controllers/admin/geo/nodes_controller.rb'
- 'ee/app/controllers/admin/geo/projects_controller.rb'
- 'ee/app/controllers/admin/geo/replicables_controller.rb'
- 'ee/app/controllers/admin/geo/settings_controller.rb'
- 'ee/app/controllers/admin/licenses_controller.rb'
......
......@@ -160,7 +160,6 @@ Style/FormatString:
- 'ee/app/components/namespaces/free_user_cap/usage_quota_trial_alert_component.rb'
- 'ee/app/controllers/admin/elasticsearch_controller.rb'
- 'ee/app/controllers/admin/geo/application_controller.rb'
- 'ee/app/controllers/admin/geo/projects_controller.rb'
- 'ee/app/controllers/admin/licenses_controller.rb'
- 'ee/app/controllers/concerns/audit_events/date_range.rb'
- 'ee/app/controllers/ee/projects/issues_controller.rb'
......
......@@ -389,7 +389,6 @@ Style/IfUnlessModifier:
- 'ee/app/controllers/admin/elasticsearch_controller.rb'
- 'ee/app/controllers/admin/emails_controller.rb'
- 'ee/app/controllers/admin/geo/application_controller.rb'
- 'ee/app/controllers/admin/geo/projects_controller.rb'
- 'ee/app/controllers/admin/geo/settings_controller.rb'
- 'ee/app/controllers/admin/push_rules_controller.rb'
- 'ee/app/controllers/concerns/credentials_inventory_actions.rb'
......
# frozen_string_literal: true
class Admin::Geo::ProjectsController < Admin::Geo::ApplicationController
before_action :check_license!
before_action :load_registry, except: [:index]
before_action :limited_actions_message!
before_action :load_node_data, only: [:index]
PROJECTS_LIMIT_COUNT = 10001
def index
@registries = case params[:sync_status]
when 'failed'
finder.failed_projects.page(params[:page])
when 'pending'
finder.pending_projects.page(params[:page])
when 'synced'
finder.synced_projects.page(params[:page])
else
finder.all_projects.page(params[:page])
end
if params[:name]
@registries = @registries.with_search(params[:name])
module Admin
module Geo
class ProjectsController < Admin::Geo::ApplicationController
before_action :check_license!
before_action :load_registry, except: [:index]
before_action :limited_actions_message!
before_action :load_node_data, only: [:index]
PROJECTS_LIMIT_COUNT = 10001
def index
if Feature.enabled?(:geo_project_repository_replication)
redirect_to admin_geo_nodes_path unless @current_node
redirect_to project_repositories_path
end
@registries = case params[:sync_status]
when 'failed'
finder.failed_projects.page(params[:page])
when 'pending'
finder.pending_projects.page(params[:page])
when 'synced'
finder.synced_projects.page(params[:page])
else
finder.all_projects.page(params[:page])
end
@registries = @registries.with_search(params[:name]) if params[:name]
projects_limit_count = finder.all_projects.limit(PROJECTS_LIMIT_COUNT).count
@action_buttons = [helpers.resync_all_button(projects_limit_count, PROJECTS_LIMIT_COUNT),
helpers.reverify_all_button(projects_limit_count, PROJECTS_LIMIT_COUNT)]
end
def destroy
unless @registry.project.nil?
flash[:alert] = s_('Geo|Could not remove tracking entry for an existing project.')
return redirect_back_or_default(default: admin_geo_projects_path)
end
@registry.destroy
flash[:toast] =
format(s_('Geo|Tracking entry for project (%{project_id}) was successfully removed.'),
project_id: @registry.project_id)
redirect_back_or_default(default: admin_geo_projects_path)
end
def reverify
@registry.flag_repository_for_reverify!
flash[:toast] = format(s_('Geo|%{name} is scheduled for re-verify'), name: @registry.project.full_name)
redirect_back_or_default(default: admin_geo_projects_path)
end
def resync
@registry.flag_repository_for_resync!
flash[:toast] = format(s_('Geo|%{name} is scheduled for re-sync'), name: @registry.project.full_name)
redirect_back_or_default(default: admin_geo_projects_path)
end
def reverify_all
::Geo::Batch::ProjectRegistrySchedulerWorker.perform_async(:reverify_repositories) # rubocop:disable CodeReuse/Worker
flash[:toast] = s_('Geo|All projects are being scheduled for reverify')
redirect_back_or_default(default: admin_geo_projects_path)
end
def resync_all
::Geo::Batch::ProjectRegistrySchedulerWorker.perform_async(:resync_repositories) # rubocop:disable CodeReuse/Worker
flash[:toast] = s_('Geo|All projects are being scheduled for resync')
redirect_back_or_default(default: admin_geo_projects_path)
end
private
def project_repositories_path
"/admin/geo/sites/#{@current_node.id}/replication/project_repositories"
end
def load_registry
@registry = ::Geo::ProjectRegistry.find_by_id(params[:id])
end
def finder
@finder ||= ::Geo::ProjectRegistryStatusFinder.new
end
end
projects_limit_count = finder.all_projects.limit(PROJECTS_LIMIT_COUNT).count
@action_buttons = [helpers.resync_all_button(projects_limit_count, PROJECTS_LIMIT_COUNT), helpers.reverify_all_button(projects_limit_count, PROJECTS_LIMIT_COUNT)]
end
def destroy
unless @registry.project.nil?
flash[:alert] = s_('Geo|Could not remove tracking entry for an existing project.')
return redirect_back_or_default(default: admin_geo_projects_path)
end
@registry.destroy
flash[:toast] = s_('Geo|Tracking entry for project (%{project_id}) was successfully removed.') % { project_id: @registry.project_id }
redirect_back_or_default(default: admin_geo_projects_path)
end
def reverify
@registry.flag_repository_for_reverify!
flash[:toast] = s_('Geo|%{name} is scheduled for re-verify') % { name: @registry.project.full_name }
redirect_back_or_default(default: admin_geo_projects_path)
end
def resync
@registry.flag_repository_for_resync!
flash[:toast] = s_('Geo|%{name} is scheduled for re-sync') % { name: @registry.project.full_name }
redirect_back_or_default(default: admin_geo_projects_path)
end
def reverify_all
Geo::Batch::ProjectRegistrySchedulerWorker.perform_async(:reverify_repositories) # rubocop:disable CodeReuse/Worker
flash[:toast] = s_('Geo|All projects are being scheduled for reverify')
redirect_back_or_default(default: admin_geo_projects_path)
end
def resync_all
Geo::Batch::ProjectRegistrySchedulerWorker.perform_async(:resync_repositories) # rubocop:disable CodeReuse/Worker
flash[:toast] = s_('Geo|All projects are being scheduled for resync')
redirect_back_or_default(default: admin_geo_projects_path)
end
private
def load_registry
@registry = ::Geo::ProjectRegistry.find_by_id(params[:id])
end
def finder
@finder ||= ::Geo::ProjectRegistryStatusFinder.new
end
end
......@@ -6,7 +6,7 @@
include EE::GeoHelpers
let_it_be(:admin) { create(:admin) }
let_it_be(:geo_primary) { create(:geo_node, :primary) }
let_it_be(:geo_node) { create(:geo_node, :primary) }
let(:synced_registry) { create(:geo_project_registry, :synced) }
......@@ -32,49 +32,92 @@
before do
stub_licensed_features(geo: true)
stub_current_geo_node(create(:geo_node))
stub_current_geo_node(geo_node)
end
it 'displays a different read-only message based on skip_readonly_message' do
expect(subject.body).to match('You may be able to make a limited amount of changes or perform a limited amount of actions on this page')
expect(subject.body).to include(geo_primary.url)
end
context 'with geo_project_repository_replication feature flag disabled' do
before do
stub_feature_flags(geo_project_repository_replication: false)
end
context 'without sync_status specified' do
it 'renders all template when no extra get params is specified' do
expect(subject).to have_gitlab_http_status(:ok)
expect(subject).to render_template(:index)
expect(subject).to render_template(partial: 'admin/geo/projects/_all')
context 'on secondary' do
before do
stub_secondary_node
end
it 'displays a different read-only message based on skip_readonly_message' do
expect(subject.body).to match(
'You may be able to make a limited amount of changes or perform a limited amount of actions on this page'
)
expect(subject.body).to include(geo_node.url)
end
end
context 'without sync_status specified' do
it 'renders all template when no extra get params is specified' do
expect(subject).to have_gitlab_http_status(:ok)
expect(subject).to render_template(:index)
expect(subject).to render_template(partial: 'admin/geo/projects/_all')
end
end
end
context 'with sync_status=pending' do
subject { get :index, params: { sync_status: 'pending' } }
context 'with sync_status=pending' do
subject { get :index, params: { sync_status: 'pending' } }
it 'renders pending template' do
expect(subject).to have_gitlab_http_status(:ok)
expect(subject).to render_template(:index)
expect(subject).to render_template(partial: 'admin/geo/projects/_pending')
it 'renders pending template' do
expect(subject).to have_gitlab_http_status(:ok)
expect(subject).to render_template(:index)
expect(subject).to render_template(partial: 'admin/geo/projects/_pending')
end
end
end
context 'with sync_status=failed' do
subject { get :index, params: { sync_status: 'failed' } }
context 'with sync_status=failed' do
subject { get :index, params: { sync_status: 'failed' } }
it 'renders failed template' do
expect(subject).to have_gitlab_http_status(:ok)
expect(subject).to render_template(:index)
expect(subject).to render_template(partial: 'admin/geo/projects/_failed')
it 'renders failed template' do
expect(subject).to have_gitlab_http_status(:ok)
expect(subject).to render_template(:index)
expect(subject).to render_template(partial: 'admin/geo/projects/_failed')
end
end
context 'with sync_status=synced' do
subject { get :index, params: { sync_status: 'synced' } }
it 'renders synced template' do
expect(subject).to have_gitlab_http_status(:ok)
expect(subject).to render_template(:index)
expect(subject).to render_template(partial: 'admin/geo/projects/_synced')
end
end
end
context 'with sync_status=synced' do
subject { get :index, params: { sync_status: 'synced' } }
context 'with geo_project_repository_replication feature flag enabled' do
shared_examples 'redirects /admin/geo/replication/projects' do
it do
get :index
expect(response).to have_gitlab_http_status(:redirect)
expect(response).to redirect_to(
"/admin/geo/sites/#{geo_node.id}/replication/project_repositories"
)
end
end
context 'on primary' do
before do
stub_primary_node
end
it_behaves_like 'redirects /admin/geo/replication/projects'
end
context 'on secondary' do
before do
stub_secondary_node
end
it 'renders synced template' do
expect(subject).to have_gitlab_http_status(:ok)
expect(subject).to render_template(:index)
expect(subject).to render_template(partial: 'admin/geo/projects/_synced')
it_behaves_like 'redirects /admin/geo/replication/projects'
end
end
end
......
......@@ -21,6 +21,7 @@ def find_toast
end
before do
stub_feature_flags(geo_project_repository_replication: false)
stub_current_geo_node(geo_node)
allow(Gitlab::Geo).to receive(:license_allows?).and_return(true)
admin = create(:admin)
......
......@@ -19,7 +19,6 @@
- './ee/spec/controllers/admin/elasticsearch_controller_spec.rb'
- './ee/spec/controllers/admin/emails_controller_spec.rb'
- './ee/spec/controllers/admin/geo/nodes_controller_spec.rb'
- './ee/spec/controllers/admin/geo/projects_controller_spec.rb'
- './ee/spec/controllers/admin/geo/settings_controller_spec.rb'
- './ee/spec/controllers/admin/groups_controller_spec.rb'
- './ee/spec/controllers/admin/impersonations_controller_spec.rb'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment