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
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
include FactoryGirl::Syntax::Methods
end
-
-def create_temp_repo(path)
- FileUtils.mkdir_p path
- command = "git init --quiet --bare #{path};"
- system(command)
-end
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
factory :project do
sequence(:name) { |n| "project#{n}" }
- path { name.downcase.gsub(/\s/, '_') }
+ path { 'gitlabhq' }
creator
end
+++ /dev/null
-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
--- /dev/null
+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