rspec-hive 0.4.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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