ibm_watson 0.9.2 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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