diff --git a/test/integration/browse_test.rb b/test/integration/browse_test.rb index d46d8fa..ee11aea 100644 --- a/test/integration/browse_test.rb +++ b/test/integration/browse_test.rb @@ -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') diff --git a/test/integration/full_sync_test.rb b/test/integration/full_sync_test.rb index bcef299..0a304f6 100644 --- a/test/integration/full_sync_test.rb +++ b/test/integration/full_sync_test.rb @@ -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 diff --git a/test/integration/share_management_test.rb b/test/integration/share_management_test.rb index 55f5c4d..85aec22 100644 --- a/test/integration/share_management_test.rb +++ b/test/integration/share_management_test.rb @@ -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') @@ -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') @@ -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 diff --git a/test/integration/status_test.rb b/test/integration/status_test.rb index a4d1a00..adcfd5c 100644 --- a/test/integration/status_test.rb +++ b/test/integration/status_test.rb @@ -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 diff --git a/test/integration/test_helper.rb b/test/integration/test_helper.rb index ac1b672..c791f95 100644 --- a/test/integration/test_helper.rb +++ b/test/integration/test_helper.rb @@ -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 @@ -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 @@ -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 @@ -72,13 +60,14 @@ 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) @@ -86,19 +75,35 @@ def after_teardown # 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 @@ -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) @@ -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 @@ -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 @@ -180,7 +187,9 @@ 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 @@ -188,7 +197,9 @@ def wait_for_conflict_markers(path) 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 @@ -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] 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