rspec-hive 0.4.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +39 -5
  4. data/.rubocop_todo.yml +40 -0
  5. data/.ruby-version +1 -1
  6. data/.travis.yml +4 -3
  7. data/Gemfile +18 -0
  8. data/Guardfile +10 -6
  9. data/README.md +15 -0
  10. data/Rakefile +4 -2
  11. data/docker/Dockerfile +38 -47
  12. data/docker/hive-site.xml +28 -0
  13. data/examples/lib/query.rb +2 -0
  14. data/examples/rspec-hive.yml.example +7 -1
  15. data/examples/spec/query_spec.rb +2 -0
  16. data/examples/spec/spec_helper.rb +2 -0
  17. data/lib/rspec/hive.rb +2 -0
  18. data/lib/rspec/hive/configuration.rb +14 -33
  19. data/lib/rspec/hive/connection_delegator.rb +19 -13
  20. data/lib/rspec/hive/connector.rb +3 -2
  21. data/lib/rspec/hive/db_name.rb +2 -0
  22. data/lib/rspec/hive/exponential_backoff.rb +2 -0
  23. data/lib/rspec/hive/matchers.rb +2 -0
  24. data/lib/rspec/hive/query_builder.rb +2 -0
  25. data/lib/rspec/hive/query_builder/null_strategy.rb +2 -0
  26. data/lib/rspec/hive/query_builder/row_transformer.rb +4 -2
  27. data/lib/rspec/hive/query_builder/type_faker.rb +2 -0
  28. data/lib/rspec/hive/query_builder/value_by_type_strategy.rb +2 -0
  29. data/lib/rspec/hive/query_builder_helper.rb +2 -0
  30. data/lib/rspec/hive/railtie.rb +2 -0
  31. data/lib/rspec/hive/rake_tasks/docker.rake +27 -14
  32. data/lib/rspec/hive/version.rb +3 -1
  33. data/lib/rspec/hive/with_hive_connection.rb +2 -0
  34. data/rspec-hive.gemspec +7 -16
  35. data/spec/lib/rspec/hive/configuration_spec.rb +29 -33
  36. data/spec/lib/rspec/hive/connection_delegator_spec.rb +58 -138
  37. data/spec/lib/rspec/hive/connector_spec.rb +33 -38
  38. data/spec/lib/rspec/hive/db_name_spec.rb +4 -2
  39. data/spec/lib/rspec/hive/matchers_spec.rb +2 -0
  40. data/spec/lib/rspec/hive/query_builder/row_transformer_spec.rb +6 -4
  41. data/spec/lib/rspec/hive/query_builder_helper_spec.rb +8 -6
  42. data/spec/lib/rspec/hive/query_builder_spec.rb +15 -17
  43. data/spec/lib/rspec/hive_spec.rb +15 -22
  44. metadata +13 -154
  45. data/.rubocop_u2i.yml +0 -63
  46. data/spec/.rubocop.yml +0 -4
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe RSpec::Hive::DbName do
@@ -5,8 +7,8 @@ RSpec.describe RSpec::Hive::DbName do
5
7
  subject { described_class.random_name }
6
8
 
7
9
  before do
8
- allow(described_class).to receive(:timestamp) { 'timestamp' }
9
- allow(described_class).to receive(:random_key) { 'randomKey' }
10
+ allow(described_class).to receive(:timestamp).and_return('timestamp')
11
+ allow(described_class).to receive(:random_key).and_return('randomKey')
10
12
  end
11
13
 
12
14
  it { is_expected.to eq('timestamp_randomKey') }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'rspec/hive/query_builder_helper'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe RSpec::Hive::QueryBuilder::RowTransformer do
@@ -13,7 +15,7 @@ RSpec.describe RSpec::Hive::QueryBuilder::RowTransformer do
13
15
  let(:missing_column_strategy) { double }
14
16
 
15
17
  describe '#transform' do
16
- subject { transformer.transform(row) }
18
+ subject(:transformed_rows) { transformer.transform(row) }
17
19
 
18
20
  let(:row) { {col1: real_value} }
19
21
  let(:real_value) { 'col1' }
@@ -23,15 +25,15 @@ RSpec.describe RSpec::Hive::QueryBuilder::RowTransformer do
23
25
  before { allow(missing_column_strategy).to receive(:missing).with(column).and_return(fake_value) }
24
26
 
25
27
  it 'fills missing fields' do
26
- expect(subject[1]).to eq(fake_value)
28
+ expect(transformed_rows[1]).to eq(fake_value)
27
29
  end
28
30
 
29
31
  it 'uses defined fields' do
30
- expect(subject[0]).to eq(real_value)
32
+ expect(transformed_rows[0]).to eq(real_value)
31
33
  end
32
34
 
33
35
  it 'returns valid Rows' do
34
- expect(subject).to eq(expected_row)
36
+ is_expected.to eq(expected_row)
35
37
  end
36
38
  end
37
39
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe RSpec::Hive::QueryBuilderHelper do
@@ -17,20 +19,22 @@ RSpec.describe RSpec::Hive::QueryBuilderHelper do
17
19
  end
18
20
 
19
21
  context 'when RBhive connection has been given' do
22
+ subject { dummy_class.into_hive(schema) }
23
+
20
24
  let(:dummy_class) { double(connection: connection) }
21
25
 
22
26
  before do
23
27
  allow(connection).to receive(:is_a?).with(RBHive::TCLIConnection).and_return(true)
24
28
  end
25
29
 
26
- subject { dummy_class.into_hive(schema) }
27
-
28
30
  it 'returns a query_builder' do
29
- expect(subject).to be_a_kind_of(RSpec::Hive::QueryBuilder)
31
+ is_expected.to be_a_kind_of(RSpec::Hive::QueryBuilder)
30
32
  end
31
33
  end
32
34
 
33
35
  context 'when ConnectionDelegator has been given' do
36
+ subject { dummy_class.into_hive(schema) }
37
+
34
38
  let(:dummy_class) { double(connection: connection) }
35
39
 
36
40
  before do
@@ -38,10 +42,8 @@ RSpec.describe RSpec::Hive::QueryBuilderHelper do
38
42
  allow(connection).to receive(:is_a?).with(RSpec::Hive::ConnectionDelegator).and_return(true)
39
43
  end
40
44
 
41
- subject { dummy_class.into_hive(schema) }
42
-
43
45
  it 'returns a query_builder' do
44
- expect(subject).to be_a_kind_of(RSpec::Hive::QueryBuilder)
46
+ is_expected.to be_a_kind_of(RSpec::Hive::QueryBuilder)
45
47
  end
46
48
  end
47
49
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe RSpec::Hive::QueryBuilder do
@@ -7,7 +9,7 @@ RSpec.describe RSpec::Hive::QueryBuilder do
7
9
  let(:schema) { double }
8
10
 
9
11
  describe '#execute' do
10
- subject { builder.execute }
12
+ subject(:execute) { builder.execute }
11
13
 
12
14
  context 'when has no partition' do
13
15
  before do
@@ -28,7 +30,7 @@ RSpec.describe RSpec::Hive::QueryBuilder do
28
30
  let(:expected_rows) { [row1] }
29
31
 
30
32
  it 'loads single row' do
31
- subject
33
+ execute
32
34
  end
33
35
  end
34
36
 
@@ -38,7 +40,7 @@ RSpec.describe RSpec::Hive::QueryBuilder do
38
40
  let(:expected_rows) { [row1 << '\N'] }
39
41
 
40
42
  it 'fills missing columns with \N' do
41
- subject
43
+ execute
42
44
  end
43
45
  end
44
46
 
@@ -49,7 +51,7 @@ RSpec.describe RSpec::Hive::QueryBuilder do
49
51
  let(:expected_rows) { [row1, row2] }
50
52
 
51
53
  it 'loads multiple rows' do
52
- subject
54
+ execute
53
55
  end
54
56
  end
55
57
 
@@ -59,7 +61,7 @@ RSpec.describe RSpec::Hive::QueryBuilder do
59
61
  let(:expected_rows) { [['col1', '\N']] }
60
62
 
61
63
  it 'fills missing columns with \N' do
62
- subject
64
+ execute
63
65
  end
64
66
  end
65
67
 
@@ -70,7 +72,7 @@ RSpec.describe RSpec::Hive::QueryBuilder do
70
72
  let(:expected_rows) { [['col1', '\N'], ['\N', 345]] }
71
73
 
72
74
  it 'fills missing columns with \N for each row' do
73
- subject
75
+ execute
74
76
  end
75
77
  end
76
78
  end
@@ -82,7 +84,7 @@ RSpec.describe RSpec::Hive::QueryBuilder do
82
84
  let(:expected_rows) { [row1] }
83
85
 
84
86
  it 'loads single row' do
85
- subject
87
+ execute
86
88
  end
87
89
  end
88
90
 
@@ -92,7 +94,7 @@ RSpec.describe RSpec::Hive::QueryBuilder do
92
94
  let(:expected_rows) { [row1 << a_string_matching(/\d+/)] }
93
95
 
94
96
  it 'fills missing column with data matching column type' do
95
- subject
97
+ execute
96
98
  end
97
99
  end
98
100
 
@@ -103,7 +105,7 @@ RSpec.describe RSpec::Hive::QueryBuilder do
103
105
  let(:expected_rows) { [row1, row2] }
104
106
 
105
107
  it 'loads multiple rows' do
106
- subject
108
+ execute
107
109
  end
108
110
  end
109
111
 
@@ -113,7 +115,7 @@ RSpec.describe RSpec::Hive::QueryBuilder do
113
115
  let(:expected_rows) { [['col1', a_string_matching(/\d+/)]] }
114
116
 
115
117
  it 'fills missing columns with data matching column type' do
116
- subject
118
+ execute
117
119
  end
118
120
  end
119
121
 
@@ -124,7 +126,7 @@ RSpec.describe RSpec::Hive::QueryBuilder do
124
126
  let(:expected_rows) { [['col1', a_string_matching(/\d+/)], [a_string_matching(/\S+/), 345]] }
125
127
 
126
128
  it 'fills missing columns with data matching column type for each row' do
127
- subject
129
+ execute
128
130
  end
129
131
  end
130
132
  end
@@ -139,11 +141,6 @@ RSpec.describe RSpec::Hive::QueryBuilder do
139
141
  end
140
142
  end
141
143
 
142
- before do
143
- expect(connection_delegator).
144
- to receive(:load_into_table).with(schema, expected_rows, partitions)
145
- end
146
-
147
144
  context 'when no data stubbing' do
148
145
  context 'when single row is passed' do
149
146
  let(:builder) { query_builder.insert(row1).partition(partitions) }
@@ -152,7 +149,8 @@ RSpec.describe RSpec::Hive::QueryBuilder do
152
149
  let(:expected_rows) { [row1] }
153
150
 
154
151
  it 'loads single row' do
155
- subject
152
+ expect(connection_delegator).to receive(:load_into_table).with(schema, expected_rows, partitions)
153
+ execute
156
154
  end
157
155
  end
158
156
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe RSpec::Hive do
@@ -10,15 +12,15 @@ RSpec.describe RSpec::Hive do
10
12
  describe '.configure' do
11
13
  let(:expected_host) { '127.0.0.1' }
12
14
  let(:expected_port) { '10000' }
13
- let(:expected_host_shared_directory_path) do
14
- '/Users/Shared/tmp/spec-files'
15
- end
15
+ let(:expected_host_shared_directory_path) { '/Users/Shared/tmp/spec-files' }
16
16
  let(:expected_docker_shared_directory_path) { '/tmp/spec-tmp-files' }
17
17
 
18
18
  context 'when file name is provided' do
19
+ subject(:configure) { described_class.configure(file_name) }
20
+
19
21
  let(:file_name) { 'test.yaml' }
20
22
  let(:configuration_mock) do
21
- double(
23
+ instance_double(
22
24
  described_class::Configuration,
23
25
  host: expected_host,
24
26
  port: expected_port,
@@ -27,21 +29,16 @@ RSpec.describe RSpec::Hive do
27
29
  )
28
30
  end
29
31
 
30
- before do
31
- expect(described_class).to receive(:new_configuration).
32
- with(file_name) { configuration_mock }
33
- end
34
-
35
- subject { described_class.configure(file_name) }
32
+ before { allow(RSpec::Hive::Configuration).to receive(:new).with(file_name) { configuration_mock } }
36
33
 
34
+ specify do
35
+ expect(described_class).to receive(:new_configuration).with(file_name) { configuration_mock }
36
+ configure
37
+ end
37
38
  its(:host) { is_expected.to eq(expected_host) }
38
39
  its(:port) { is_expected.to eq(expected_port) }
39
- its(:host_shared_directory_path) do
40
- is_expected.to eq(expected_host_shared_directory_path)
41
- end
42
- its(:docker_shared_directory_path) do
43
- is_expected.to eq(expected_docker_shared_directory_path)
44
- end
40
+ its(:host_shared_directory_path) { is_expected.to eq(expected_host_shared_directory_path) }
41
+ its(:docker_shared_directory_path) { is_expected.to eq(expected_docker_shared_directory_path) }
45
42
  end
46
43
 
47
44
  context 'when block is given' do
@@ -58,12 +55,8 @@ RSpec.describe RSpec::Hive do
58
55
 
59
56
  its(:host) { is_expected.to eq(expected_host) }
60
57
  its(:port) { is_expected.to eq(expected_port) }
61
- its(:host_shared_directory_path) do
62
- is_expected.to eq(expected_host_shared_directory_path)
63
- end
64
- its(:docker_shared_directory_path) do
65
- is_expected.to eq(expected_docker_shared_directory_path)
66
- end
58
+ its(:host_shared_directory_path) { is_expected.to eq(expected_host_shared_directory_path) }
59
+ its(:docker_shared_directory_path) { is_expected.to eq(expected_docker_shared_directory_path) }
67
60
  end
68
61
  end
69
62
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-hive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wojtek Mielczarek
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-11-15 00:00:00.000000000 Z
12
+ date: 2017-10-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -20,7 +20,7 @@ dependencies:
20
20
  version: '10.0'
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '12.0'
23
+ version: '13.0'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -30,21 +30,21 @@ dependencies:
30
30
  version: '10.0'
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '12.0'
33
+ version: '13.0'
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: colorize
36
36
  requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.7'
40
+ version: 0.8.0
41
41
  type: :runtime
42
42
  prerelease: false
43
43
  version_requirements: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.7'
47
+ version: 0.8.0
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: faker
50
50
  requirement: !ruby/object:Gem::Requirement
@@ -65,14 +65,14 @@ dependencies:
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 2.0.3
68
+ version: '2.0'
69
69
  type: :runtime
70
70
  prerelease: false
71
71
  version_requirements: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 2.0.3
75
+ version: '2.0'
76
76
  - !ruby/object:Gem::Dependency
77
77
  name: rspec
78
78
  requirement: !ruby/object:Gem::Requirement
@@ -93,154 +93,14 @@ dependencies:
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.0.0
96
+ version: '1.0'
97
97
  type: :runtime
98
98
  prerelease: false
99
99
  version_requirements: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.0.0
104
- - !ruby/object:Gem::Dependency
105
- name: bundler
106
- requirement: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1.7'
111
- type: :development
112
- prerelease: false
113
- version_requirements: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '1.7'
118
- - !ruby/object:Gem::Dependency
119
- name: rspec-its
120
- requirement: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '1.2'
125
- type: :development
126
- prerelease: false
127
- version_requirements: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '1.2'
132
- - !ruby/object:Gem::Dependency
133
- name: rubocop
134
- requirement: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '0.39'
139
- type: :development
140
- prerelease: false
141
- version_requirements: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '0.39'
146
- - !ruby/object:Gem::Dependency
147
- name: rubocop-rspec
148
- requirement: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '1.4'
153
- type: :development
154
- prerelease: false
155
- version_requirements: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: '1.4'
160
- - !ruby/object:Gem::Dependency
161
- name: guard
162
- requirement: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
165
- - !ruby/object:Gem::Version
166
- version: '2.6'
167
- type: :development
168
- prerelease: false
169
- version_requirements: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '2.6'
174
- - !ruby/object:Gem::Dependency
175
- name: guard-rspec
176
- requirement: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: '4.3'
181
- type: :development
182
- prerelease: false
183
- version_requirements: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: '4.3'
188
- - !ruby/object:Gem::Dependency
189
- name: guard-rubocop
190
- requirement: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: '1.2'
195
- type: :development
196
- prerelease: false
197
- version_requirements: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: '1.2'
202
- - !ruby/object:Gem::Dependency
203
- name: codeclimate-test-reporter
204
- requirement: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - "~>"
207
- - !ruby/object:Gem::Version
208
- version: '0.4'
209
- type: :development
210
- prerelease: false
211
- version_requirements: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - "~>"
214
- - !ruby/object:Gem::Version
215
- version: '0.4'
216
- - !ruby/object:Gem::Dependency
217
- name: pry
218
- requirement: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - ">="
221
- - !ruby/object:Gem::Version
222
- version: '0'
223
- type: :development
224
- prerelease: false
225
- version_requirements: !ruby/object:Gem::Requirement
226
- requirements:
227
- - - ">="
228
- - !ruby/object:Gem::Version
229
- version: '0'
230
- - !ruby/object:Gem::Dependency
231
- name: pry-byebug
232
- requirement: !ruby/object:Gem::Requirement
233
- requirements:
234
- - - ">="
235
- - !ruby/object:Gem::Version
236
- version: '0'
237
- type: :development
238
- prerelease: false
239
- version_requirements: !ruby/object:Gem::Requirement
240
- requirements:
241
- - - ">="
242
- - !ruby/object:Gem::Version
243
- version: '0'
103
+ version: '1.0'
244
104
  description: |-
245
105
  RSpecHive let you test your hive queries
246
106
  connecting to hive instance installed on docker
@@ -255,7 +115,7 @@ files:
255
115
  - ".gitignore"
256
116
  - ".rspec"
257
117
  - ".rubocop.yml"
258
- - ".rubocop_u2i.yml"
118
+ - ".rubocop_todo.yml"
259
119
  - ".ruby-version"
260
120
  - ".travis.yml"
261
121
  - Gemfile
@@ -265,6 +125,7 @@ files:
265
125
  - README.md
266
126
  - Rakefile
267
127
  - docker/Dockerfile
128
+ - docker/hive-site.xml
268
129
  - examples/lib/query.rb
269
130
  - examples/rspec-hive.yml.example
270
131
  - examples/spec/query_spec.rb
@@ -287,7 +148,6 @@ files:
287
148
  - lib/rspec/hive/version.rb
288
149
  - lib/rspec/hive/with_hive_connection.rb
289
150
  - rspec-hive.gemspec
290
- - spec/.rubocop.yml
291
151
  - spec/lib/rspec/hive/configuration_spec.rb
292
152
  - spec/lib/rspec/hive/connection_delegator_spec.rb
293
153
  - spec/lib/rspec/hive/connector_spec.rb
@@ -318,12 +178,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
318
178
  version: '0'
319
179
  requirements: []
320
180
  rubyforge_project:
321
- rubygems_version: 2.4.3
181
+ rubygems_version: 2.6.13
322
182
  signing_key:
323
183
  specification_version: 4
324
184
  summary: RSpec addition to test hive queries
325
185
  test_files:
326
- - spec/.rubocop.yml
327
186
  - spec/lib/rspec/hive/configuration_spec.rb
328
187
  - spec/lib/rspec/hive/connection_delegator_spec.rb
329
188
  - spec/lib/rspec/hive/connector_spec.rb