Skip to content
Snippets Groups Projects
Commit 22817398 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

define TestEnv and keep all global stubs in one place

parent 7bb71bb0
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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
 
Loading
Loading
@@ -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
 
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -25,7 +25,7 @@ FactoryGirl.define do
 
factory :project do
sequence(:name) { |n| "project#{n}" }
path { name.downcase.gsub(/\s/, '_') }
path { 'gitlabhq' }
creator
end
 
Loading
Loading
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
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
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