rdm 0.4.7 → 0.4.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +69 -1
- data/bin/rdm +102 -42
- data/example/.rdm/templates/configs/<%=config_path%> +2 -0
- data/example/.rdm/templates/configs/<%=role_config_path%> +2 -0
- data/example/Rdm.packages +8 -3
- data/example/domain/core/spec/core/one_more_spec.rb +5 -0
- data/example/domain/core/spec/core/sample_service_spec.rb +5 -0
- data/example/infrastructure/repository/Package.rb +1 -1
- data/example/infrastructure/repository/spec/example_spec.rb +5 -0
- data/example/infrastructure/repository/spec/spec_helper.rb +7 -0
- data/example/server/spec/server_spec.rb +5 -0
- data/example/server/spec/spec_helper.rb +7 -0
- data/example/{.runignore → tests/.runignore} +0 -0
- data/example/tests/diff_run +1 -30
- data/example/tests/run +1 -39
- data/lib/rdm.rb +2 -1
- data/lib/rdm/cli/dependencies_controller.rb +2 -0
- data/lib/rdm/cli/diff_spec_runner.rb +42 -0
- data/lib/rdm/errors.rb +3 -0
- data/lib/rdm/gen/config.rb +1 -3
- data/lib/rdm/gen/init.rb +13 -7
- data/lib/rdm/gen/package.rb +6 -6
- data/lib/rdm/handlers/dependencies_handler.rb +14 -9
- data/lib/rdm/handlers/diff_package_handler.rb +2 -1
- data/lib/rdm/handlers/template_handler.rb +2 -2
- data/lib/rdm/settings.rb +0 -1
- data/lib/rdm/source_modifier.rb +69 -0
- data/lib/rdm/spec_runner.rb +5 -2
- data/lib/rdm/spec_runner/command_generator.rb +3 -2
- data/lib/rdm/spec_runner/runner.rb +18 -8
- data/lib/rdm/templates/init/bin/console +1 -1
- data/lib/rdm/templates/init/{.runignore → tests/.runignore} +0 -0
- data/lib/rdm/templates/init/tests/diff_run +1 -33
- data/lib/rdm/templates/init/tests/run +1 -39
- data/lib/rdm/version.rb +1 -1
- data/spec/helpers/example_project_helper.rb +0 -185
- data/spec/rdm/cli/diff_spec_runner_spec.rb +55 -0
- data/spec/rdm/cli/init_spec.rb +0 -2
- data/spec/rdm/gen/init_spec.rb +9 -1
- data/spec/rdm/handlers/dependencies_handler_spec.rb +27 -0
- data/spec/rdm/source_parser_spec.rb +1 -2
- data/spec/rdm/spec_runner/runner_spec.rb +61 -3
- metadata +14 -9
- data/lib/rdm/source_composer.rb +0 -38
- data/spec/rdm/cli/diff_package_spec.rb +0 -5
- data/spec/rdm/source_composer_spec.rb +0 -76
File without changes
|
@@ -1,35 +1,3 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
require 'rdm'
|
5
|
-
|
6
|
-
REVISION = ARGV.clone.first
|
7
|
-
PATH = File.expand_path(__FILE__)
|
8
|
-
|
9
|
-
Rdm.root(__FILE__)
|
10
|
-
|
11
|
-
begin
|
12
|
-
changed_packages = Rdm::Handlers::DiffPackageHandler.handle(
|
13
|
-
path: PATH,
|
14
|
-
revision: REVISION
|
15
|
-
)
|
16
|
-
|
17
|
-
puts "Tests for the following packages will run:"
|
18
|
-
puts changed_packages
|
19
|
-
|
20
|
-
changed_packages.each do |package|
|
21
|
-
Rdm::SpecRunner.run(
|
22
|
-
package: package,
|
23
|
-
path: PATH,
|
24
|
-
skip_ignored_packages: false,
|
25
|
-
show_missing_packages: true
|
26
|
-
)
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
rescue Rdm::Errors::GitRepositoryNotInitialized
|
31
|
-
puts "Git repository is not initialized. Use `git init .`"
|
32
|
-
exit(1)
|
33
|
-
end
|
34
|
-
|
35
|
-
|
3
|
+
system("bundle exec rdm rspec.diff_run #{ARGV.join(' ')}", out: STDOUT, err: :out)
|
@@ -1,41 +1,3 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
## $ TEST_RUN=1 tests/run
|
5
|
-
|
6
|
-
## # run application tests:
|
7
|
-
## $ tests/run
|
8
|
-
|
9
|
-
## # run package tests:
|
10
|
-
## $ tests/run commands
|
11
|
-
|
12
|
-
## # run spec in a package:
|
13
|
-
## $ tests/run commands some_spec.rb
|
14
|
-
|
15
|
-
ENV['RUBY_ENV'] = 'test'
|
16
|
-
require 'rdm'
|
17
|
-
|
18
|
-
Rdm.root(__FILE__)
|
19
|
-
|
20
|
-
if ENV['TEST_RUN']
|
21
|
-
require 'minitest/autorun'
|
22
|
-
describe Rdm::SpecRunner::Runner do
|
23
|
-
before do
|
24
|
-
@runner = Rdm::SpecRunner::Runner.new({})
|
25
|
-
end
|
26
|
-
|
27
|
-
describe 'works ' do
|
28
|
-
it 'assert true' do
|
29
|
-
assert 2 == 2
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
else
|
34
|
-
Rdm::SpecRunner.run(
|
35
|
-
package: ARGV.clone.first,
|
36
|
-
spec_matcher: ARGV.clone[1],,
|
37
|
-
path: File.expand_path(__FILE__),
|
38
|
-
skip_ignored_packages: true,
|
39
|
-
show_missing_packages: true
|
40
|
-
)
|
41
|
-
end
|
3
|
+
system("bundle exec rdm rspec.run #{ARGV.join(' ')}", out: STDOUT, err: :out)
|
data/lib/rdm/version.rb
CHANGED
@@ -28,190 +28,5 @@ module ExampleProjectHelper
|
|
28
28
|
|
29
29
|
FileUtils.rm_rf(File.join(@example_project_path, '.rdm'))
|
30
30
|
end
|
31
|
-
|
32
|
-
# FileUtils.mkdir_p(File.join(path, 'configs'))
|
33
|
-
# FileUtils.mkdir_p(File.join(path, 'application/web/package/web'))
|
34
|
-
# FileUtils.mkdir_p(File.join(path, 'domain/core/package/core'))
|
35
|
-
# FileUtils.mkdir_p(File.join(path, 'subsystems/mailing_system/package/mailing_system'))
|
36
|
-
# FileUtils.mkdir_p(File.join(path, 'subsystems/api/package/api'))
|
37
|
-
# FileUtils.mkdir_p(File.join(path, 'tests'))
|
38
|
-
|
39
|
-
# if package_template
|
40
|
-
# FileUtils.mkdir_p(File.join(path, '.rdm/templates/package'))
|
41
|
-
# File.open(File.join(path, '.rdm/templates/package/Package.rb'), 'w') do |f|
|
42
|
-
# f.write <<~EOF
|
43
|
-
# package do
|
44
|
-
# name '<%= package_name %>'
|
45
|
-
# version "1.0"
|
46
|
-
# end
|
47
|
-
|
48
|
-
# dependency do
|
49
|
-
# # import "core"
|
50
|
-
# end
|
51
|
-
# EOF
|
52
|
-
# end
|
53
|
-
# end
|
54
|
-
|
55
|
-
# File.open(File.join(path, 'tests/run'), 'w') do |f|
|
56
|
-
# f.write <<~EOF
|
57
|
-
# # how to start tests for your project with rdm
|
58
|
-
# EOF
|
59
|
-
# end
|
60
|
-
|
61
|
-
# File.open(File.join(path, 'Readme.md'), 'w') do |f|
|
62
|
-
# f.write <<~EOF
|
63
|
-
# Some content about your project
|
64
|
-
# EOF
|
65
|
-
# end
|
66
|
-
|
67
|
-
# File.open(File.join(path, 'Gemfile'), 'w') do |f|
|
68
|
-
# f.write <<~EOF
|
69
|
-
# gem 'rdm'
|
70
|
-
# EOF
|
71
|
-
# end
|
72
|
-
|
73
|
-
# File.open(File.join(path, 'Gemfile.lock'), 'w') do |f|
|
74
|
-
# f.write <<~EOF
|
75
|
-
# gem 'rdm'
|
76
|
-
# EOF
|
77
|
-
# end
|
78
|
-
|
79
|
-
# File.open(File.join(path, 'Gemfile.lock'), 'w') do |f|
|
80
|
-
# f.write <<~EOF
|
81
|
-
# gem 'rdm'
|
82
|
-
# EOF
|
83
|
-
# end
|
84
|
-
|
85
|
-
# File.open(File.join(path, Rdm::SOURCE_FILENAME), 'w') do |f|
|
86
|
-
# f.write <<~EOF
|
87
|
-
# setup do
|
88
|
-
# role "production"
|
89
|
-
# configs_dir "configs"
|
90
|
-
# config_path ":configs_dir/:config_name/default.yml"
|
91
|
-
# role_config_path ":configs_dir/:config_name/:role.yml"
|
92
|
-
# package_subdir_name "package"
|
93
|
-
# compile_path "/tmp/example_compile"
|
94
|
-
# compile_ignore_files [
|
95
|
-
# '.gitignore',
|
96
|
-
# '.byebug_history',
|
97
|
-
# '.irbrc',
|
98
|
-
# '.rspec',
|
99
|
-
# '*_spec.rb',
|
100
|
-
# '*.log'
|
101
|
-
# ]
|
102
|
-
# compile_add_files [
|
103
|
-
# 'Gemfile',
|
104
|
-
# 'Gemfile.lock'
|
105
|
-
# ]
|
106
|
-
# end
|
107
|
-
|
108
|
-
# package "application/web"
|
109
|
-
# package "domain/core"
|
110
|
-
# package "subsystems/api"
|
111
|
-
# EOF
|
112
|
-
# end
|
113
|
-
|
114
|
-
# File.open(File.join(path, "application/web", Rdm::PACKAGE_FILENAME), 'w') do |f|
|
115
|
-
# f.write <<~EOF
|
116
|
-
# package do
|
117
|
-
# name "web"
|
118
|
-
# version "1.0"
|
119
|
-
# end
|
120
|
-
|
121
|
-
# dependency do
|
122
|
-
# import "core"
|
123
|
-
# end
|
124
|
-
# EOF
|
125
|
-
# end
|
126
|
-
|
127
|
-
# File.open(File.join(path, "domain/core", Rdm::PACKAGE_FILENAME), 'w') do |f|
|
128
|
-
# f.write <<~EOF
|
129
|
-
# package do
|
130
|
-
# name "core"
|
131
|
-
# version "1.0"
|
132
|
-
# end
|
133
|
-
|
134
|
-
# dependency do
|
135
|
-
# end
|
136
|
-
# EOF
|
137
|
-
# end
|
138
|
-
|
139
|
-
# File.open(File.join(path, "subsystems/api", Rdm::PACKAGE_FILENAME), 'w') do |f|
|
140
|
-
# f.write <<~EOF
|
141
|
-
# package do
|
142
|
-
# name "api"
|
143
|
-
# version "1.0"
|
144
|
-
# end
|
145
|
-
|
146
|
-
# dependency do
|
147
|
-
# import "web"
|
148
|
-
# end
|
149
|
-
# EOF
|
150
|
-
# end
|
151
|
-
|
152
|
-
# File.open(File.join(path, "application/web/package/web/", "sample_controller.rb"), 'w') do |f|
|
153
|
-
# f.write <<~EOF
|
154
|
-
# class Web::SampleController
|
155
|
-
# def perform
|
156
|
-
# sample_service.perform
|
157
|
-
# end
|
158
|
-
|
159
|
-
# def sample_service
|
160
|
-
# Core::SampleService.new
|
161
|
-
# end
|
162
|
-
# end
|
163
|
-
# EOF
|
164
|
-
# end
|
165
|
-
|
166
|
-
# File.open(File.join(path, "application/web/package/", "web.rb"), 'w') do |f|
|
167
|
-
# f.write <<~EOF
|
168
|
-
# require 'active_support'
|
169
|
-
# require 'active_support/dependencies'
|
170
|
-
# require 'active_support/core_ext'
|
171
|
-
|
172
|
-
# ActiveSupport::Dependencies.autoload_paths << Pathname.new(__FILE__).parent.to_s
|
173
|
-
|
174
|
-
# module Web
|
175
|
-
# end
|
176
|
-
# EOF
|
177
|
-
# end
|
178
|
-
|
179
|
-
# File.open(File.join(path, "domain/core/package/core/", "sample_service.rb"), 'w') do |f|
|
180
|
-
# f.write <<~EOF
|
181
|
-
# class Core::SampleService
|
182
|
-
# def perform
|
183
|
-
# puts "Core::SampleService called..."
|
184
|
-
# end
|
185
|
-
# end
|
186
|
-
# EOF
|
187
|
-
# end
|
188
|
-
|
189
|
-
# File.open(File.join(path, "domain/core/package/", "core.rb"), 'w') do |f|
|
190
|
-
# f.write <<~EOF
|
191
|
-
# require 'active_support'
|
192
|
-
# require 'active_support/dependencies'
|
193
|
-
# require 'active_support/core_ext'
|
194
|
-
|
195
|
-
# ActiveSupport::Dependencies.autoload_paths << Pathname.new(__FILE__).parent.to_s
|
196
|
-
|
197
|
-
# module Core
|
198
|
-
# end
|
199
|
-
# EOF
|
200
|
-
# end
|
201
|
-
|
202
|
-
# File.open(File.join(path, "subsystems/api/package", "api.rb"), 'w') do |f|
|
203
|
-
# f.write <<~EOF
|
204
|
-
# require 'active_support'
|
205
|
-
# require 'active_support/dependencies'
|
206
|
-
# require 'active_support/core_ext'
|
207
|
-
|
208
|
-
# ActiveSupport::Dependencies.autoload_paths << Pathname.new(__FILE__).parent.to_s
|
209
|
-
|
210
|
-
# module Api
|
211
|
-
# end
|
212
|
-
# EOF
|
213
|
-
# end
|
214
|
-
|
215
|
-
# return path
|
216
31
|
end
|
217
32
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rdm::CLI::DiffSpecRunner do
|
4
|
+
include ExampleProjectHelper
|
5
|
+
include GitCommandsHelper
|
6
|
+
|
7
|
+
subject { described_class }
|
8
|
+
let(:stdout) { SpecLogger.new }
|
9
|
+
|
10
|
+
before { initialize_example_project }
|
11
|
+
after do
|
12
|
+
reset_example_project
|
13
|
+
stdout.clean
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '::run' do
|
17
|
+
context 'for not initialized git repository' do
|
18
|
+
it 'puts message to initialize git repository' do
|
19
|
+
subject.run(path: example_project_path, stdout: stdout)
|
20
|
+
|
21
|
+
expect(stdout.output).to include("Git repository is not initialized. Use `git init .`")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'for initialized git repository' do
|
26
|
+
context 'if no files were changed' do
|
27
|
+
it 'puts message about no changed packages were found' do
|
28
|
+
git_initialize_repository(example_project_path)
|
29
|
+
git_commit_changes(example_project_path)
|
30
|
+
|
31
|
+
subject.run(path: example_project_path, stdout: stdout)
|
32
|
+
|
33
|
+
expect(stdout.output).to include("No modified packages were found. Type `git add .` to index all changes...")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'if any files were changed' do
|
38
|
+
it 'puts the list of changed packages' do
|
39
|
+
git_initialize_repository(example_project_path)
|
40
|
+
git_commit_changes(example_project_path)
|
41
|
+
|
42
|
+
File.open(
|
43
|
+
File.join(example_project_path, 'server/package/server.rb'), 'w+'
|
44
|
+
) {|f| f.write '# some comment message'}
|
45
|
+
|
46
|
+
git_index_changes(example_project_path)
|
47
|
+
|
48
|
+
subject.run(path: example_project_path, stdout: stdout, show_output: false)
|
49
|
+
|
50
|
+
expect(stdout.output).to include("Tests for the following packages will run:\n - server\n\n")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/spec/rdm/cli/init_spec.rb
CHANGED
data/spec/rdm/gen/init_spec.rb
CHANGED
@@ -17,7 +17,6 @@ describe Rdm::Gen::Init do
|
|
17
17
|
ensure_exists("Rdm.packages")
|
18
18
|
ensure_exists("Gemfile")
|
19
19
|
ensure_exists("Readme.md")
|
20
|
-
ensure_exists("tests/run")
|
21
20
|
ensure_exists("bin/console")
|
22
21
|
ensure_exists("env_files/test.env")
|
23
22
|
ensure_exists("env_files/development.env")
|
@@ -37,6 +36,15 @@ describe Rdm::Gen::Init do
|
|
37
36
|
ensure_exists(".rdm/templates/package/bin/console")
|
38
37
|
end
|
39
38
|
end
|
39
|
+
|
40
|
+
it "has generated config templates" do
|
41
|
+
subject.generate(current_path: example_project_path, stdout: stdout)
|
42
|
+
|
43
|
+
FileUtils.cd(example_project_path) do
|
44
|
+
ensure_exists(".rdm/templates/configs/<%=config_path%>")
|
45
|
+
ensure_exists(".rdm/templates/configs/<%=role_config_path%>")
|
46
|
+
end
|
47
|
+
end
|
40
48
|
end
|
41
49
|
|
42
50
|
context "prevents double execution" do
|
@@ -17,6 +17,15 @@ describe Rdm::Handlers::DependenciesHandler do
|
|
17
17
|
)
|
18
18
|
).to match(["core", "repository", "web"])
|
19
19
|
end
|
20
|
+
|
21
|
+
it "raises Rdm::Errors::PackageDoesNotExist for invalid package name" do
|
22
|
+
expect{
|
23
|
+
subject.show_names(
|
24
|
+
package_name: 'invalid_package',
|
25
|
+
project_path: example_project_path
|
26
|
+
)
|
27
|
+
}.to raise_error(Rdm::Errors::PackageDoesNotExist)
|
28
|
+
end
|
20
29
|
end
|
21
30
|
|
22
31
|
context ":show_packages" do
|
@@ -33,6 +42,15 @@ describe Rdm::Handlers::DependenciesHandler do
|
|
33
42
|
it "returns array with proper size" do
|
34
43
|
expect(result.first).to be_a Rdm::Package
|
35
44
|
end
|
45
|
+
|
46
|
+
it "raises Rdm::Errors::PackageDoesNotExist for invalid package name" do
|
47
|
+
expect{
|
48
|
+
subject.show_packages(
|
49
|
+
package_name: 'invalid_package',
|
50
|
+
project_path: example_project_path
|
51
|
+
)
|
52
|
+
}.to raise_error(Rdm::Errors::PackageDoesNotExist)
|
53
|
+
end
|
36
54
|
end
|
37
55
|
|
38
56
|
context ":format_for_draw" do
|
@@ -82,5 +100,14 @@ describe Rdm::Handlers::DependenciesHandler do
|
|
82
100
|
)
|
83
101
|
end
|
84
102
|
end
|
103
|
+
|
104
|
+
it "raises Rdm::Errors::PackageDoesNotExist for invalid package name" do
|
105
|
+
expect{
|
106
|
+
subject.draw(
|
107
|
+
package_name: 'invalid_package',
|
108
|
+
project_path: example_project_path
|
109
|
+
)
|
110
|
+
}.to raise_error(Rdm::Errors::PackageDoesNotExist)
|
111
|
+
end
|
85
112
|
end
|
86
113
|
end
|
@@ -98,9 +98,8 @@ describe Rdm::SourceParser do
|
|
98
98
|
context "with undefined role" do
|
99
99
|
it "puts warning message" do
|
100
100
|
Rdm::Utils::FileUtils.change_file @rdm_source_file do |line|
|
101
|
-
line.include?('
|
101
|
+
line.include?("ENV['ENV_FILE'] || \"production\"") ? 'env_file_name "stading"' : line
|
102
102
|
end
|
103
|
-
|
104
103
|
subject.read_and_init_source(@rdm_source_file, stdout: stdout)
|
105
104
|
|
106
105
|
expect(stdout.output).to include("WARNING! Environment file 'stading' was not found. Please, add /tmp/example/env_files/stading.env file...")
|
@@ -3,10 +3,68 @@ require 'spec_helper'
|
|
3
3
|
describe Rdm::SpecRunner::Runner do
|
4
4
|
include ExampleProjectHelper
|
5
5
|
|
6
|
-
|
7
|
-
after { reset_example_project }
|
6
|
+
let(:stdout) { SpecLogger.new }
|
8
7
|
|
9
|
-
|
8
|
+
before { initialize_example_project }
|
9
|
+
after { reset_example_project }
|
10
10
|
|
11
|
+
describe "::run" do
|
12
|
+
it 'run all test without errors' do
|
13
|
+
expect{
|
14
|
+
described_class.new(
|
15
|
+
path: example_project_path,
|
16
|
+
package: nil,
|
17
|
+
spec_matcher: nil,
|
18
|
+
show_missing_packages: false,
|
19
|
+
skip_ignored_packages: false,
|
20
|
+
stdout: stdout,
|
21
|
+
show_output: false
|
22
|
+
).run
|
23
|
+
}.not_to raise_error
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'run tests for specified package without errors' do
|
27
|
+
expect{
|
28
|
+
described_class.new(
|
29
|
+
path: example_project_path,
|
30
|
+
package: 'repository',
|
31
|
+
spec_matcher: nil,
|
32
|
+
show_missing_packages: false,
|
33
|
+
skip_ignored_packages: false,
|
34
|
+
stdout: stdout,
|
35
|
+
show_output: false
|
36
|
+
).run
|
37
|
+
}.not_to raise_error
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'run tests for specified package and spec_matcher without errors' do
|
41
|
+
expect{
|
42
|
+
described_class.new(
|
43
|
+
path: example_project_path,
|
44
|
+
package: 'repository',
|
45
|
+
spec_matcher: 'example_spec.rb',
|
46
|
+
show_missing_packages: false,
|
47
|
+
skip_ignored_packages: false,
|
48
|
+
stdout: stdout,
|
49
|
+
show_output: false
|
50
|
+
).run
|
51
|
+
}.not_to raise_error
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'execute spec content' do
|
55
|
+
described_class.new(
|
56
|
+
path: example_project_path,
|
57
|
+
package: 'repository',
|
58
|
+
spec_matcher: 'example_spec.rb',
|
59
|
+
show_missing_packages: false,
|
60
|
+
skip_ignored_packages: false,
|
61
|
+
stdout: stdout,
|
62
|
+
show_output: false
|
63
|
+
).run
|
64
|
+
|
65
|
+
expect(
|
66
|
+
File.read(File.join(example_project_path, 'infrastructure/repository/fixture.txt'))
|
67
|
+
).to eq('Repository spec working here!')
|
68
|
+
end
|
11
69
|
end
|
12
70
|
end
|