ibm_watson 0.9.2 → 0.10.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.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IBMWatson
4
- VERSION = "0.9.2"
4
+ VERSION = "0.10.0"
5
5
  end
@@ -124,33 +124,40 @@ module IBMWatson
124
124
  headers = {
125
125
  "Accept-Language" => accept_language
126
126
  }
127
+
127
128
  params = {
128
129
  "version" => @version
129
130
  }
131
+
132
+ form_data = {}
133
+
130
134
  unless images_file.nil?
131
- mime_type = images_file_content_type.nil? ? "application/octet-stream" : images_file_content_type
132
135
  unless images_file.instance_of?(StringIO) || images_file.instance_of?(File)
133
136
  images_file = images_file.respond_to?(:to_json) ? StringIO.new(images_file.to_json) : StringIO.new(images_file)
134
137
  end
135
- if images_filename
136
- images_file = images_file.instance_of?(StringIO) ? HTTP::FormData::File.new(images_file, content_type: mime_type, filename: images_filename) : HTTP::FormData::File.new(images_file.path, content_type: mime_type, filename: images_filename)
137
- else
138
- images_file = images_file.instance_of?(StringIO) ? HTTP::FormData::File.new(images_file, content_type: mime_type) : HTTP::FormData::File.new(images_file.path, content_type: mime_type)
139
- end
138
+ images_filename = images_file.path if images_filename.nil? && images_file.respond_to?(:path)
139
+ form_data[:images_file] = HTTP::FormData::File.new(images_file, content_type: images_file_content_type.nil? ? "application/octet-stream" : images_file_content_type, filename: images_filename)
140
140
  end
141
+
142
+ classifier_ids *= "," unless classifier_ids.nil?
143
+ owners *= "," unless owners.nil?
144
+
145
+ form_data[:url] = HTTP::FormData::Part.new(url.to_s, content_type: "text/plain") unless url.nil?
146
+
147
+ form_data[:threshold] = HTTP::FormData::Part.new(threshold.to_s, content_type: "application/json") unless threshold.nil?
148
+
149
+ form_data[:owners] = HTTP::FormData::Part.new(owners, content_type: "application/json") unless owners.nil?
150
+
151
+ form_data[:classifier_ids] = HTTP::FormData::Part.new(classifier_ids, content_type: "application/json") unless classifier_ids.nil?
152
+
141
153
  method_url = "/v3/classify"
154
+
142
155
  response = request(
143
156
  method: "POST",
144
157
  url: method_url,
145
158
  headers: headers,
146
159
  params: params,
147
- form: {
148
- images_file: images_file,
149
- url: url,
150
- threshold: threshold,
151
- owners: owners,
152
- classifier_ids: classifier_ids
153
- },
160
+ form: form_data,
154
161
  accept_json: true
155
162
  )
156
163
  response
@@ -193,30 +200,31 @@ module IBMWatson
193
200
  def detect_faces(images_file: nil, url: nil, images_file_content_type: nil, images_filename: nil)
194
201
  headers = {
195
202
  }
203
+
196
204
  params = {
197
205
  "version" => @version
198
206
  }
207
+
208
+ form_data = {}
209
+
199
210
  unless images_file.nil?
200
- mime_type = images_file_content_type.nil? ? "application/octet-stream" : images_file_content_type
201
211
  unless images_file.instance_of?(StringIO) || images_file.instance_of?(File)
202
212
  images_file = images_file.respond_to?(:to_json) ? StringIO.new(images_file.to_json) : StringIO.new(images_file)
203
213
  end
204
- if images_filename
205
- images_file = images_file.instance_of?(StringIO) ? HTTP::FormData::File.new(images_file, content_type: mime_type, filename: images_filename) : HTTP::FormData::File.new(images_file.path, content_type: mime_type, filename: images_filename)
206
- else
207
- images_file = images_file.instance_of?(StringIO) ? HTTP::FormData::File.new(images_file, content_type: mime_type) : HTTP::FormData::File.new(images_file.path, content_type: mime_type)
208
- end
214
+ images_filename = images_file.path if images_filename.nil? && images_file.respond_to?(:path)
215
+ form_data[:images_file] = HTTP::FormData::File.new(images_file, content_type: images_file_content_type.nil? ? "application/octet-stream" : images_file_content_type, filename: images_filename)
209
216
  end
217
+
218
+ form_data[:url] = HTTP::FormData::Part.new(url.to_s, content_type: "text/plain") unless url.nil?
219
+
210
220
  method_url = "/v3/detect_faces"
221
+
211
222
  response = request(
212
223
  method: "POST",
213
224
  url: method_url,
214
225
  headers: headers,
215
226
  params: params,
216
- form: {
217
- images_file: images_file,
218
- url: url
219
- },
227
+ form: form_data,
220
228
  accept_json: true
221
229
  )
222
230
  response
@@ -226,7 +234,7 @@ module IBMWatson
226
234
  #########################
227
235
 
228
236
  ##
229
- # @!method create_classifier(name:, **args)
237
+ # @!method create_classifier(name:, positive_examples:, negative_examples: nil, positive_examples_filename: nil, negative_examples_filename: nil)
230
238
  # Create a classifier.
231
239
  # Train a new multi-faceted classifier on the uploaded image data. Create your
232
240
  # custom classifier with positive or negative examples. Include at least two sets of
@@ -237,8 +245,7 @@ module IBMWatson
237
245
  # file names, and classifier and class names). The service assumes UTF-8 encoding if
238
246
  # it encounters non-ASCII characters.
239
247
  # @param name [String] The name of the new classifier. Encode special characters in UTF-8.
240
- # @param args [Hash] Hash for optional parameters
241
- # @option args classname_positive_examples [File] A .zip file of images that depict the visual subject of a class in the new
248
+ # @param positive_examples [Hash] A .zip file of images that depict the visual subject of a class in the new
242
249
  # classifier. You can include more than one positive example file in a call.
243
250
  #
244
251
  # Specify the parameter name by appending `_positive_examples` to the class name.
@@ -254,53 +261,54 @@ module IBMWatson
254
261
  # of the new classifier. Must contain a minimum of 10 images.
255
262
  #
256
263
  # Encode special characters in the file name in UTF-8.
257
- # @option args classname_positive_examples_filename [String] The filename for classname_positive_examples.
258
- # @option args negative_examples_filename [String] The filename for negative_examples.
264
+ # @param positive_examples_filename [Hash] The filename for positive_examples.
265
+ # @param negative_examples_filename [String] The filename for negative_examples.
259
266
  # @return [DetailedResponse] A `DetailedResponse` object representing the response.
260
- def create_classifier(name:, **args)
261
- raise ArgumentError("name must be provided") if name.nil?
267
+ def create_classifier(name:, positive_examples:, negative_examples: nil, positive_examples_filename: nil, negative_examples_filename: nil)
268
+ raise ArgumentError.new("name must be provided") if name.nil?
262
269
 
263
- raise ArgumentError("<classname>_positive_examples must be provided") unless args.keys.any? { |key| key.to_s.end_with?("_positive_examples") }
270
+ raise ArgumentError.new("positive_examples must be a hash") unless positive_examples.is_a?(Hash)
271
+ raise ArgumentError.new("positive_examples must have at least one hash entry") if positive_examples.empty?
272
+
273
+ raise ArgumentError.new("positive_examples_filename must be a hash") unless positive_examples_filename.nil? || positive_examples_filename.is_a?(Hash)
264
274
 
265
- positive_keys = args.keys
266
- positive_keys.keep_if { |key| key.to_s.end_with?("_positive_examples") }
267
275
  headers = {
268
276
  }
277
+
269
278
  params = {
270
279
  "version" => @version
271
280
  }
272
- mime_type = "application/octet-stream"
273
- positive_keys.each do |k|
274
- unless args[k].instance_of?(StringIO) || args[k].instance_of?(File)
275
- args[k] = args[k].respond_to?(:to_json) ? StringIO.new(args[k].to_json) : StringIO.new(args[k])
276
- end
277
- if !args[(k.to_s + "_filename").to_sym].nil?
278
- args[k] = args[k].instance_of?(StringIO) ? HTTP::FormData::File.new(args[k], content_type: mime_type, filename: args[(k.to_s + "_filename").to_sym]) : HTTP::FormData::File.new(args[k].path, content_type: mime_type, filename: args[(k.to_s + "_filename").to_sym])
279
- else
280
- args[k] = args[k].instance_of?(StringIO) ? HTTP::FormData::File.new(args[k], content_type: mime_type) : HTTP::FormData::File.new(args[k].path, content_type: mime_type)
281
+
282
+ form_data = {}
283
+
284
+ form_data[:name] = HTTP::FormData::Part.new(name.to_s, content_type: "text/plain")
285
+
286
+ positive_examples&.each do |key, value|
287
+ part_name = "%s_positive_examples" % key.to_s
288
+ unless value.instance_of?(StringIO) || value.instance_of?(File)
289
+ value = value.respond_to?(:to_json) ? StringIO.new(value.to_json) : StringIO.new(value)
281
290
  end
291
+ filename = positive_examples_filename[key] if !positive_examples_filename.nil? && positive_examples_filename.key?(key)
292
+ filename = value.path if filename.nil? && value.respond_to?(:path)
293
+ form_data[part_name.to_sym] = HTTP::FormData::File.new(value, content_type: "application/octet-stream", filename: filename)
282
294
  end
283
- unless args[:negative_examples].nil?
284
- mime_type = "application/octet-stream"
285
- unless args[:negative_examples].instance_of?(StringIO) || args[:negative_examples].instance_of?(File)
286
- args[:negative_examples] = args[:negative_examples].respond_to?(:to_json) ? StringIO.new(args[:negative_examples].to_json) : StringIO.new(args[:negative_examples])
287
- end
288
- if args[:negative_examples_filename]
289
- args[:negative_examples] = args[:negative_examples].instance_of?(StringIO) ? HTTP::FormData::File.new(args[:negative_examples], content_type: mime_type, filename: args[:negative_examples_filename]) : HTTP::FormData::File.new(args[:negative_examples].path, content_type: mime_type, filename: args[:negative_examples_filename])
290
- else
291
- args[:negative_examples] = args[:negative_examples].instance_of?(StringIO) ? HTTP::FormData::File.new(args[:negative_examples], content_type: mime_type) : HTTP::FormData::File.new(args[:negative_examples].path, content_type: mime_type)
295
+
296
+ unless negative_examples.nil?
297
+ unless negative_examples.instance_of?(StringIO) || negative_examples.instance_of?(File)
298
+ negative_examples = negative_examples.respond_to?(:to_json) ? StringIO.new(negative_examples.to_json) : StringIO.new(negative_examples)
292
299
  end
300
+ negative_examples_filename = negative_examples.path if negative_examples_filename.nil? && negative_examples.respond_to?(:path)
301
+ form_data[:negative_examples] = HTTP::FormData::File.new(negative_examples, content_type: "application/octet-stream", filename: negative_examples_filename)
293
302
  end
294
- form_hash = { name: name }
295
- positive_keys.each { |k| form_hash[k] = args[k] }
296
- form_hash[:negative_examples] = args[:negative_examples] unless args[:negative_examples].nil?
303
+
297
304
  method_url = "/v3/classifiers"
305
+
298
306
  response = request(
299
307
  method: "POST",
300
308
  url: method_url,
301
309
  headers: headers,
302
310
  params: params,
303
- form: form_hash,
311
+ form: form_data,
304
312
  accept_json: true
305
313
  )
306
314
  response
@@ -315,11 +323,14 @@ module IBMWatson
315
323
  def list_classifiers(verbose: nil)
316
324
  headers = {
317
325
  }
326
+
318
327
  params = {
319
328
  "version" => @version,
320
329
  "verbose" => verbose
321
330
  }
331
+
322
332
  method_url = "/v3/classifiers"
333
+
323
334
  response = request(
324
335
  method: "GET",
325
336
  url: method_url,
@@ -337,14 +348,17 @@ module IBMWatson
337
348
  # @param classifier_id [String] The ID of the classifier.
338
349
  # @return [DetailedResponse] A `DetailedResponse` object representing the response.
339
350
  def get_classifier(classifier_id:)
340
- raise ArgumentError("classifier_id must be provided") if classifier_id.nil?
351
+ raise ArgumentError.new("classifier_id must be provided") if classifier_id.nil?
341
352
 
342
353
  headers = {
343
354
  }
355
+
344
356
  params = {
345
357
  "version" => @version
346
358
  }
359
+
347
360
  method_url = "/v3/classifiers/%s" % [ERB::Util.url_encode(classifier_id)]
361
+
348
362
  response = request(
349
363
  method: "GET",
350
364
  url: method_url,
@@ -356,7 +370,7 @@ module IBMWatson
356
370
  end
357
371
 
358
372
  ##
359
- # @!method update_classifier(classifier_id:, **args)
373
+ # @!method update_classifier(classifier_id:, positive_examples: nil, negative_examples: nil, positive_examples_filename: nil, negative_examples_filename: nil)
360
374
  # Update a classifier.
361
375
  # Update a custom classifier by adding new positive or negative classes (examples)
362
376
  # or by adding new images to existing classes. You must supply at least one set of
@@ -372,7 +386,7 @@ module IBMWatson
372
386
  # previous requests. The retrained property shows the last time the classifier
373
387
  # retraining finished.
374
388
  # @param classifier_id [String] The ID of the classifier.
375
- # @option args classname_positive_examples [File] A .zip file of images that depict the visual subject of a class in the classifier.
389
+ # @param positive_examples [Hash] A .zip file of images that depict the visual subject of a class in the classifier.
376
390
  # The positive examples create or update classes in the classifier. You can include
377
391
  # more than one positive example file in a call.
378
392
  #
@@ -385,55 +399,55 @@ module IBMWatson
385
399
  # MB per .zip file.
386
400
  #
387
401
  # Encode special characters in the file name in UTF-8.
388
- # @option args negative_examples [File] A .zip file of images that do not depict the visual subject of any of the classes
402
+ # @param negative_examples [File] A .zip file of images that do not depict the visual subject of any of the classes
389
403
  # of the new classifier. Must contain a minimum of 10 images.
390
404
  #
391
405
  # Encode special characters in the file name in UTF-8.
392
- # @option args classname_positive_examples_filename [String] The filename for classname_positive_examples.
393
- # @option args negative_examples_filename [String] The filename for negative_examples.
406
+ # @param positive_examples_filename [Hash] The filename for positive_examples.
407
+ # @param negative_examples_filename [String] The filename for negative_examples.
394
408
  # @return [DetailedResponse] A `DetailedResponse` object representing the response.
395
- def update_classifier(classifier_id:, **args)
396
- raise ArgumentError("classifier_id must be provided") if classifier_id.nil?
409
+ def update_classifier(classifier_id:, positive_examples: nil, negative_examples: nil, positive_examples_filename: nil, negative_examples_filename: nil)
410
+ raise ArgumentError.new("classifier_id must be provided") if classifier_id.nil?
411
+
412
+ raise ArgumentError.new("positive_examples must be a hash") unless positive_examples.nil? || positive_examples.is_a?(Hash)
413
+
414
+ raise ArgumentError.new("positive_examples_filename must be a hash") unless positive_examples_filename.nil? || positive_examples_filename.is_a?(Hash)
397
415
 
398
416
  headers = {
399
417
  }
418
+
400
419
  params = {
401
420
  "version" => @version
402
421
  }
403
- positive_keys = args.keys
404
- positive_keys.keep_if { |key| key.to_s.end_with?("_positive_examples") }
405
- mime_type = "application/octet-stream"
406
- positive_keys.each do |k|
407
- unless args[k].instance_of?(StringIO) || args[k].instance_of?(File)
408
- args[k] = args[k].respond_to?(:to_json) ? StringIO.new(args[k].to_json) : StringIO.new(args[k])
409
- end
410
- if !args[(k.to_s + "_filename").to_sym].nil?
411
- args[k] = args[k].instance_of?(StringIO) ? HTTP::FormData::File.new(args[k], content_type: mime_type, filename: args[(k.to_s + "_filename").to_sym]) : HTTP::FormData::File.new(args[k].path, content_type: mime_type, filename: args[(k.to_s + "_filename").to_sym])
412
- else
413
- args[k] = args[k].instance_of?(StringIO) ? HTTP::FormData::File.new(args[k], content_type: mime_type) : HTTP::FormData::File.new(args[k].path, content_type: mime_type)
422
+
423
+ form_data = {}
424
+
425
+ positive_examples&.each do |key, value|
426
+ part_name = "%s_positive_examples" % key.to_s
427
+ unless value.instance_of?(StringIO) || value.instance_of?(File)
428
+ value = value.respond_to?(:to_json) ? StringIO.new(value.to_json) : StringIO.new(value)
414
429
  end
430
+ filename = positive_examples_filename[key] if !positive_examples_filename.nil? && positive_examples_filename.key?(key)
431
+ filename = value.path if filename.nil? && value.respond_to?(:path)
432
+ form_data[part_name.to_sym] = HTTP::FormData::File.new(value, content_type: "application/octet-stream", filename: filename)
415
433
  end
416
- unless args[:negative_examples].nil?
417
- mime_type = "application/octet-stream"
418
- unless args[:negative_examples].instance_of?(StringIO) || args[:negative_examples].instance_of?(File)
419
- args[:negative_examples] = args[:negative_examples].respond_to?(:to_json) ? StringIO.new(args[:negative_examples].to_json) : StringIO.new(args[:negative_examples])
420
- end
421
- if args[:negative_examples_filename]
422
- args[:negative_examples] = args[:negative_examples].instance_of?(StringIO) ? HTTP::FormData::File.new(args[:negative_examples], content_type: mime_type, filename: args[:negative_examples_filename]) : HTTP::FormData::File.new(args[:negative_examples].path, content_type: mime_type, filename: args[:negative_examples_filename])
423
- else
424
- args[:negative_examples] = args[:negative_examples].instance_of?(StringIO) ? HTTP::FormData::File.new(args[:negative_examples], content_type: mime_type) : HTTP::FormData::File.new(args[:negative_examples].path, content_type: mime_type)
434
+
435
+ unless negative_examples.nil?
436
+ unless negative_examples.instance_of?(StringIO) || negative_examples.instance_of?(File)
437
+ negative_examples = negative_examples.respond_to?(:to_json) ? StringIO.new(negative_examples.to_json) : StringIO.new(negative_examples)
425
438
  end
439
+ negative_examples_filename = negative_examples.path if negative_examples_filename.nil? && negative_examples.respond_to?(:path)
440
+ form_data[:negative_examples] = HTTP::FormData::File.new(negative_examples, content_type: "application/octet-stream", filename: negative_examples_filename)
426
441
  end
427
- form_hash = {}
428
- positive_keys.each { |k| form_hash[k] = args[k] }
429
- form_hash[:negative_examples] = args[:negative_examples] unless args[:negative_examples].nil?
442
+
430
443
  method_url = "/v3/classifiers/%s" % [ERB::Util.url_encode(classifier_id)]
444
+
431
445
  response = request(
432
446
  method: "POST",
433
447
  url: method_url,
434
448
  headers: headers,
435
449
  params: params,
436
- form: form_hash,
450
+ form: form_data,
437
451
  accept_json: true
438
452
  )
439
453
  response
@@ -445,14 +459,17 @@ module IBMWatson
445
459
  # @param classifier_id [String] The ID of the classifier.
446
460
  # @return [nil]
447
461
  def delete_classifier(classifier_id:)
448
- raise ArgumentError("classifier_id must be provided") if classifier_id.nil?
462
+ raise ArgumentError.new("classifier_id must be provided") if classifier_id.nil?
449
463
 
450
464
  headers = {
451
465
  }
466
+
452
467
  params = {
453
468
  "version" => @version
454
469
  }
470
+
455
471
  method_url = "/v3/classifiers/%s" % [ERB::Util.url_encode(classifier_id)]
472
+
456
473
  request(
457
474
  method: "DELETE",
458
475
  url: method_url,
@@ -474,14 +491,17 @@ module IBMWatson
474
491
  # @param classifier_id [String] The ID of the classifier.
475
492
  # @return [DetailedResponse] A `DetailedResponse` object representing the response.
476
493
  def get_core_ml_model(classifier_id:)
477
- raise ArgumentError("classifier_id must be provided") if classifier_id.nil?
494
+ raise ArgumentError.new("classifier_id must be provided") if classifier_id.nil?
478
495
 
479
496
  headers = {
480
497
  }
498
+
481
499
  params = {
482
500
  "version" => @version
483
501
  }
502
+
484
503
  method_url = "/v3/classifiers/%s/core_ml_model" % [ERB::Util.url_encode(classifier_id)]
504
+
485
505
  response = request(
486
506
  method: "GET",
487
507
  url: method_url,
@@ -508,15 +528,18 @@ module IBMWatson
508
528
  # @param customer_id [String] The customer ID for which all data is to be deleted.
509
529
  # @return [nil]
510
530
  def delete_user_data(customer_id:)
511
- raise ArgumentError("customer_id must be provided") if customer_id.nil?
531
+ raise ArgumentError.new("customer_id must be provided") if customer_id.nil?
512
532
 
513
533
  headers = {
514
534
  }
535
+
515
536
  params = {
516
537
  "version" => @version,
517
538
  "customer_id" => customer_id
518
539
  }
540
+
519
541
  method_url = "/v3/user_data"
542
+
520
543
  request(
521
544
  method: "DELETE",
522
545
  url: method_url,
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative("./../test_helper.rb")
4
+ require("minitest/hooks/test")
5
+
6
+ if !ENV["COMPARE_COMPLY_APIKEY"].nil?
7
+ # Integration tests for the Discovery V1 Service
8
+ class CompareComplyV1Test < Minitest::Test
9
+ include Minitest::Hooks
10
+ attr_accessor :service, :environment_id, :collection_id
11
+
12
+ def before_all
13
+ @service = IBMWatson::CompareComplyV1.new(
14
+ iam_apikey: ENV["COMPARE_COMPLY_APIKEY"],
15
+ version: "2018-10-15"
16
+ )
17
+ @service.add_default_headers(
18
+ headers: {
19
+ "X-Watson-Learning-Opt-Out" => "1",
20
+ "X-Watson-Test" => "1"
21
+ }
22
+ )
23
+ end
24
+
25
+ def test_convert_to_html
26
+ File.open(Dir.getwd + "/resources/cnc_test.pdf") do |file_info|
27
+ response = @service.convert_to_html(
28
+ file: file_info
29
+ ).result
30
+ refute(response.nil?)
31
+ end
32
+ end
33
+
34
+ def test_classiffy_elements
35
+ File.open(Dir.getwd + "/resources/cnc_test.pdf") do |file_info|
36
+ response = @service.classify_elements(
37
+ file: file_info
38
+ ).result
39
+ refute(response.nil?)
40
+ end
41
+ end
42
+
43
+ def test_extract_tables
44
+ File.open(Dir.getwd + "/resources/cnc_test.pdf") do |file_info|
45
+ response = @service.extract_tables(
46
+ file: file_info
47
+ ).result
48
+ refute(response.nil?)
49
+ end
50
+ end
51
+
52
+ def test_compare_documents
53
+ file_1 = File.open(Dir.getwd + "/resources/cnc_test.pdf")
54
+ file_2 = File.open(Dir.getwd + "/resources/cnc_test.pdf")
55
+ response = @service.compare_documents(
56
+ file_1: file_1,
57
+ file_2: file_2
58
+ ).result
59
+ refute(response.nil?)
60
+ end
61
+
62
+ def test_list_feedback
63
+ response = @service.list_feedback.result
64
+ refute(response.nil?)
65
+ end
66
+
67
+ def test_get_feedback
68
+ @service_dup = IBMWatson::CompareComplyV1.new(
69
+ iam_apikey: ENV["COMPARE_COMPLY_APIKEY"],
70
+ version: "2018-10-15"
71
+ )
72
+ @service_dup.add_default_headers(
73
+ headers: {
74
+ "X-Watson-Learning-Opt-Out" => "1",
75
+ "X-Watson-Test" => "1",
76
+ "x-watson-metadata" => "customer_id=sdk-test-customer-id"
77
+ }
78
+ )
79
+ response = @service_dup.get_feedback(
80
+ feedback_id: ENV["COMPARE_COMPLY_FEEDBACK_ID"]
81
+ ).result
82
+ refute(response.nil?)
83
+ end
84
+
85
+ def test_create_batch
86
+ skip "Skip to allow for concurrent travis jobs"
87
+ input_file = File.open(Dir.getwd + "/resources/cnc_input_credentials_file.json")
88
+ output_file = File.open(Dir.getwd + "/resources/cnc_output_credentials_file.json")
89
+ response = @service.create_batch(
90
+ function: "tables",
91
+ input_credentials_file: input_file,
92
+ input_bucket_location: "us-south",
93
+ input_bucket_name: "compare-comply-integration-test-bucket-input",
94
+ output_credentials_file: output_file,
95
+ output_bucket_location: "us-south",
96
+ output_bucket_name: "compare-comply-integration-test-bucket-output"
97
+ ).result
98
+ refute(response.nil?)
99
+ end
100
+
101
+ def test_list_batches
102
+ response = @service.list_batches.result
103
+ refute(response.nil?)
104
+ end
105
+ end
106
+ else
107
+ class CompareComplyV1Test < Minitest::Test
108
+ def test_missing_credentials_skip_integration
109
+ skip "Skip discovery integration tests because credentials have not been provided"
110
+ end
111
+ end
112
+ end