rspeed 0.4.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +54 -0
  3. data/README.md +10 -7
  4. data/lib/generators/rspeed/install_generator.rb +1 -1
  5. data/lib/rspeed.rb +10 -7
  6. data/lib/rspeed/database.rb +19 -0
  7. data/lib/rspeed/differ.rb +71 -0
  8. data/lib/rspeed/env.rb +39 -0
  9. data/lib/rspeed/extension.rb +3 -2
  10. data/lib/rspeed/logger.rb +13 -0
  11. data/lib/rspeed/observer.rb +19 -7
  12. data/lib/rspeed/redis.rb +78 -0
  13. data/lib/rspeed/reporter.rb +38 -0
  14. data/lib/rspeed/runner.rb +4 -15
  15. data/lib/rspeed/splitter.rb +25 -115
  16. data/lib/rspeed/variable.rb +34 -0
  17. data/lib/rspeed/version.rb +1 -1
  18. data/spec/common_helper.rb +10 -0
  19. data/spec/fixtures/empty.rb +4 -0
  20. data/spec/models/rspeed/database/list_spec.rb +15 -0
  21. data/spec/models/rspeed/database/previous_result_spec.rb +17 -0
  22. data/spec/models/rspeed/database/result_spec.rb +17 -0
  23. data/spec/models/rspeed/differ/actual_data_spec.rb +20 -0
  24. data/spec/models/rspeed/differ/actual_files_spec.rb +20 -0
  25. data/spec/models/rspeed/differ/added_data_spec.rb +19 -0
  26. data/spec/models/rspeed/differ/diff_spec.rb +77 -0
  27. data/spec/models/rspeed/differ/final_diff_spec.rb +46 -0
  28. data/spec/models/rspeed/differ/removed_data_spec.rb +20 -0
  29. data/spec/models/rspeed/differ/sum_time_spec.rb +19 -0
  30. data/spec/models/rspeed/env/app_spec.rb +17 -0
  31. data/spec/models/rspeed/env/db_spec.rb +17 -0
  32. data/spec/models/rspeed/env/host_spec.rb +17 -0
  33. data/spec/models/rspeed/env/pipe_spec.rb +19 -0
  34. data/spec/models/rspeed/env/pipes_spec.rb +19 -0
  35. data/spec/models/rspeed/env/port_spec.rb +17 -0
  36. data/spec/models/rspeed/env/rspeed_spec.rb +43 -0
  37. data/spec/models/rspeed/env/spec_path_spec.rb +19 -0
  38. data/spec/models/rspeed/observer/after_spec.rb +5 -5
  39. data/spec/models/rspeed/observer/after_suite_spec.rb +43 -0
  40. data/spec/models/rspeed/observer/before_spec.rb +0 -2
  41. data/spec/models/rspeed/observer/before_suite_spec.rb +18 -6
  42. data/spec/models/rspeed/redis/clean_spec.rb +20 -0
  43. data/spec/models/rspeed/redis/client_spec.rb +7 -0
  44. data/spec/models/rspeed/redis/destroy_spec.rb +21 -0
  45. data/spec/models/rspeed/redis/get_spec.rb +11 -0
  46. data/spec/models/rspeed/redis/keys_spec.rb +13 -0
  47. data/spec/models/rspeed/redis/list_spec.rb +19 -0
  48. data/spec/models/rspeed/redis/profiles_content_spec.rb +19 -0
  49. data/spec/models/rspeed/redis/result_spec.rb +13 -0
  50. data/spec/models/rspeed/redis/set_spec.rb +11 -0
  51. data/spec/models/rspeed/redis/specs_finished_spec.rb +19 -0
  52. data/spec/models/rspeed/redis/specs_initiated_spec.rb +13 -0
  53. data/spec/models/rspeed/redis/version_the_result_spec.rb +21 -0
  54. data/spec/models/rspeed/reporter/call_spec.rb +42 -0
  55. data/spec/models/rspeed/reporter/print_files_spec.rb +27 -0
  56. data/spec/models/rspeed/reporter/print_table_spec.rb +29 -0
  57. data/spec/models/rspeed/runner/run_spec.rb +73 -0
  58. data/spec/models/rspeed/splitter/append_spec.rb +8 -28
  59. data/spec/models/rspeed/splitter/consolidate_spec.rb +23 -0
  60. data/spec/models/rspeed/splitter/first_pipe_spec.rb +4 -8
  61. data/spec/models/rspeed/splitter/need_warm_question_spec.rb +35 -0
  62. data/spec/models/rspeed/splitter/pipe_files_spec.rb +30 -0
  63. data/spec/models/rspeed/splitter/split_spec.rb +85 -45
  64. data/spec/models/rspeed/variable/append_app_name_spec.rb +33 -0
  65. data/spec/models/rspeed/variable/key_spec.rb +15 -0
  66. data/spec/models/rspeed/variable/pipe_spec.rb +23 -0
  67. data/spec/models/rspeed/variable/pipes_pattern_spec.rb +5 -0
  68. data/spec/models/rspeed/variable/previous_result_spec.rb +19 -0
  69. data/spec/models/rspeed/variable/profile_pattern_spec.rb +5 -0
  70. data/spec/models/rspeed/variable/profile_spec.rb +23 -0
  71. data/spec/models/rspeed/variable/result_spec.rb +19 -0
  72. data/spec/spec_helper.rb +27 -0
  73. data/spec/support/common.rb +13 -0
  74. data/spec/support/coverage.rb +14 -0
  75. data/spec/support/env_mock.rb +3 -0
  76. data/spec/support/fakeredis.rb +3 -0
  77. metadata +187 -30
  78. data/spec/fixtures/new_spec.rb.csv +0 -1
  79. data/spec/models/rspeed/splitter/actual_examples_spec.rb +0 -22
  80. data/spec/models/rspeed/splitter/destroy_spec.rb +0 -33
  81. data/spec/models/rspeed/splitter/diff_spec.rb +0 -32
  82. data/spec/models/rspeed/splitter/get_spec.rb +0 -76
  83. data/spec/models/rspeed/splitter/keys_spec.rb +0 -33
  84. data/spec/models/rspeed/splitter/last_pipe_spec.rb +0 -21
  85. data/spec/models/rspeed/splitter/pipe_spec.rb +0 -21
  86. data/spec/models/rspeed/splitter/pipes_spec.rb +0 -27
  87. data/spec/models/rspeed/splitter/rename_spec.rb +0 -18
  88. data/spec/models/rspeed/splitter/result_spec.rb +0 -19
  89. data/spec/models/rspeed/splitter/save_spec.rb +0 -57
  90. data/spec/rails_helper.rb +0 -47
@@ -1 +0,0 @@
1
- 10,./spec/fixtures/new_spec.rb.csv:1010,./spec/fixtures/new_spec.rb.csv:10
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#actual_examples' do
6
- it 'returns all examples' do
7
- splitter = described_class.new(specs_path: 'spec/fixtures/**/*_spec.rb')
8
-
9
- expect(splitter.actual_examples).to eq [
10
- 'spec/fixtures/1_spec.rb:4',
11
- 'spec/fixtures/1_spec.rb:6',
12
- 'spec/fixtures/1_spec.rb:8',
13
- 'spec/fixtures/2_spec.rb:4',
14
- ]
15
- end
16
-
17
- it 'does not raise when no file match' do
18
- splitter = described_class.new(specs_path: 'spec/fixtures/**/*_missing.rb')
19
-
20
- expect(splitter.actual_examples).to eq []
21
- end
22
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#destroy' do
6
- subject(:splitter) { described_class.new }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- before do
11
- redis.set 'rspeed', '{}'
12
- redis.set 'rspeed_1', '{}'
13
- redis.set 'rspeed_2', '{}'
14
- end
15
-
16
- it 'destroys via wildcard' do
17
- splitter.destroy 'rspeed_*'
18
-
19
- expect(splitter.keys('*')).to eq %w[rspeed]
20
- end
21
-
22
- it 'destroys via single name' do
23
- splitter.destroy 'rspeed'
24
-
25
- expect(splitter.keys('*')).to eq %w[rspeed_1 rspeed_2]
26
- end
27
-
28
- it 'destroys default partner when no pattern is given' do
29
- splitter.destroy
30
-
31
- expect(splitter.keys('*')).to eq %w[rspeed]
32
- end
33
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#diff' do
6
- subject(:splitter) { described_class.new(specs_path: './spec/fixtures/*_spec.rb') }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- before do
11
- redis.lpush 'rspeed', { file: './spec/fixtures/1_spec.rb:4', time: '1.4' }.to_json
12
- redis.lpush 'rspeed', { file: './spec/fixtures/1_spec.rb:6', time: '1.6' }.to_json
13
- redis.lpush 'rspeed', { file: './spec/fixtures/1_spec.rb:8', time: '1.8' }.to_json
14
- redis.lpush 'rspeed', { file: './spec/fixtures/2_spec.rb:4', time: '2.4' }.to_json
15
- redis.lpush 'rspeed', { file: './spec/fixtures/2_spec.rb:666', time: '6' }.to_json
16
- redis.lpush 'rspeed', { file: './spec/fixtures/x_spec.rb:1', time: 3 }.to_json
17
-
18
- File.open('spec/fixtures/new_spec.rb', 'a') { |file| file.write("it") }
19
- end
20
-
21
- after { delete_file('spec/fixtures/new_spec.rb') }
22
-
23
- it 'removes removed specs and adds new spec and keeps keeped specs based on rspeed key values' do
24
- expect(splitter.diff).to eq [
25
- { file: './spec/fixtures/2_spec.rb:4', time: '2.4' },
26
- { file: './spec/fixtures/1_spec.rb:8', time: '1.8' },
27
- { file: './spec/fixtures/1_spec.rb:6', time: '1.6' },
28
- { file: './spec/fixtures/1_spec.rb:4', time: '1.4' },
29
- { file: './spec/fixtures/new_spec.rb:1', time: 0 },
30
- ]
31
- end
32
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#get' do
6
- subject(:splitter) { described_class.new }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- context 'when wildcard pattern is given' do
11
- before do
12
- redis.set 'rspeed_1', { files: [[1, '1_spec.rb'], [2, '2_spec.rb']], number: 0, total: 3 }.to_json
13
- redis.set 'rspeed_2', { files: [[3, '3_spec.rb']], number: 1, total: 3 }.to_json
14
- end
15
-
16
- it 'returns all values' do
17
- expect(splitter.get('rspeed_*')).to eq [
18
- {
19
- 'files' => [[1, '1_spec.rb'], [2, '2_spec.rb']],
20
- 'number' => 0,
21
- 'total' => 3
22
- },
23
-
24
- {
25
- 'files' => [[3, '3_spec.rb']],
26
- 'number' => 1,
27
- 'total' => 3
28
- }
29
- ]
30
- end
31
- end
32
-
33
- context 'when normal pattern is given' do
34
- before do
35
- redis.set 'pattern', { files: [[1, '1_spec.rb'], [2, '2_spec.rb']], number: 0, total: 3 }.to_json
36
- end
37
-
38
- it 'returns all values from that key' do
39
- expect(splitter.get('pattern')).to eq [
40
- {
41
- 'files' => [[1, '1_spec.rb'], [2, '2_spec.rb']],
42
- 'number' => 0,
43
- 'total' => 3
44
- }
45
- ]
46
- end
47
- end
48
-
49
- context 'when pattern is rspeed' do
50
- before do
51
- redis.lpush 'rspeed', { file: '1_spec.rb', time: 1 }.to_json
52
- redis.lpush 'rspeed', { file: '2_spec.rb', time: 2 }.to_json
53
- end
54
-
55
- it 'executes the right fetch method' do
56
- expect(splitter.get('rspeed')).to eq [
57
- '{"file":"2_spec.rb","time":2}',
58
- '{"file":"1_spec.rb","time":1}'
59
- ]
60
- end
61
- end
62
-
63
- context 'when pattern is rspeed_tmp' do
64
- before do
65
- redis.lpush 'rspeed_tmp', { file: '1_spec.rb', time: 1 }.to_json
66
- redis.lpush 'rspeed_tmp', { file: '2_spec.rb', time: 2 }.to_json
67
- end
68
-
69
- it 'executes the right fetch method' do
70
- expect(splitter.get('rspeed_tmp')).to eq [
71
- '{"file":"2_spec.rb","time":2}',
72
- '{"file":"1_spec.rb","time":1}'
73
- ]
74
- end
75
- end
76
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '.keys' do
6
- subject(:splitter) { described_class.new }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- context 'with default config' do
11
- before do
12
- redis.set 'rspeed_1', 'value_1'
13
- redis.set 'rspeed_2', 'value_2'
14
- redis.set 'rspeed_3', 'value_3'
15
- end
16
-
17
- it 'shows keys' do
18
- expect(splitter.keys).to eq %w[rspeed_1 rspeed_2 rspeed_3]
19
- end
20
- end
21
-
22
- context 'with custom key' do
23
- before do
24
- redis.set 'custom_key_1', 'value_1'
25
- redis.set 'custom_key_2', 'value_2'
26
- redis.set 'custom_key_3', 'value_3'
27
- end
28
-
29
- it 'shows keys' do
30
- expect(splitter.keys('custom_key_*')).to eq %w[custom_key_1 custom_key_2 custom_key_3]
31
- end
32
- end
33
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '.last_pipe?' do
6
- subject(:splitter) { described_class.new }
7
-
8
- before { allow(splitter).to receive(:pipes).and_return 3 }
9
-
10
- context 'when pipe env is equal pipes env' do
11
- before { allow(splitter).to receive(:pipe).and_return 3 }
12
-
13
- it { expect(splitter.last_pipe?).to eq true }
14
- end
15
-
16
- context 'when pipe env not equal pipes env' do
17
- before { allow(splitter).to receive(:pipe).and_return 2 }
18
-
19
- it { expect(splitter.last_pipe?).to eq false }
20
- end
21
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#pipe' do
6
- subject(:splitter) { described_class.new }
7
-
8
- context 'when pipe env is given' do
9
- before { ENV['RSPEED_PIPE'] = '2' }
10
-
11
- it 'returns the number of the current pipe' do
12
- expect(splitter.pipe).to eq 2
13
- end
14
- end
15
-
16
- context 'when pipe env is not given' do
17
- it 'returns 1' do
18
- expect(splitter.pipe).to eq 1
19
- end
20
- end
21
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#pipes' do
6
- subject(:splitter) { described_class.new }
7
-
8
- context 'when has no result' do
9
- before { allow(splitter).to receive(:result?).and_return(false) }
10
-
11
- it 'the number of pipes is adjusted to one' do
12
- expect(splitter.pipes).to eq 1
13
- end
14
- end
15
-
16
- context 'when has result' do
17
- before do
18
- allow(splitter).to receive(:result?).and_return(true)
19
-
20
- ENV['RSPEED_PIPES'] = '2'
21
- end
22
-
23
- it 'is used the given value on env' do
24
- expect(splitter.pipes).to eq 2
25
- end
26
- end
27
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#rename' do
6
- subject(:splitter) { described_class.new }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- before { redis.lpush 'rspeed_tmp', { file: '1_spec.rb', time: 1.0 }.to_json }
11
-
12
- it 'renames the key' do
13
- splitter.rename
14
-
15
- expect(redis.lrange('rspeed_tmp', 0, -1)).to eq []
16
- expect(redis.lrange('rspeed', 0, -1)).to eq ['{"file":"1_spec.rb","time":1.0}']
17
- end
18
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#result?' do
6
- subject(:splitter) { described_class.new }
7
-
8
- context 'when has no key rspeed on redis' do
9
- it { expect(splitter.result?).to eq false }
10
- end
11
-
12
- context 'when has no key rspeed on redis' do
13
- let!(:redis) { redis_object }
14
-
15
- before { redis.set 'rspeed', { files: [[1, '1_spec.rb']], number: 0, total: 1 }.to_json }
16
-
17
- it { expect(splitter.result?).to eq true }
18
- end
19
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '.save' do
6
- subject(:splitter) { described_class.new }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- before do
11
- allow(splitter).to receive(:pipes).and_return(3)
12
-
13
- allow(splitter).to receive(:diff).and_return([
14
- { file: "./spec/0_2_spec.rb", time: '0.2' },
15
- { file: "./spec/0_3_spec.rb", time: '0.3' },
16
- { file: "./spec/0_4_spec.rb", time: '0.4' },
17
- { file: "./spec/0_7_spec.rb", time: '0.7' },
18
- { file: "./spec/1_1_spec.rb", time: '1.1' },
19
- { file: "./spec/1_5_spec.rb", time: '1.5' },
20
- { file: "./spec/2_0_spec.rb", time: '2.0' },
21
- ])
22
- end
23
-
24
- it 'saves the data on redis' do
25
- splitter.save
26
-
27
- expect(redis.keys('*')).to eq %w[rspeed_1 rspeed_2 rspeed_3]
28
-
29
- expect(JSON.parse(redis.get('rspeed_1'), symbolize_names: true)).to eq(
30
- files: [{ file: './spec/2_0_spec.rb', time: 2.0 }],
31
- number: 1,
32
- total: 2.0
33
- )
34
-
35
- expect(JSON.parse(redis.get('rspeed_2'), symbolize_names: true)).to eq(
36
- files: [
37
- { file: './spec/1_5_spec.rb', time: 1.5 },
38
- { file: './spec/0_4_spec.rb', time: 0.4 },
39
- { file: './spec/0_2_spec.rb', time: 0.2 }
40
- ],
41
-
42
- number: 2,
43
- total: 1.5 + 0.4 + 0.2
44
- )
45
-
46
- expect(JSON.parse(redis.get('rspeed_3'), symbolize_names: true)).to eq(
47
- files: [
48
- { file: './spec/1_1_spec.rb', time: 1.1 },
49
- { file: './spec/0_7_spec.rb', time: 0.7 },
50
- { file: './spec/0_3_spec.rb', time: 0.3 }
51
- ],
52
-
53
- number: 3,
54
- total: 1.1 + 0.7 + 0.3
55
- )
56
- end
57
- end
data/spec/rails_helper.rb DELETED
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ENV['RAILS_ENV'] ||= 'test'
4
-
5
- require 'fakeredis/rspec'
6
- require 'json'
7
- require 'pry-byebug'
8
- require 'rspec'
9
- require 'rspeed'
10
-
11
- RSpec.configure do |config|
12
- config.after do
13
- ENV.delete('RSPEED_PIPE')
14
- ENV.delete('RSPEED_PIPES')
15
- end
16
-
17
- config.disable_monkey_patching!
18
-
19
- config.order = :random
20
- config.profile_examples = 10
21
- end
22
-
23
- def delete_file(file_path = 'rspeed.csv')
24
- File.delete(file_path) if File.exist?(file_path)
25
- end
26
-
27
- def truncate_file(file_path = 'rspeed.csv')
28
- File.open(file_path, 'w') { |file| file.truncate(0) }
29
- end
30
-
31
- def populate_csv_file
32
- data = [
33
- '2.0,./spec/2_0_spec.rb',
34
- '1.5,./spec/1_5_spec.rb',
35
- '1.1,./spec/1_1_spec.rb',
36
- '0.7,./spec/0_7_spec.rb',
37
- '0.4,./spec/0_4_spec.rb',
38
- '0.3,./spec/0_3_spec.rb',
39
- '0.2,./spec/0_2_spec.rb'
40
- ].join("\n")
41
-
42
- File.open('rspeed.csv', 'a') { |file| file.write(data) }
43
- end
44
-
45
- def redis_object
46
- @redis_object ||= Redis.new(db: ENV['RSPEED_DB'], host: ENV['RSPEED_HOST'])
47
- end