diff --git a/features/support/env.rb b/features/support/env.rb index 90a61dd1..08b627f5 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -14,7 +14,7 @@ require 'spinach/capybara' require 'sidekiq/testing/inline' -%w(stubbed_repository valid_commit select2_helper).each do |f| +%w(valid_commit select2_helper test_env).each do |f| require Rails.root.join('spec', 'support', f) end @@ -35,13 +35,8 @@ Capybara.default_wait_time = 10 DatabaseCleaner.strategy = :truncation Spinach.hooks.before_scenario do - # Use tmp dir for FS manipulations - Gitlab.config.gitlab_shell.stub(repos_path: Rails.root.join('tmp', 'test-git-base-path')) - Gitlab::Shell.any_instance.stub(:add_repository) do |path| - create_temp_repo("#{Rails.root}/tmp/test-git-base-path/#{path}.git") - end - FileUtils.rm_rf Gitlab.config.gitlab_shell.repos_path - FileUtils.mkdir_p Gitlab.config.gitlab_shell.repos_path + TestEnv.init + DatabaseCleaner.start end @@ -54,9 +49,3 @@ Spinach.hooks.before_run do include FactoryGirl::Syntax::Methods end - -def create_temp_repo(path) - FileUtils.mkdir_p path - command = "git init --quiet --bare #{path};" - system(command) -end diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb index 53d9c735..30344a3d 100644 --- a/lib/gitlab/git/repository.rb +++ b/lib/gitlab/git/repository.rb @@ -34,7 +34,11 @@ module Gitlab end def path_to_repo - @path_to_repo ||= File.join(Gitlab.config.gitlab_shell.repos_path, "#{path_with_namespace}.git") + @path_to_repo ||= File.join(repos_path, "#{path_with_namespace}.git") + end + + def repos_path + Gitlab.config.gitlab_shell.repos_path end def repo diff --git a/spec/factories.rb b/spec/factories.rb index 41766859..8f620cd7 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -25,7 +25,7 @@ FactoryGirl.define do factory :project do sequence(:name) { |n| "project#{n}" } - path { name.downcase.gsub(/\s/, '_') } + path { 'gitlabhq' } creator end diff --git a/spec/support/stubbed_repository.rb b/spec/support/stubbed_repository.rb deleted file mode 100644 index 3dfdb353..00000000 --- a/spec/support/stubbed_repository.rb +++ /dev/null @@ -1,71 +0,0 @@ -require "gitlab/git/repository" -require "project" -require "merge_request" -require "shell" - -# Stubs out all Git repository access done by models so that specs can run -# against fake repositories without Grit complaining that they don't exist. -class Project - def repository - if path == "empty" || !path - nil - else - GitLabTestRepo.new(Rails.root.join('tmp', 'repositories', 'gitlabhq'), 'master') - end - end - - def satellite - FakeSatellite.new - end - - class FakeSatellite - def exists? - true - end - - def destroy - true - end - - def create - true - end - end -end - -class MergeRequest - def check_if_can_be_merged - true - end -end - -class GitLabTestRepo < Repository - # patch repo size (in mb) - def size - 12.45 - end -end - -module Gitlab - class Shell - def add_repository name - true - end - - def mv_repository name, new_name - true - end - - def remove_repository name - true - end - - def add_key id, key - true - end - - def remove_key id, key - true - end - end -end diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb new file mode 100644 index 00000000..769405b6 --- /dev/null +++ b/spec/support/test_env.rb @@ -0,0 +1,63 @@ +module TestEnv + extend self + + # Test environment + # + # all repositories and namespaces stored at + # RAILS_APP/tmp/test-git-base-path + # + # Next shell methods are stubbed and return true + # - mv_repository + # - remove_repository + # - add_key + # - remove_key + # + def init + # Use tmp dir for FS manipulations + repos_path = Rails.root.join('tmp', 'test-git-base-path') + Gitlab.config.gitlab_shell.stub(repos_path: repos_path) + + Gitlab::Shell.any_instance.stub( + add_repository: ->(path) { create_temp_repo(File.join(repos_path, "#{path}.git")) }, + mv_repository: true, + remove_repository: true, + add_key: true, + remove_key: true + ) + + fake_satellite = double( + exists?: true, + destroy: true, + create: true + ) + + Project.any_instance.stub( + satellite: fake_satellite + ) + + MergeRequest.any_instance.stub( + check_if_can_be_merged: true + ) + + Repository.any_instance.stub( + size: 12.45 + ) + + # Remove tmp/test-git-base-path + FileUtils.rm_rf Gitlab.config.gitlab_shell.repos_path + + # Recreate tmp/test-git-base-path + FileUtils.mkdir_p Gitlab.config.gitlab_shell.repos_path + + # Symlink tmp/repositories/gitlabhq to tmp/test-git-base-path/gitlabhq + seed_repo = Rails.root.join('tmp', 'repositories', 'gitlabhq') + target_repo = File.join(repos_path, 'gitlabhq.git') + system("ln -s #{seed_repo} #{target_repo}") + end + + def create_temp_repo(path) + FileUtils.mkdir_p path + command = "git init --quiet --bare #{path};" + system(command) + end +end