rspec-hive 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +0 -1
  3. data/.rubocop.yml +13 -1
  4. data/.rubocop_u2i.yml +9 -1
  5. data/.travis.yml +19 -0
  6. data/Guardfile +12 -1
  7. data/README.md +3 -1
  8. data/Rakefile +11 -2
  9. data/examples/{query.rb → lib/query.rb} +2 -5
  10. data/examples/{hive_tests_config.yml.example → rspec-hive.yml.example} +0 -0
  11. data/examples/spec/query_spec.rb +103 -0
  12. data/examples/spec/spec_helper.rb +22 -0
  13. data/lib/rspec/hive.rb +7 -2
  14. data/lib/rspec/hive/connection_delegator.rb +17 -5
  15. data/lib/rspec/hive/connector.rb +0 -1
  16. data/lib/rspec/hive/exponential_backoff.rb +15 -0
  17. data/lib/rspec/hive/matchers.rb +29 -0
  18. data/lib/rspec/hive/query_builder.rb +83 -0
  19. data/lib/rspec/hive/query_builder/null_strategy.rb +11 -0
  20. data/lib/rspec/hive/query_builder/row_transformer.rb +63 -0
  21. data/lib/rspec/hive/query_builder/type_faker.rb +36 -0
  22. data/lib/rspec/hive/query_builder/value_by_type_strategy.rb +13 -0
  23. data/lib/rspec/hive/query_builder_helper.rb +24 -0
  24. data/lib/rspec/{rake_tasks → hive}/railtie.rb +2 -2
  25. data/lib/rspec/{rake_tasks → hive/rake_tasks}/docker.rake +0 -0
  26. data/lib/rspec/hive/version.rb +1 -1
  27. data/lib/rspec/hive/with_hive_connection.rb +16 -10
  28. data/rspec-hive.gemspec +6 -4
  29. data/spec/.rubocop.yml +4 -0
  30. data/spec/lib/rspec/hive/configuration_spec.rb +9 -6
  31. data/spec/lib/rspec/hive/connection_delegator_spec.rb +1 -1
  32. data/spec/lib/rspec/hive/connector_spec.rb +1 -1
  33. data/spec/lib/rspec/hive/db_name_spec.rb +1 -1
  34. data/spec/lib/rspec/hive/matchers_spec.rb +94 -0
  35. data/spec/lib/rspec/hive/query_builder/row_transformer_spec.rb +37 -0
  36. data/spec/lib/rspec/hive/query_builder_spec.rb +143 -0
  37. data/spec/lib/rspec/hive_spec.rb +1 -1
  38. data/spec/spec_helper.rb +2 -62
  39. metadata +68 -24
  40. data/examples/config_helper.rb +0 -1
  41. data/examples/query_spec.rb +0 -41
@@ -0,0 +1,143 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe RSpec::Hive::QueryBuilder do
4
+ let(:connection) { instance_double(RBHive::TCLIConnection) }
5
+ let(:connection_delegator) { RSpec::Hive::ConnectionDelegator.new(connection, {}) }
6
+ let(:query_builder) { described_class.new(schema, connection_delegator) }
7
+
8
+ describe '#execute' do
9
+ subject { builder.execute }
10
+
11
+ context 'when has no partition' do
12
+ before do
13
+ expect(connection_delegator).to receive(:load_into_table).with(schema, expected_rows)
14
+ end
15
+
16
+ let(:partition) { nil }
17
+ let(:schema) do
18
+ RBHive::TableSchema.new('table_name', nil) do
19
+ column :col1, :string
20
+ column :col2, :int
21
+ end
22
+ end
23
+
24
+ context 'when no data stubbing' do
25
+ context 'when single row is passed' do
26
+ let(:builder) { query_builder.insert(row1) }
27
+ let(:row1) { ['col1', 343] }
28
+ let(:expected_rows) { [row1] }
29
+
30
+ it 'loads single row' do
31
+ subject
32
+ end
33
+ end
34
+
35
+ context 'when single incomplete row is passed' do
36
+ let(:builder) { query_builder.insert(row1) }
37
+ let(:row1) { ['col1'] }
38
+ let(:expected_rows) { [row1 << '\N'] }
39
+
40
+ it 'fills missing columns with \N' do
41
+ subject
42
+ end
43
+ end
44
+
45
+ context 'when multiple rows are passed' do
46
+ let(:builder) { query_builder.insert(row1, row2) }
47
+ let(:row1) { ['col1', 343] }
48
+ let(:row2) { ['col1', 123] }
49
+ let(:expected_rows) { [row1, row2] }
50
+
51
+ it 'loads multiple rows' do
52
+ subject
53
+ end
54
+ end
55
+
56
+ context 'when row with single column is passed' do
57
+ let(:builder) { query_builder.insert(row1) }
58
+ let(:row1) { {col1: 'col1'} }
59
+ let(:expected_rows) { [['col1', '\N']] }
60
+
61
+ it 'fills missing columns with \N' do
62
+ subject
63
+ end
64
+ end
65
+
66
+ context 'when multiple rows with single columns are passed' do
67
+ let(:builder) { query_builder.insert(row1, row2) }
68
+ let(:row1) { {col1: 'col1'} }
69
+ let(:row2) { {col2: 345} }
70
+ let(:expected_rows) { [['col1', '\N'], ['\N', 345]] }
71
+
72
+ it 'fills missing columns with \N for each row' do
73
+ subject
74
+ end
75
+ end
76
+ end
77
+
78
+ context 'when has data stubbing' do
79
+ context 'when single row is passed' do
80
+ let(:builder) { query_builder.with_stubbing.insert(row1) }
81
+ let(:row1) { ['col1', 343] }
82
+ let(:expected_rows) { [row1] }
83
+
84
+ it 'loads single row' do
85
+ subject
86
+ end
87
+ end
88
+
89
+ context 'when single incomplete row is passed' do
90
+ let(:builder) { query_builder.insert(row1) }
91
+ let(:row1) { ['col1'] }
92
+ let(:expected_rows) { [row1 << a_string_matching(/\d+/)] }
93
+
94
+ it 'fills missing column with data matching column type' do
95
+ subject
96
+ end
97
+ end
98
+
99
+ context 'when multiple rows are passed' do
100
+ let(:builder) { query_builder.with_stubbing.insert(row1, row2) }
101
+ let(:row1) { ['col1', 343] }
102
+ let(:row2) { ['col1', 123] }
103
+ let(:expected_rows) { [row1, row2] }
104
+
105
+ it 'loads multiple rows' do
106
+ subject
107
+ end
108
+ end
109
+
110
+ context 'when row with single column is passed' do
111
+ let(:builder) { query_builder.with_stubbing.insert(row1) }
112
+ let(:row1) { {col1: 'col1'} }
113
+ let(:expected_rows) { [['col1', a_string_matching(/\d+/)]] }
114
+
115
+ it 'fills missing columns with data matching column type' do
116
+ subject
117
+ end
118
+ end
119
+
120
+ context 'when multiple rows with single columns are passed' do
121
+ let(:builder) { query_builder.with_stubbing.insert(row1, row2) }
122
+ let(:row1) { {col1: 'col1'} }
123
+ let(:row2) { {col2: 345} }
124
+ let(:expected_rows) { [['col1', a_string_matching(/\d+/)], [a_string_matching(/\S+/), 345]] }
125
+
126
+ it 'fills missing columns with data matching column type for each row' do
127
+ subject
128
+ end
129
+ end
130
+ end
131
+ end
132
+
133
+ context 'when has no partition' do
134
+ let(:schema) do
135
+ RBHive::TableSchema.new('table_name', nil) do
136
+ column :col1, :string
137
+ column :col2, :integer
138
+ partition :dt, :int
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe RSpec::Hive do
3
+ RSpec.describe RSpec::Hive do
4
4
  describe 'configure' do
5
5
  let(:expected_host) { '127.0.0.1' }
6
6
  let(:expected_port) { '10000' }
data/spec/spec_helper.rb CHANGED
@@ -20,6 +20,8 @@
20
20
  if ENV['COVERAGE']
21
21
  require 'codeclimate-test-reporter'
22
22
  CodeClimate::TestReporter.start
23
+ require 'simplecov'
24
+ SimpleCov.start
23
25
  end
24
26
 
25
27
  RSpec.configure do |config|
@@ -29,76 +31,14 @@ RSpec.configure do |config|
29
31
  # assertion/expectation library such as wrong or the stdlib/minitest
30
32
  # assertions if you prefer.
31
33
  config.expect_with :rspec do |expectations|
32
- # This option will default to `true` in RSpec 4. It makes the `description`
33
- # and `failure_message` of custom matchers include text for helper methods
34
- # defined using `chain`, e.g.:
35
- # be_bigger_than(2).and_smaller_than(4).description
36
- # # => "be bigger than 2 and smaller than 4"
37
- # ...rather than:
38
- # # => "be bigger than 2"
39
34
  expectations.include_chain_clauses_in_custom_matcher_descriptions = true
40
35
  end
41
36
 
42
- # rspec-mocks config goes here. You can use an alternate test double
43
- # library (such as bogus or mocha) by changing the `mock_with` option here.
44
37
  config.mock_with :rspec do |mocks|
45
- # Prevents you from mocking or stubbing a method that does not exist on
46
- # a real object. This is generally recommended, and will default to
47
- # `true` in RSpec 4.
48
38
  mocks.verify_partial_doubles = true
49
39
  end
50
40
 
51
- # The settings below are suggested to provide a good initial experience
52
- # with RSpec, but feel free to customize to your heart's content.
53
- =begin
54
- # These two settings work together to allow you to limit a spec run
55
- # to individual examples or groups you care about by tagging them with
56
- # `:focus` metadata. When nothing is tagged with `:focus`, all examples
57
- # get run.
58
- config.filter_run :focus
59
- config.run_all_when_everything_filtered = true
60
-
61
- # Allows RSpec to persist some state between runs in order to support
62
- # the `--only-failures` and `--next-failure` CLI options. We recommend
63
- # you configure your source control system to ignore this file.
64
- config.example_status_persistence_file_path = "spec/examples.txt"
65
-
66
- # Limits the available syntax to the non-monkey patched syntax that is
67
- # recommended. For more details, see:
68
- # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
69
- # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
70
- # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
71
41
  config.disable_monkey_patching!
72
-
73
- # This setting enables warnings. It's recommended, but in some cases may
74
- # be too noisy due to issues in dependencies.
75
- config.warnings = true
76
-
77
- # Many RSpec users commonly either run the entire suite or an individual
78
- # file, and it's useful to allow more verbose output when running an
79
- # individual spec file.
80
- if config.files_to_run.one?
81
- # Use the documentation formatter for detailed output,
82
- # unless a formatter has already been configured
83
- # (e.g. via a command-line flag).
84
- config.default_formatter = 'doc'
85
- end
86
-
87
- # Print the 10 slowest examples and example groups at the
88
- # end of the spec run, to help surface which specs are running
89
- # particularly slow.
90
- config.profile_examples = 10
91
-
92
- # Run specs in random order to surface order dependencies. If you find an
93
- # order dependency and want to debug it, you can fix the order by providing
94
- # the seed, which is printed after each run.
95
- # --seed 1234
96
42
  config.order = :random
97
-
98
- # Seed global randomization in this process using the `--seed` CLI option.
99
- # Setting this allows you to use `--seed` to deterministically reproduce
100
- # test failures related to randomization by passing the same `--seed` value
101
- # as the one that triggered the failure.
102
43
  Kernel.srand config.seed
103
- =end
104
44
  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.1.0
4
+ version: 0.2.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-04-05 00:00:00.000000000 Z
12
+ date: 2016-05-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -40,19 +40,33 @@ dependencies:
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0.7'
42
42
  - !ruby/object:Gem::Dependency
43
- name: bundler
43
+ name: faker
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '1.7'
49
- type: :development
48
+ version: '1.6'
49
+ type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '1.7'
55
+ version: '1.6'
56
+ - !ruby/object:Gem::Dependency
57
+ name: retryable
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 2.0.3
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 2.0.3
56
70
  - !ruby/object:Gem::Dependency
57
71
  name: rspec
58
72
  requirement: !ruby/object:Gem::Requirement
@@ -60,7 +74,7 @@ dependencies:
60
74
  - - "~>"
61
75
  - !ruby/object:Gem::Version
62
76
  version: '3.4'
63
- type: :development
77
+ type: :runtime
64
78
  prerelease: false
65
79
  version_requirements: !ruby/object:Gem::Requirement
66
80
  requirements:
@@ -68,61 +82,75 @@ dependencies:
68
82
  - !ruby/object:Gem::Version
69
83
  version: '3.4'
70
84
  - !ruby/object:Gem::Dependency
71
- name: rspec-its
85
+ name: rbhive-u2i
72
86
  requirement: !ruby/object:Gem::Requirement
73
87
  requirements:
74
88
  - - "~>"
75
89
  - !ruby/object:Gem::Version
76
- version: '1.2'
90
+ version: 1.0.0
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 1.0.0
98
+ - !ruby/object:Gem::Dependency
99
+ name: bundler
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '1.7'
77
105
  type: :development
78
106
  prerelease: false
79
107
  version_requirements: !ruby/object:Gem::Requirement
80
108
  requirements:
81
109
  - - "~>"
82
110
  - !ruby/object:Gem::Version
83
- version: '1.2'
111
+ version: '1.7'
84
112
  - !ruby/object:Gem::Dependency
85
- name: rbhive
113
+ name: rspec-its
86
114
  requirement: !ruby/object:Gem::Requirement
87
115
  requirements:
88
116
  - - "~>"
89
117
  - !ruby/object:Gem::Version
90
- version: 0.6.0
118
+ version: '1.2'
91
119
  type: :development
92
120
  prerelease: false
93
121
  version_requirements: !ruby/object:Gem::Requirement
94
122
  requirements:
95
123
  - - "~>"
96
124
  - !ruby/object:Gem::Version
97
- version: 0.6.0
125
+ version: '1.2'
98
126
  - !ruby/object:Gem::Dependency
99
127
  name: rubocop
100
128
  requirement: !ruby/object:Gem::Requirement
101
129
  requirements:
102
130
  - - "~>"
103
131
  - !ruby/object:Gem::Version
104
- version: '0.34'
132
+ version: '0.39'
105
133
  type: :development
106
134
  prerelease: false
107
135
  version_requirements: !ruby/object:Gem::Requirement
108
136
  requirements:
109
137
  - - "~>"
110
138
  - !ruby/object:Gem::Version
111
- version: '0.34'
139
+ version: '0.39'
112
140
  - !ruby/object:Gem::Dependency
113
141
  name: rubocop-rspec
114
142
  requirement: !ruby/object:Gem::Requirement
115
143
  requirements:
116
144
  - - "~>"
117
145
  - !ruby/object:Gem::Version
118
- version: '1.3'
146
+ version: '1.4'
119
147
  type: :development
120
148
  prerelease: false
121
149
  version_requirements: !ruby/object:Gem::Requirement
122
150
  requirements:
123
151
  - - "~>"
124
152
  - !ruby/object:Gem::Version
125
- version: '1.3'
153
+ version: '1.4'
126
154
  - !ruby/object:Gem::Dependency
127
155
  name: guard
128
156
  requirement: !ruby/object:Gem::Requirement
@@ -223,6 +251,7 @@ files:
223
251
  - ".rubocop.yml"
224
252
  - ".rubocop_u2i.yml"
225
253
  - ".ruby-version"
254
+ - ".travis.yml"
226
255
  - Gemfile
227
256
  - Gemfile.lock
228
257
  - Guardfile
@@ -230,24 +259,36 @@ files:
230
259
  - README.md
231
260
  - Rakefile
232
261
  - docker/Dockerfile
233
- - examples/config_helper.rb
234
- - examples/hive_tests_config.yml.example
235
- - examples/query.rb
236
- - examples/query_spec.rb
262
+ - examples/lib/query.rb
263
+ - examples/rspec-hive.yml.example
264
+ - examples/spec/query_spec.rb
265
+ - examples/spec/spec_helper.rb
237
266
  - lib/rspec/hive.rb
238
267
  - lib/rspec/hive/configuration.rb
239
268
  - lib/rspec/hive/connection_delegator.rb
240
269
  - lib/rspec/hive/connector.rb
241
270
  - lib/rspec/hive/db_name.rb
271
+ - lib/rspec/hive/exponential_backoff.rb
272
+ - lib/rspec/hive/matchers.rb
273
+ - lib/rspec/hive/query_builder.rb
274
+ - lib/rspec/hive/query_builder/null_strategy.rb
275
+ - lib/rspec/hive/query_builder/row_transformer.rb
276
+ - lib/rspec/hive/query_builder/type_faker.rb
277
+ - lib/rspec/hive/query_builder/value_by_type_strategy.rb
278
+ - lib/rspec/hive/query_builder_helper.rb
279
+ - lib/rspec/hive/railtie.rb
280
+ - lib/rspec/hive/rake_tasks/docker.rake
242
281
  - lib/rspec/hive/version.rb
243
282
  - lib/rspec/hive/with_hive_connection.rb
244
- - lib/rspec/rake_tasks/docker.rake
245
- - lib/rspec/rake_tasks/railtie.rb
246
283
  - rspec-hive.gemspec
284
+ - spec/.rubocop.yml
247
285
  - spec/lib/rspec/hive/configuration_spec.rb
248
286
  - spec/lib/rspec/hive/connection_delegator_spec.rb
249
287
  - spec/lib/rspec/hive/connector_spec.rb
250
288
  - spec/lib/rspec/hive/db_name_spec.rb
289
+ - spec/lib/rspec/hive/matchers_spec.rb
290
+ - spec/lib/rspec/hive/query_builder/row_transformer_spec.rb
291
+ - spec/lib/rspec/hive/query_builder_spec.rb
251
292
  - spec/lib/rspec/hive_spec.rb
252
293
  - spec/spec_helper.rb
253
294
  homepage: https://github.com/u2i/ns-rspec-hive
@@ -275,10 +316,13 @@ signing_key:
275
316
  specification_version: 4
276
317
  summary: RSpec addition to test hive queries
277
318
  test_files:
319
+ - spec/.rubocop.yml
278
320
  - spec/lib/rspec/hive/configuration_spec.rb
279
321
  - spec/lib/rspec/hive/connection_delegator_spec.rb
280
322
  - spec/lib/rspec/hive/connector_spec.rb
281
323
  - spec/lib/rspec/hive/db_name_spec.rb
324
+ - spec/lib/rspec/hive/matchers_spec.rb
325
+ - spec/lib/rspec/hive/query_builder/row_transformer_spec.rb
326
+ - spec/lib/rspec/hive/query_builder_spec.rb
282
327
  - spec/lib/rspec/hive_spec.rb
283
328
  - spec/spec_helper.rb
284
- has_rdoc: