Skip to content

Commit

Permalink
Merge 5b6fd7d into 618f37a
Browse files Browse the repository at this point in the history
  • Loading branch information
acant committed Sep 11, 2015
2 parents 618f37a + 5b6fd7d commit 81466bc
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 95 deletions.
2 changes: 1 addition & 1 deletion test/integration/browse_test.rb
Expand Up @@ -23,7 +23,7 @@
write_file('local/README.md', 'hello i am a README')
repository.commit

start_daemon
gitdocs_start

visit 'http://localhost:7777/'
click_link('Home')
Expand Down
4 changes: 2 additions & 2 deletions test/integration/full_sync_test.rb
Expand Up @@ -4,8 +4,8 @@

describe 'fully synchronizing repositories' do
before do
git_clone_and_gitdocs_add(git_init_remote, 'clone1', 'clone2', 'clone3')
start_daemon
gitdocs_create(git_init_remote, 'clone1', 'clone2', 'clone3')
gitdocs_start
end

it 'should sync new files' do
Expand Down
37 changes: 12 additions & 25 deletions test/integration/share_management_test.rb
Expand Up @@ -6,23 +6,22 @@
it 'should add a local repository' do
git_init_local
gitdocs_add
gitdocs_status
assert_gitdocs_status_contains(abs_current_dir('local'))
gitdocs_assert_status_contains('local')
end

it 'should add a remote repository' do
git_init_remote
abs_remote_path = abs_current_dir('remote')
cmd = "gitdocs create local #{abs_remote_path} --pid=gitdocs.pid"
run_simple(cmd, true, 15)
assert_success(true)
assert_partial_output('Added path local to doc list', output_from(cmd))
gitdocs_command(
'create',
"local #{abs_current_dir('remote')}",
'Added path local to doc list'
)
end

it 'should update a share through the UI' do
git_init_local
gitdocs_add
start_daemon
gitdocs_start
visit('http://localhost:7777/')
click_link('Settings')

Expand Down Expand Up @@ -54,17 +53,12 @@
end

it 'through CLI' do
cmd = 'gitdocs rm local --pid=gitdocs.pid'
run_simple(cmd, true, 15)
assert_success(true)
assert_partial_output('Removed path local from doc list', output_from(cmd))

gitdocs_status
assert_gitdocs_status_not_contain(abs_current_dir('local'))
gitdocs_command('rm', 'local', 'Removed path local from doc list')
gitdocs_assert_status_not_contain('local')
end

it 'through UI' do
start_daemon
gitdocs_start
visit('http://localhost:7777/')
click_link('Settings')

Expand All @@ -82,14 +76,7 @@
gitdocs_add(path)
end

cmd = 'gitdocs clear --pid=gitdocs.pid'
run_simple(cmd, true, 15)
assert_success(true)
assert_partial_output('Cleared paths from gitdocs', output_from(cmd))

gitdocs_status
assert_gitdocs_status_not_contain(abs_current_dir('local1'))
assert_gitdocs_status_not_contain(abs_current_dir('local2'))
assert_gitdocs_status_not_contain(abs_current_dir('local3'))
gitdocs_command('clear', '', 'Cleared paths from gitdocs')
gitdocs_assert_status_not_contain('local1', 'local2', 'local3')
end
end
13 changes: 3 additions & 10 deletions test/integration/status_test.rb
Expand Up @@ -4,18 +4,11 @@

describe 'CLI with display daemon and share status' do
it 'should display information about the daemon' do
gitdocs_status
assert_gitdocs_status_contains(Gitdocs::VERSION)
assert_gitdocs_status_contains('Running: false')
gitdocs_assert_status_contains('Running: false')
end

it 'should display information about the shares' do
git_clone_and_gitdocs_add(git_init_remote, 'clone1', 'clone2', 'clone3')

gitdocs_status

assert_gitdocs_status_contains(abs_current_dir('clone1'))
assert_gitdocs_status_contains(abs_current_dir('clone2'))
assert_gitdocs_status_contains(abs_current_dir('clone3'))
gitdocs_create(git_init_remote, 'clone1', 'clone2', 'clone3')
gitdocs_assert_status_contains('clone1', 'clone2', 'clone3')
end
end
120 changes: 63 additions & 57 deletions test/integration/test_helper.rb
Expand Up @@ -11,15 +11,17 @@
require 'capybara_minitest_spec'
require 'capybara/poltergeist'

Capybara.app_host = 'http://localhost:7777/'
Capybara.default_driver = :poltergeist
Capybara.run_server = false
Capybara.default_wait_time = 20
Capybara.app_host = 'http://localhost:7777/'
Capybara.default_driver = :poltergeist
Capybara.run_server = false
Capybara.default_max_wait_time = 30

Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, timeout: 20)
Capybara::Poltergeist::Driver.new(app, timeout: Capybara.default_max_wait_time)
end

PID_FILE = File.expand_path('../../../tmp/gitdocs.pid', __FILE__)

module MiniTest::Aruba
class ArubaApiWrapper
include Aruba::Api
Expand All @@ -40,19 +42,6 @@ def run(*args)
def method_missing(method, *args, &block)
aruba.send(method, *args, &block)
end

def before_setup
super
original = (ENV['PATH'] || '').split(File::PATH_SEPARATOR)
set_env('PATH', ([File.expand_path('bin')] + original).join(File::PATH_SEPARATOR))
FileUtils.rm_rf(current_dir)
end

def after_teardown
super
restore_env
processes.clear
end
end

module Helper
Expand All @@ -61,9 +50,8 @@ module Helper
include Capybara::RSpecMatchers

def before_setup
super
FileUtils.rm_rf(current_dir)
set_env('HOME', abs_current_dir)
ENV['TEST'] = nil
end

def teardown
Expand All @@ -72,33 +60,50 @@ def teardown
end

def after_teardown
super
restore_env
processes.clear

terminate_processes!
prep_for_fs_check do
next unless File.exist?('gitdocs.pid')
next unless File.exist?(PID_FILE)

pid = IO.read('gitdocs.pid').to_i
pid = IO.read(PID_FILE).to_i
Process.kill('KILL', pid)
begin
Process.wait(pid)
rescue SystemCallError # rubocop:disable Lint/HandleExceptions
# This means that the process is already gone.
# Nothing to do.
end
FileUtils.rm_rf(PID_FILE)
end
end

def start_daemon
# @param [String] method pass to the CLI
# @param [String] arguments which will be passed to the CLI in addition
# @param [String] expected_output that the CLI should return
#
# @return [String] full text of the command being executed
def gitdocs_command(method, arguments, expected_output)
binary_path = File.expand_path('../../../bin/gitdocs', __FILE__)
full_command = "#{binary_path} #{method} #{arguments} --pid=#{PID_FILE}"

run(full_command, 15)
assert_success(true)
assert_partial_output(expected_output, output_from(full_command))

full_command
end

# @return [void]
def gitdocs_start
Gitdocs::Initializer.initialize_database
Gitdocs::Share.all.each do |share|
share.update_attributes(polling_interval: 0.1, notification: false)
end

start_cmd = 'gitdocs start --pid=gitdocs.pid --port 7777'
run(start_cmd, 15)
assert_success(true)
assert_partial_output('Started gitdocs', output_from(start_cmd))
FileUtils.rm_rf(PID_FILE)
gitdocs_command('start', '--port 7777', 'Started gitdocs')
end

# @overload abs_current_dir
Expand Down Expand Up @@ -127,7 +132,7 @@ def git_init_remote(path = 'remote')

def wait_for_clean_workdir(path)
dirty = true
Timeout.timeout(20) do
Timeout.timeout(Capybara.default_max_wait_time) do
while dirty
begin
sleep(0.1)
Expand All @@ -149,7 +154,7 @@ def wait_for_clean_workdir(path)
def wait_for_exact_file_content(file, exact_content)
in_current_dir do
begin
Timeout.timeout(20) do
Timeout.timeout(Capybara.default_max_wait_time) do
sleep(0.1) until File.exist?(file) && IO.read(file) == exact_content
end
rescue Timeout::Error
Expand All @@ -168,7 +173,9 @@ def wait_for_exact_file_content(file, exact_content)
def wait_for_directory(path)
in_current_dir do
begin
Timeout.timeout(20) { sleep(0.1) until Dir.exist?(path) }
Timeout.timeout(Capybara.default_max_wait_time) do
sleep(0.1) until Dir.exist?(path)
end
rescue Timeout::Error
nil
end
Expand All @@ -180,15 +187,19 @@ def wait_for_directory(path)
def wait_for_conflict_markers(path)
in_current_dir do
begin
Timeout.timeout(20) { sleep(0.1) if File.exist?(path) }
Timeout.timeout(Capybara.default_max_wait_time) do
sleep(0.1) if File.exist?(path)
end
rescue Timeout::Error
nil
ensure
assert(!File.exist?(path), "#{path} should have been removed")
end

begin
Timeout.timeout(20) { sleep(0.1) if Dir.glob("#{path} (*)").empty? }
Timeout.timeout(Capybara.default_max_wait_time) do
sleep(0.1) if Dir.glob("#{path} (*)").empty?
end
rescue Timeout::Error
nil
ensure
Expand All @@ -198,38 +209,33 @@ def wait_for_conflict_markers(path)
end

def gitdocs_add(path = 'local')
add_cmd = "gitdocs add #{path} --pid=gitdocs.pid"
run_simple(add_cmd, true, 15)
assert_success(true)
assert_partial_output("Added path #{path} to doc list", output_from(add_cmd))
gitdocs_command('add', path, "Added path #{path} to doc list")
end

def git_clone_and_gitdocs_add(remote_path, *clone_paths)
clone_paths.each do |clone_path|
abs_clone_path = abs_current_dir(clone_path)
FileUtils.rm_rf(abs_clone_path)
repo = Rugged::Repository.clone_at(
"file://#{remote_path}",
abs_clone_path
# @param [String] remote_repository_path
# @param [Array<String>] destination_paths
def gitdocs_create(remote_repository_path, *destination_paths)
destination_paths.each do |destination_path|
gitdocs_command(
'create',
"#{destination_path} #{remote_repository_path}",
"Added path #{destination_path} to doc list"
)
repo.config['user.email'] = 'afish@example.com'
repo.config['user.name'] = 'Art T. Fish'
gitdocs_add(clone_path)
end
end

def gitdocs_status
@status_cmd = 'gitdocs status --pid=gitdocs.pid'
run(@status_cmd, 15)
assert_success(true)
end

def assert_gitdocs_status_contains(expected)
assert_partial_output(expected, output_from(@status_cmd))
def gitdocs_assert_status_contains(*expected_outputs)
command = gitdocs_command('status', '', Gitdocs::VERSION)
expected_outputs.each do |expected_output|
assert_partial_output(expected_output, output_from(command))
end
end

def assert_gitdocs_status_not_contain(expected)
assert_no_partial_output(expected, output_from(@status_cmd))
def gitdocs_assert_status_not_contain(*not_expected_outputs)
command = gitdocs_command('status', '', Gitdocs::VERSION)
not_expected_outputs.each do |not_expected_output|
assert_no_partial_output(not_expected_output, output_from(command))
end
end
end

Expand Down

0 comments on commit 81466bc

Please sign in to comment.