From 46fbb5fae8d37b64d4cdb42a4458907a73a88f1a Mon Sep 17 00:00:00 2001
From: Natanael Silva <nsilva@gitlab.com>
Date: Fri, 1 Nov 2024 20:33:07 +0000
Subject: [PATCH] fixed: Redirect behaviour for git-upload-pack requests

change rubocop exception to inline option

fixed: using let() for creating projects potentially making tests slower

Adding request spec examples

fix: updating tests

Changelog: fixed
EE: true
---
 .../git_http_client_controller.rb             |  2 +-
 ee/spec/requests/git_http_geo_spec.rb         | 24 +++++++++----------
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/ee/app/controllers/ee/repositories/git_http_client_controller.rb b/ee/app/controllers/ee/repositories/git_http_client_controller.rb
index 482314fed8edb..0aefcfcc18e32 100644
--- a/ee/app/controllers/ee/repositories/git_http_client_controller.rb
+++ b/ee/app/controllers/ee/repositories/git_http_client_controller.rb
@@ -93,7 +93,7 @@ def redirect?
         def out_of_date_redirect?
           return false unless project
 
-          git_upload_pack_request? && repository_out_of_date?(project)
+          info_refs_request? && git_upload_pack_request? && repository_out_of_date?(project)
         end
 
         private
diff --git a/ee/spec/requests/git_http_geo_spec.rb b/ee/spec/requests/git_http_geo_spec.rb
index 2b787f7862297..237f889643114 100644
--- a/ee/spec/requests/git_http_geo_spec.rb
+++ b/ee/spec/requests/git_http_geo_spec.rb
@@ -258,22 +258,22 @@ def make_request
           it_behaves_like 'a Geo git request'
           it_behaves_like 'a Geo 200 git request'
         end
-      end
-
-      context 'when the repository does not exist' do
-        let_it_be(:project) { project_no_repo }
-
-        let(:endpoint_path) { "/#{project.full_path}.git/git-upload-pack" }
-        let(:redirect_url) { full_redirected_url }
 
-        it_behaves_like 'a Geo 302 redirect to Primary'
+        context 'when the repository has been updated' do
+          let(:geo_gl_id) { "key-#{key.id}" }
+          # to avoid "Unexpected actor :geo." error
+          let(:auth_token) { Gitlab::Geo::BaseRequest.new(scope: project.full_path, gl_id: geo_gl_id).authorization }
+          let(:project_with_repo_but_not_synced) { create(:project, :repository, :private) }
+          let(:project) { project_with_repo_but_not_synced }
 
-        context 'when terms are enforced' do
-          before do
-            enforce_terms
+          subject do
+            post "/#{project_with_repo_but_not_synced.full_path}.git/git-upload-pack", params: {}, headers: env
+            response
           end
 
-          it_behaves_like 'a Geo 302 redirect to Primary'
+          it 'is not redirected' do
+            is_expected.to have_gitlab_http_status(:ok)
+          end
         end
       end
     end
-- 
GitLab