proxy_tester 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +22 -0
- data/.rdebugrc +7 -0
- data/.rspec +3 -0
- data/.simplecov +8 -0
- data/Gemfile +37 -0
- data/Gemfile.lock +199 -0
- data/LICENSE.txt +22 -0
- data/Procfile +1 -0
- data/README.md +582 -0
- data/Rakefile +64 -0
- data/bin/proxy_tester +11 -0
- data/db/migrate/20140314_create_environment.rb +8 -0
- data/files/config.yaml +1 -0
- data/files/example-config.erb +12 -0
- data/files/example-spec_helper.rb.erb +23 -0
- data/files/example-test_case.rb.erb +27 -0
- data/files/example-test_cases-gemfile.rb.erb +9 -0
- data/files/example-user_file.erb +4 -0
- data/lib/proxy_tester/actions/add_examples_to_test_cases_directory.rb +125 -0
- data/lib/proxy_tester/actions/clone_repository.rb +39 -0
- data/lib/proxy_tester/actions/create_directory.rb +33 -0
- data/lib/proxy_tester/actions/create_file.rb +55 -0
- data/lib/proxy_tester/actions/create_output.rb +36 -0
- data/lib/proxy_tester/actions/handle_error.rb +37 -0
- data/lib/proxy_tester/actions/initialize_application.rb +70 -0
- data/lib/proxy_tester/actions/show_config.rb +10 -0
- data/lib/proxy_tester/capybara_proxy.rb +54 -0
- data/lib/proxy_tester/capybara_proxy_pac.rb +62 -0
- data/lib/proxy_tester/cli/main.rb +59 -0
- data/lib/proxy_tester/config.rb +100 -0
- data/lib/proxy_tester/data.rb +23 -0
- data/lib/proxy_tester/database_session.rb +15 -0
- data/lib/proxy_tester/environment.rb +21 -0
- data/lib/proxy_tester/erb_generator.rb +34 -0
- data/lib/proxy_tester/error_handler.rb +107 -0
- data/lib/proxy_tester/error_messages.rb +82 -0
- data/lib/proxy_tester/exceptions.rb +53 -0
- data/lib/proxy_tester/git_file.rb +31 -0
- data/lib/proxy_tester/git_null_file.rb +32 -0
- data/lib/proxy_tester/git_repository.rb +120 -0
- data/lib/proxy_tester/handle_error.rb +37 -0
- data/lib/proxy_tester/locales/en-rails.yml +205 -0
- data/lib/proxy_tester/locales/en.yml +42 -0
- data/lib/proxy_tester/main.rb +46 -0
- data/lib/proxy_tester/models/user.rb +17 -0
- data/lib/proxy_tester/pac_result.rb +50 -0
- data/lib/proxy_tester/rspec/helper.rb +211 -0
- data/lib/proxy_tester/rspec_runner.rb +43 -0
- data/lib/proxy_tester/template_file.rb +19 -0
- data/lib/proxy_tester/template_repository.rb +22 -0
- data/lib/proxy_tester/ui_logger.rb +30 -0
- data/lib/proxy_tester/user_database.rb +24 -0
- data/lib/proxy_tester/version.rb +3 -0
- data/lib/proxy_tester.rb +54 -0
- data/proxy_tester.gemspec +34 -0
- data/script/acceptance_test +4 -0
- data/script/bootstrap +56 -0
- data/script/ci +3 -0
- data/script/console +14 -0
- data/script/release +3 -0
- data/script/test_web +22 -0
- data/script/unit_test +3 -0
- data/spec/actions/add_examples_to_test_cases_directory_spec.rb +52 -0
- data/spec/actions/clone_repository_spec.rb +83 -0
- data/spec/actions/create_directory_spec.rb +59 -0
- data/spec/actions/create_file_spec.rb +139 -0
- data/spec/actions/create_output_spec.rb +46 -0
- data/spec/actions/handle_error_spec.rb +74 -0
- data/spec/actions/initialize_application_spec.rb +40 -0
- data/spec/actions/show_config_spec.rb +22 -0
- data/spec/capybara_proxy_pac_spec.rb +42 -0
- data/spec/capybara_proxy_spec.rb +76 -0
- data/spec/config_spec.rb +86 -0
- data/spec/data_spec.rb +34 -0
- data/spec/environment_spec.rb +25 -0
- data/spec/erb_generator_spec.rb +31 -0
- data/spec/examples/proxy.pac +7 -0
- data/spec/factories.rb +8 -0
- data/spec/features/check_ssl_sites_spec.rb +8 -0
- data/spec/git_file_spec.rb +46 -0
- data/spec/git_repository_spec.rb +111 -0
- data/spec/main_spec.rb +25 -0
- data/spec/pac_result_spec.rb +20 -0
- data/spec/proxy_tester_spec_helper_spec.rb +137 -0
- data/spec/rspec_runner_spec.rb +29 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/support/capybara.rb +11 -0
- data/spec/support/database_cleaner.rb +14 -0
- data/spec/support/debugging.rb +3 -0
- data/spec/support/environment.rb +33 -0
- data/spec/support/example.rb +16 -0
- data/spec/support/factory_girl.rb +15 -0
- data/spec/support/filesystem.rb +19 -0
- data/spec/support/helper_features.rb +31 -0
- data/spec/support/matcher.rb +17 -0
- data/spec/support/reporting.rb +1 -0
- data/spec/support/rspec.rb +5 -0
- data/spec/support/string.rb +2 -0
- data/spec/template_file_spec.rb +25 -0
- data/spec/template_repository_spec.rb +44 -0
- data/spec/user_database_spec.rb +63 -0
- data/spec/user_spec.rb +62 -0
- metadata +398 -0
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module ProxyTester
|
3
|
+
class UserDatabase
|
4
|
+
private
|
5
|
+
|
6
|
+
attr_reader :file
|
7
|
+
|
8
|
+
public
|
9
|
+
|
10
|
+
def initialize(file = ProxyTester.config.user_file)
|
11
|
+
@file = file
|
12
|
+
end
|
13
|
+
|
14
|
+
def create_users(creator)
|
15
|
+
raise Exceptions::UserFileNotFound, file: file unless ::File.exist? file
|
16
|
+
|
17
|
+
CSV.foreach(file, headers: true) do |r|
|
18
|
+
creator.create! name: r['name'], password: r['password']
|
19
|
+
end
|
20
|
+
rescue ActiveRecord::RecordInvalid => err
|
21
|
+
raise Exceptions::UserRecordInvalid, message: err.message
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/proxy_tester.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'active_record'
|
3
|
+
require 'active_support/core_ext/kernel/reporting'
|
4
|
+
require 'active_support/core_ext/object/blank'
|
5
|
+
require 'active_support/core_ext/array/access'
|
6
|
+
require 'crypt_keeper'
|
7
|
+
require 'addressable/uri'
|
8
|
+
require 'io/console'
|
9
|
+
require 'json'
|
10
|
+
require 'fuubar'
|
11
|
+
require 'rspec'
|
12
|
+
require 'thor'
|
13
|
+
require 'logger'
|
14
|
+
require 'rugged'
|
15
|
+
require 'capybara/rspec'
|
16
|
+
require 'capybara/poltergeist'
|
17
|
+
require 'ostruct'
|
18
|
+
require 'csv'
|
19
|
+
require 'proxy_pac_rb'
|
20
|
+
|
21
|
+
require 'proxy_tester/models/user'
|
22
|
+
|
23
|
+
require 'proxy_tester/pac_result'
|
24
|
+
require 'proxy_tester/capybara_proxy_pac'
|
25
|
+
require 'proxy_tester/user_database'
|
26
|
+
require 'proxy_tester/ui_logger'
|
27
|
+
require 'proxy_tester/erb_generator'
|
28
|
+
require 'proxy_tester/config'
|
29
|
+
require 'proxy_tester/exceptions'
|
30
|
+
require 'proxy_tester/version'
|
31
|
+
require 'proxy_tester/database_session'
|
32
|
+
require 'proxy_tester/environment'
|
33
|
+
require 'proxy_tester/main'
|
34
|
+
require 'proxy_tester/data'
|
35
|
+
require 'proxy_tester/template_repository'
|
36
|
+
require 'proxy_tester/template_file'
|
37
|
+
require 'proxy_tester/git_null_file'
|
38
|
+
require 'proxy_tester/git_file'
|
39
|
+
require 'proxy_tester/git_repository'
|
40
|
+
require 'proxy_tester/error_handler'
|
41
|
+
require 'proxy_tester/rspec_runner'
|
42
|
+
require 'proxy_tester/cli/main'
|
43
|
+
|
44
|
+
require 'proxy_tester/actions/show_config'
|
45
|
+
require 'proxy_tester/actions/initialize_application'
|
46
|
+
require 'proxy_tester/actions/create_output'
|
47
|
+
require 'proxy_tester/actions/create_directory'
|
48
|
+
require 'proxy_tester/actions/create_file'
|
49
|
+
require 'proxy_tester/actions/handle_error'
|
50
|
+
require 'proxy_tester/actions/clone_repository'
|
51
|
+
require 'proxy_tester/actions/add_examples_to_test_cases_directory'
|
52
|
+
|
53
|
+
require 'proxy_tester/capybara_proxy'
|
54
|
+
require 'proxy_tester/rspec/helper'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
require 'proxy_tester/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 'proxy_tester'
|
9
|
+
spec.version = ProxyTester::VERSION
|
10
|
+
spec.authors = ['Dennis Günnewig']
|
11
|
+
spec.email = ['dg1@vrnetze.de']
|
12
|
+
spec.summary = %q{Test proxies}
|
13
|
+
spec.description = %q{Test proxies to be sure it works}
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_runtime_dependency 'activerecord', '~>4.0'
|
22
|
+
spec.add_runtime_dependency 'activesupport', '~>4.0'
|
23
|
+
spec.add_runtime_dependency 'sqlite3'
|
24
|
+
spec.add_runtime_dependency 'crypt_keeper'
|
25
|
+
spec.add_runtime_dependency 'rspec'
|
26
|
+
spec.add_runtime_dependency 'fuubar'
|
27
|
+
spec.add_runtime_dependency 'thor'
|
28
|
+
spec.add_runtime_dependency 'i18n'
|
29
|
+
spec.add_runtime_dependency 'rugged'
|
30
|
+
spec.add_runtime_dependency 'addressable'
|
31
|
+
spec.add_runtime_dependency 'poltergeist'
|
32
|
+
spec.add_runtime_dependency 'proxy_pac_rb', '~>0.2.5'
|
33
|
+
spec.add_runtime_dependency 'therubyracer'
|
34
|
+
end
|
data/script/bootstrap
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
function puts() {
|
4
|
+
echo -e $1 >&2
|
5
|
+
}
|
6
|
+
|
7
|
+
function install_package() {
|
8
|
+
if which pacman > /dev/null; then
|
9
|
+
if [ -z "$(pacman -Ss "^$1\$" | grep installed)" ]; then
|
10
|
+
puts "Installing $1"
|
11
|
+
sudo pacman -S --noconfirm $1
|
12
|
+
fi
|
13
|
+
else
|
14
|
+
puts "Please install $1 from your operating system repository."
|
15
|
+
fi
|
16
|
+
}
|
17
|
+
|
18
|
+
function install_gem() {
|
19
|
+
if which gem > /dev/null; then
|
20
|
+
if [ -z "$(gem list -l "^$1\$")" ]; then
|
21
|
+
puts "Installing $1"
|
22
|
+
gem install --no-ri --no-rdoc $1
|
23
|
+
fi
|
24
|
+
else
|
25
|
+
puts "Please install $1 via rubygems."
|
26
|
+
fi
|
27
|
+
}
|
28
|
+
|
29
|
+
function install_node() {
|
30
|
+
if which npm > /dev/null; then
|
31
|
+
if [ -z "$(npm list -g $1 | grep bower)" ]; then
|
32
|
+
puts "Installing $1"
|
33
|
+
npm install -g $1
|
34
|
+
fi
|
35
|
+
else
|
36
|
+
puts "Please install $1 via npm"
|
37
|
+
fi
|
38
|
+
}
|
39
|
+
|
40
|
+
function file_exist() {
|
41
|
+
if [ -f $1 ]; then
|
42
|
+
puts "$2"
|
43
|
+
return 0
|
44
|
+
else
|
45
|
+
puts "Warning file \"$1\" does not exist. Maybe this can cause problems during bootstrapping"
|
46
|
+
return 1
|
47
|
+
fi
|
48
|
+
}
|
49
|
+
|
50
|
+
echo "Bootstrapping development environment for application.." >&2
|
51
|
+
|
52
|
+
install_package ruby
|
53
|
+
install_package phantomjs
|
54
|
+
|
55
|
+
install_gem bundler
|
56
|
+
bundle install
|
data/script/ci
ADDED
data/script/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH << ::File.expand_path('../../lib', __FILE__)
|
4
|
+
|
5
|
+
# Pull in all of the gems including those in the `test` group
|
6
|
+
require 'bundler'
|
7
|
+
Bundler.require :default, :test, :development
|
8
|
+
|
9
|
+
require 'irb'
|
10
|
+
require 'irb/completion'
|
11
|
+
require 'proxy_tester'
|
12
|
+
|
13
|
+
ARGV.clear
|
14
|
+
IRB.start
|
data/script/release
ADDED
data/script/test_web
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'sinatra'
|
4
|
+
|
5
|
+
class Webserver < Sinatra::Base
|
6
|
+
enable :protection
|
7
|
+
|
8
|
+
get '/:name' do
|
9
|
+
File.read(File.expand_path("../../files/test/#{params[:name]}", __FILE__))
|
10
|
+
end
|
11
|
+
|
12
|
+
post '/rspec/:test' do
|
13
|
+
case params[:test]
|
14
|
+
when 'send'
|
15
|
+
if params[:hello] == 'world'
|
16
|
+
'hello rspec'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Webserver.start!
|
data/script/unit_test
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Actions::AddExamplesToTestCasesDirectory do
|
5
|
+
let(:examples_directory) { File.join(working_directory, 'test_cases.d', 'examples') }
|
6
|
+
|
7
|
+
let(:repo) do
|
8
|
+
Rugged::Repository.init_at(git_repo)
|
9
|
+
end
|
10
|
+
context '#initialize' do
|
11
|
+
it 'requires a path' do
|
12
|
+
Actions::AddExamplesToTestCasesDirectory.new(examples_directory)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context '#run' do
|
17
|
+
it 'runs the action' do
|
18
|
+
action = Actions::AddExamplesToTestCasesDirectory.new(examples_directory)
|
19
|
+
silence(:stderr) do
|
20
|
+
action.run
|
21
|
+
end
|
22
|
+
|
23
|
+
expect(path_exists?('test_cases.d/examples')).to be_true
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'respects existing path' do
|
27
|
+
create_directory('test_cases.d/examples')
|
28
|
+
|
29
|
+
action = Actions::AddExamplesToTestCasesDirectory.new(examples_directory)
|
30
|
+
|
31
|
+
result = capture(:stderr) do
|
32
|
+
ProxyTester.ui_logger.level = :info
|
33
|
+
action.run
|
34
|
+
end
|
35
|
+
|
36
|
+
expect(result).to include('already')
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'does overwrite existing files if forced to' do
|
40
|
+
create_directory('test_cases.d/examples')
|
41
|
+
|
42
|
+
action = Actions::AddExamplesToTestCasesDirectory.new(examples_directory, force: true)
|
43
|
+
|
44
|
+
result = capture(:stderr) do
|
45
|
+
ProxyTester.ui_logger.level = :info
|
46
|
+
action.run
|
47
|
+
end
|
48
|
+
|
49
|
+
expect(result).to include('Creating')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Actions::CloneRepository do
|
5
|
+
let(:source_git_repo) { File.join(working_directory, 'git_repo.git') }
|
6
|
+
let(:destination_git_repo) { File.join(working_directory, 'git_clone_repo') }
|
7
|
+
|
8
|
+
context '#initialize' do
|
9
|
+
it 'requires a source and a destination' do
|
10
|
+
repo = GitRepository.create(source_git_repo)
|
11
|
+
repo.add_content('file.txt', 'asdf1')
|
12
|
+
|
13
|
+
expect {
|
14
|
+
Actions::CloneRepository.new(source_git_repo, destination_git_repo)
|
15
|
+
}.not_to raise_error
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context '#run' do
|
20
|
+
it 'runs the action' do
|
21
|
+
repo = GitRepository.create(source_git_repo)
|
22
|
+
repo.add_content('file.txt', 'asdf1')
|
23
|
+
|
24
|
+
action = Actions::CloneRepository.new(source_git_repo, destination_git_repo)
|
25
|
+
silence(:stderr) do
|
26
|
+
action.run
|
27
|
+
end
|
28
|
+
|
29
|
+
expect(path_exists?('git_clone_repo')).to be_true
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'respects existing path' do
|
33
|
+
repo = GitRepository.create(source_git_repo)
|
34
|
+
repo.add_content('file.txt', 'asdf1')
|
35
|
+
|
36
|
+
create_directory('git_clone_repo')
|
37
|
+
|
38
|
+
action = Actions::CloneRepository.new(source_git_repo, destination_git_repo)
|
39
|
+
|
40
|
+
result = capture(:stderr) do
|
41
|
+
ProxyTester.ui_logger.level = :info
|
42
|
+
action.run
|
43
|
+
end
|
44
|
+
|
45
|
+
expect(result).to include('already')
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'does !!!not!!! remove existing path if forced to' do
|
49
|
+
repo = GitRepository.create(source_git_repo)
|
50
|
+
repo.add_content('file.txt', 'asdf1')
|
51
|
+
|
52
|
+
create_directory('git_clone_repo')
|
53
|
+
|
54
|
+
action = Actions::CloneRepository.new(source_git_repo, destination_git_repo, force: true)
|
55
|
+
|
56
|
+
result = capture(:stderr) do
|
57
|
+
ProxyTester.ui_logger.level = :info
|
58
|
+
action.run
|
59
|
+
end
|
60
|
+
|
61
|
+
expect(result).to include('yourself')
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'resolves ~' do
|
65
|
+
source_git_repo = '~/source_repo.git'
|
66
|
+
destination_git_repo = '~/destination_repo'
|
67
|
+
|
68
|
+
|
69
|
+
action = with_environment 'HOME' => working_directory do
|
70
|
+
repo = GitRepository.create(source_git_repo)
|
71
|
+
repo.add_content('file.txt', 'asdf1')
|
72
|
+
|
73
|
+
Actions::CloneRepository.new(source_git_repo, destination_git_repo)
|
74
|
+
end
|
75
|
+
|
76
|
+
silence(:stderr) do
|
77
|
+
action.run
|
78
|
+
end
|
79
|
+
|
80
|
+
expect(path_exists?('destination_repo/file.txt')).to be_true
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Actions::CreateDirectory do
|
5
|
+
context '#initialize' do
|
6
|
+
it 'requires a path' do
|
7
|
+
Actions::CreateDirectory.new(working_directory)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context '#run' do
|
12
|
+
it 'runs the action' do
|
13
|
+
action = Actions::CreateDirectory.new(::File.join(working_directory, 'repo'))
|
14
|
+
silence(:stderr) do
|
15
|
+
action.run
|
16
|
+
end
|
17
|
+
|
18
|
+
expect(path_exists?('repo')).to be_true
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'respects existing path' do
|
22
|
+
create_directory('repo')
|
23
|
+
|
24
|
+
action = Actions::CreateDirectory.new(::File.join(working_directory, 'repo'))
|
25
|
+
|
26
|
+
result = capture(:stderr) do
|
27
|
+
ProxyTester.ui_logger.level = :info
|
28
|
+
action.run
|
29
|
+
end
|
30
|
+
|
31
|
+
expect(result).to include('already')
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'does not respect existing path if forced to' do
|
35
|
+
create_directory('repo')
|
36
|
+
|
37
|
+
action = Actions::CreateDirectory.new(::File.join(working_directory, 'repo'), force: true)
|
38
|
+
|
39
|
+
result = capture(:stderr) do
|
40
|
+
ProxyTester.ui_logger.level = :info
|
41
|
+
action.run
|
42
|
+
end
|
43
|
+
|
44
|
+
expect(result).to include('Creating directory')
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'resolves ~' do
|
48
|
+
action = with_environment 'HOME' => working_directory do
|
49
|
+
Actions::CreateDirectory.new('~/file')
|
50
|
+
end
|
51
|
+
|
52
|
+
silence(:stderr) do
|
53
|
+
action.run
|
54
|
+
end
|
55
|
+
|
56
|
+
expect(path_exists?('file')).to be_true
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Actions::CreateFile do
|
5
|
+
context '#initialize' do
|
6
|
+
it 'requires a path' do
|
7
|
+
repository = double('TemplateRepository')
|
8
|
+
data = double('Data')
|
9
|
+
|
10
|
+
engine_klass = Class.new do
|
11
|
+
def initialize(data)
|
12
|
+
end
|
13
|
+
|
14
|
+
def compile(template, destination)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
Actions::CreateFile.new(:template, ::File.join(working_directory, 'file'), {}, data, engine_klass, repository)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context '#run' do
|
23
|
+
it 'runs the action' do
|
24
|
+
repository = double('TemplateRepository')
|
25
|
+
expect(repository).to receive(:find).with(:template)
|
26
|
+
|
27
|
+
data = double('Data')
|
28
|
+
|
29
|
+
engine_klass = Class.new do
|
30
|
+
def initialize(data)
|
31
|
+
end
|
32
|
+
|
33
|
+
def compile(template, destination)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
action = Actions::CreateFile.new(:template, ::File.join(working_directory, 'file'), data, {}, engine_klass, repository)
|
38
|
+
silence(:stderr) do
|
39
|
+
action.run
|
40
|
+
end
|
41
|
+
|
42
|
+
expect(path_exists?('file')).to be_true
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'creates sub directories' do
|
46
|
+
repository = double('TemplateRepository')
|
47
|
+
expect(repository).to receive(:find).with(:template)
|
48
|
+
|
49
|
+
data = double('Data')
|
50
|
+
|
51
|
+
engine_klass = Class.new do
|
52
|
+
def initialize(data)
|
53
|
+
end
|
54
|
+
|
55
|
+
def compile(template, destination)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
action = Actions::CreateFile.new(:template, ::File.join(working_directory, 'data', 'file'), data, {create_directories: true}, engine_klass, repository)
|
60
|
+
silence(:stderr) do
|
61
|
+
action.run
|
62
|
+
end
|
63
|
+
|
64
|
+
expect(path_exists?('data/file')).to be_true
|
65
|
+
end
|
66
|
+
it 'respects existing path' do
|
67
|
+
repository = double('TemplateRepository')
|
68
|
+
|
69
|
+
data = double('Data')
|
70
|
+
|
71
|
+
engine_klass = Class.new do
|
72
|
+
def initialize(data)
|
73
|
+
end
|
74
|
+
|
75
|
+
def compile(template, destination)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
file = create_file('file')
|
80
|
+
action = Actions::CreateFile.new(:template, file, data, {}, engine_klass, repository)
|
81
|
+
result = capture(:stderr) do
|
82
|
+
ProxyTester.ui_logger.level = :info
|
83
|
+
action.run
|
84
|
+
end
|
85
|
+
|
86
|
+
expect(result).to include('already')
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'does not respect existing path if forced to' do
|
90
|
+
repository = double('TemplateRepository')
|
91
|
+
expect(repository).to receive(:find).with(:template)
|
92
|
+
|
93
|
+
data = double('Data')
|
94
|
+
|
95
|
+
engine_klass = Class.new do
|
96
|
+
def initialize(data)
|
97
|
+
end
|
98
|
+
|
99
|
+
def compile(template, destination)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
file = create_file('file')
|
104
|
+
action = Actions::CreateFile.new(:template, file, data, { force: true }, engine_klass, repository)
|
105
|
+
|
106
|
+
result = capture(:stderr) do
|
107
|
+
ProxyTester.ui_logger.level = :info
|
108
|
+
action.run
|
109
|
+
end
|
110
|
+
|
111
|
+
expect(result).to include('Creating file')
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'resolves ~' do
|
115
|
+
repository = double('TemplateRepository')
|
116
|
+
expect(repository).to receive(:find).with(:template)
|
117
|
+
|
118
|
+
data = double('Data')
|
119
|
+
|
120
|
+
engine_klass = Class.new do
|
121
|
+
def initialize(data)
|
122
|
+
end
|
123
|
+
|
124
|
+
def compile(template, destination)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
action = with_environment 'HOME' => working_directory do
|
129
|
+
Actions::CreateFile.new(:template, '~/file', data, { force: true }, engine_klass, repository)
|
130
|
+
end
|
131
|
+
|
132
|
+
silence(:stderr) do
|
133
|
+
action.run
|
134
|
+
end
|
135
|
+
|
136
|
+
expect(path_exists?('file')).to be_true
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Actions::CreateOutput do
|
5
|
+
context '#initialize' do
|
6
|
+
it 'requires template, data and output' do
|
7
|
+
output = double('IO')
|
8
|
+
repository = double('TemplateRepository')
|
9
|
+
data = double('Data')
|
10
|
+
|
11
|
+
engine_klass = Class.new do
|
12
|
+
def initialize(data)
|
13
|
+
end
|
14
|
+
|
15
|
+
def compile(template, destination)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Actions::CreateOutput.new(:template, output, data, engine_klass, repository)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context '#run' do
|
24
|
+
it 'runs the action' do
|
25
|
+
output = double('$stdout')
|
26
|
+
|
27
|
+
repository = double('TemplateRepository')
|
28
|
+
expect(repository).to receive(:find).with(:template)
|
29
|
+
|
30
|
+
data = double('Data')
|
31
|
+
|
32
|
+
engine_klass = Class.new do
|
33
|
+
def initialize(data)
|
34
|
+
end
|
35
|
+
|
36
|
+
def compile(template, destination)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
silence(:stderr) do
|
41
|
+
Actions::CreateOutput.new(:template, output, data, engine_klass, repository).run
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Actions::HandleError do
|
5
|
+
context '#initialize' do
|
6
|
+
it 'requires an exception' do
|
7
|
+
expect {
|
8
|
+
Actions::HandleError.new(StandardError.new)
|
9
|
+
}.not_to raise_error
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context '#run' do
|
14
|
+
it 'handles errors' do
|
15
|
+
action = Actions::HandleError.new(RuntimeError.new)
|
16
|
+
|
17
|
+
silence(:stderr) do
|
18
|
+
begin
|
19
|
+
action.run
|
20
|
+
rescue SystemExit => e
|
21
|
+
@err = e
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
expect(@err).to be_kind_of(SystemExit)
|
26
|
+
expect(@err.status).to be(99)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'parses original message with json' do
|
30
|
+
action = Actions::HandleError.new(RuntimeError.new(JSON.dump(name: 'asdf')))
|
31
|
+
|
32
|
+
silence(:stderr) do
|
33
|
+
begin
|
34
|
+
action.run
|
35
|
+
rescue SystemExit => e
|
36
|
+
@err = e
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
expect(@err).to be_kind_of(SystemExit)
|
41
|
+
expect(@err.status).to be(99)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'returns an empty hash on parse error' do
|
45
|
+
action = Actions::HandleError.new(RuntimeError.new('asdf'))
|
46
|
+
|
47
|
+
silence(:stderr) do
|
48
|
+
begin
|
49
|
+
action.run
|
50
|
+
rescue SystemExit => e
|
51
|
+
@err = e
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
expect(@err).to be_kind_of(SystemExit)
|
56
|
+
expect(@err.status).to be(99)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'returns an empty hash if result is not a hash' do
|
60
|
+
action = Actions::HandleError.new(RuntimeError.new(JSON.dump(['asdf'])))
|
61
|
+
|
62
|
+
silence(:stderr) do
|
63
|
+
begin
|
64
|
+
action.run
|
65
|
+
rescue SystemExit => e
|
66
|
+
@err = e
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
expect(@err).to be_kind_of(SystemExit)
|
71
|
+
expect(@err.status).to be(99)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|