Commit 22817398e6c1cf9a479fecd99c55369fd81717cb
1 parent
7bb71bb0
Exists in
master
and in
4 other branches
define TestEnv and keep all global stubs in one place
Showing
5 changed files
with
72 additions
and
87 deletions
Show diff stats
features/support/env.rb
... | ... | @@ -14,7 +14,7 @@ require 'spinach/capybara' |
14 | 14 | require 'sidekiq/testing/inline' |
15 | 15 | |
16 | 16 | |
17 | -%w(stubbed_repository valid_commit select2_helper).each do |f| | |
17 | +%w(valid_commit select2_helper test_env).each do |f| | |
18 | 18 | require Rails.root.join('spec', 'support', f) |
19 | 19 | end |
20 | 20 | |
... | ... | @@ -35,13 +35,8 @@ Capybara.default_wait_time = 10 |
35 | 35 | DatabaseCleaner.strategy = :truncation |
36 | 36 | |
37 | 37 | Spinach.hooks.before_scenario do |
38 | - # Use tmp dir for FS manipulations | |
39 | - Gitlab.config.gitlab_shell.stub(repos_path: Rails.root.join('tmp', 'test-git-base-path')) | |
40 | - Gitlab::Shell.any_instance.stub(:add_repository) do |path| | |
41 | - create_temp_repo("#{Rails.root}/tmp/test-git-base-path/#{path}.git") | |
42 | - end | |
43 | - FileUtils.rm_rf Gitlab.config.gitlab_shell.repos_path | |
44 | - FileUtils.mkdir_p Gitlab.config.gitlab_shell.repos_path | |
38 | + TestEnv.init | |
39 | + | |
45 | 40 | DatabaseCleaner.start |
46 | 41 | end |
47 | 42 | |
... | ... | @@ -54,9 +49,3 @@ Spinach.hooks.before_run do |
54 | 49 | |
55 | 50 | include FactoryGirl::Syntax::Methods |
56 | 51 | end |
57 | - | |
58 | -def create_temp_repo(path) | |
59 | - FileUtils.mkdir_p path | |
60 | - command = "git init --quiet --bare #{path};" | |
61 | - system(command) | |
62 | -end | ... | ... |
lib/gitlab/git/repository.rb
... | ... | @@ -34,7 +34,11 @@ module Gitlab |
34 | 34 | end |
35 | 35 | |
36 | 36 | def path_to_repo |
37 | - @path_to_repo ||= File.join(Gitlab.config.gitlab_shell.repos_path, "#{path_with_namespace}.git") | |
37 | + @path_to_repo ||= File.join(repos_path, "#{path_with_namespace}.git") | |
38 | + end | |
39 | + | |
40 | + def repos_path | |
41 | + Gitlab.config.gitlab_shell.repos_path | |
38 | 42 | end |
39 | 43 | |
40 | 44 | def repo | ... | ... |
spec/factories.rb
spec/support/stubbed_repository.rb
... | ... | @@ -1,71 +0,0 @@ |
1 | -require "gitlab/git/repository" | |
2 | -require "project" | |
3 | -require "merge_request" | |
4 | -require "shell" | |
5 | - | |
6 | -# Stubs out all Git repository access done by models so that specs can run | |
7 | -# against fake repositories without Grit complaining that they don't exist. | |
8 | -class Project | |
9 | - def repository | |
10 | - if path == "empty" || !path | |
11 | - nil | |
12 | - else | |
13 | - GitLabTestRepo.new(Rails.root.join('tmp', 'repositories', 'gitlabhq'), 'master') | |
14 | - end | |
15 | - end | |
16 | - | |
17 | - def satellite | |
18 | - FakeSatellite.new | |
19 | - end | |
20 | - | |
21 | - class FakeSatellite | |
22 | - def exists? | |
23 | - true | |
24 | - end | |
25 | - | |
26 | - def destroy | |
27 | - true | |
28 | - end | |
29 | - | |
30 | - def create | |
31 | - true | |
32 | - end | |
33 | - end | |
34 | -end | |
35 | - | |
36 | -class MergeRequest | |
37 | - def check_if_can_be_merged | |
38 | - true | |
39 | - end | |
40 | -end | |
41 | - | |
42 | -class GitLabTestRepo < Repository | |
43 | - # patch repo size (in mb) | |
44 | - def size | |
45 | - 12.45 | |
46 | - end | |
47 | -end | |
48 | - | |
49 | -module Gitlab | |
50 | - class Shell | |
51 | - def add_repository name | |
52 | - true | |
53 | - end | |
54 | - | |
55 | - def mv_repository name, new_name | |
56 | - true | |
57 | - end | |
58 | - | |
59 | - def remove_repository name | |
60 | - true | |
61 | - end | |
62 | - | |
63 | - def add_key id, key | |
64 | - true | |
65 | - end | |
66 | - | |
67 | - def remove_key id, key | |
68 | - true | |
69 | - end | |
70 | - end | |
71 | -end |
... | ... | @@ -0,0 +1,63 @@ |
1 | +module TestEnv | |
2 | + extend self | |
3 | + | |
4 | + # Test environment | |
5 | + # | |
6 | + # all repositories and namespaces stored at | |
7 | + # RAILS_APP/tmp/test-git-base-path | |
8 | + # | |
9 | + # Next shell methods are stubbed and return true | |
10 | + # - mv_repository | |
11 | + # - remove_repository | |
12 | + # - add_key | |
13 | + # - remove_key | |
14 | + # | |
15 | + def init | |
16 | + # Use tmp dir for FS manipulations | |
17 | + repos_path = Rails.root.join('tmp', 'test-git-base-path') | |
18 | + Gitlab.config.gitlab_shell.stub(repos_path: repos_path) | |
19 | + | |
20 | + Gitlab::Shell.any_instance.stub( | |
21 | + add_repository: ->(path) { create_temp_repo(File.join(repos_path, "#{path}.git")) }, | |
22 | + mv_repository: true, | |
23 | + remove_repository: true, | |
24 | + add_key: true, | |
25 | + remove_key: true | |
26 | + ) | |
27 | + | |
28 | + fake_satellite = double( | |
29 | + exists?: true, | |
30 | + destroy: true, | |
31 | + create: true | |
32 | + ) | |
33 | + | |
34 | + Project.any_instance.stub( | |
35 | + satellite: fake_satellite | |
36 | + ) | |
37 | + | |
38 | + MergeRequest.any_instance.stub( | |
39 | + check_if_can_be_merged: true | |
40 | + ) | |
41 | + | |
42 | + Repository.any_instance.stub( | |
43 | + size: 12.45 | |
44 | + ) | |
45 | + | |
46 | + # Remove tmp/test-git-base-path | |
47 | + FileUtils.rm_rf Gitlab.config.gitlab_shell.repos_path | |
48 | + | |
49 | + # Recreate tmp/test-git-base-path | |
50 | + FileUtils.mkdir_p Gitlab.config.gitlab_shell.repos_path | |
51 | + | |
52 | + # Symlink tmp/repositories/gitlabhq to tmp/test-git-base-path/gitlabhq | |
53 | + seed_repo = Rails.root.join('tmp', 'repositories', 'gitlabhq') | |
54 | + target_repo = File.join(repos_path, 'gitlabhq.git') | |
55 | + system("ln -s #{seed_repo} #{target_repo}") | |
56 | + end | |
57 | + | |
58 | + def create_temp_repo(path) | |
59 | + FileUtils.mkdir_p path | |
60 | + command = "git init --quiet --bare #{path};" | |
61 | + system(command) | |
62 | + end | |
63 | +end | ... | ... |