test/test_gitback.rb in gitback-0.1.0 vs test/test_gitback.rb in gitback-0.1.1

- old
+ new

@@ -1,7 +1,114 @@ -require 'helper' +require "#{File.dirname(__FILE__)}/helper" class TestGitback < Test::Unit::TestCase - should "probably rename this file and start testing for real" do - flunk "hey buddy, you should probably rename this file and start testing for real" + context 'Gitback' do + setup do + @dirname = File.expand_path(File.dirname(__FILE__)) + @remote_path = File.expand_path(File.join(@dirname, *%w[repos remote_repo])) + @local_path = File.expand_path(File.join(@dirname, *%w[repos local_repo])) + + # Cleanup the "remote" repo from previous tests + if File.exists?(@remote_path) + FileUtils.remove_dir(@remote_path) + end + + # Cleanup the "local" repo from previous tests + if File.exists?(@local_path) + FileUtils.remove_dir(@local_path) + end + + # Create the "remote" repo directory + FileUtils.mkdir_p(@remote_path) + + Dir.chdir(@remote_path) do + # Init the "remote" git repo and make first commit + `git init` + `touch README` + + @remote_repo = Grit::Repo.new(@remote_path) + @remote_repo.add(@remote_path + '/*') + @remote_repo.commit_all("first commit") + end + + # Clone the "remote" repo to a "local" repo + `git clone #{@remote_path} #{@local_path}` + end + + should "handle basic file backups" do + files = [] + files << "#{@dirname}/data/testing.txt" + files << "#{@dirname}/data/some/deep/nginx.conf" + + output = Gitback::Repository.new @local_path do |repo| + files.each do |file| + repo.backup file + end + end + + assert_files(files) + end + + should "handle directory backups" do + output = Gitback::Repository.new @local_path do |repo| + repo.backup "#{@dirname}/data/another/" + repo.backup "#{@dirname}/data/some/deep/nginx.conf" + end + + files = [] + files << "#{@dirname}/data/another/file.txt" + files << "#{@dirname}/data/another/test.txt" + files << "#{@dirname}/data/some/deep/nginx.conf" + + assert_files(files) + end + + should "use namespaces" do + output = Gitback::Repository.new @local_path do |repo| + repo.namespace 'blah.domain.com' do + repo.backup "#{@dirname}/data/another/" + repo.backup "#{@dirname}/data/some/deep/nginx.conf" + end + end + + # Make sure local repo has the files + files = [] + files << "blah.domain.com/#{@dirname}/data/another/file.txt" + files << "blah.domain.com/#{@dirname}/data/another/test.txt" + files << "blah.domain.com/#{@dirname}/data/some/deep/nginx.conf" + + assert_files(files) + end + + should "deal with symlinks" do + # Create a symlink + linked_file = "#{@dirname}/data/linked.txt" + File.symlink("#{@dirname}/data/testing.txt", linked_file) + + Gitback::Repository.new @local_path do |repo| + repo.backup linked_file + end + + files = [linked_file] + + assert_files(files) + + # Delete the link for future tests + File.delete(linked_file) + end + end + + def assert_files(file_array) + file_array.each do |file| + assert File.exists? "#{@local_path}/#{file}" + end + + # Need to reset in order for the files to not be deleted + Dir.chdir(@remote_path) do + `git reset --hard` + end + + file_array.each do |file| + assert File.exists? "#{@remote_path}/#{file}" + end end end