OSDN Git Service

define TestEnv and keep all global stubs in one place
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Mon, 1 Apr 2013 11:39:19 +0000 (14:39 +0300)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Mon, 1 Apr 2013 11:39:19 +0000 (14:39 +0300)
features/support/env.rb
lib/gitlab/git/repository.rb
spec/factories.rb
spec/support/stubbed_repository.rb [deleted file]
spec/support/test_env.rb [new file with mode: 0644]

index 90a61dd..08b627f 100644 (file)
@@ -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
index 53d9c73..30344a3 100644 (file)
@@ -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
index 4176685..8f620cd 100644 (file)
@@ -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 (file)
index 3dfdb35..0000000
+++ /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 (file)
index 0000000..769405b
--- /dev/null
@@ -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