require_relative './helper' require 'embulk/output/bigquery/helper' module Embulk class Output::Bigquery class TestHelper < Test::Unit::TestCase class << self def startup FileUtils.mkdir_p('tmp') end def shutdown FileUtils.rm_rf('tmp') end end def bq_type_from_embulk_type assert_equal 'BOOLEAN', Helper.bq_type_from_embulk_type(:boolean) assert_equal 'STRING', Helper.bq_type_from_embulk_type(:string) assert_equal 'FLOAT', Helper.bq_type_from_embulk_type(:double) assert_equal 'STRING', Helper.bq_type_from_embulk_type(:string) assert_equal 'TIMESTAMP', Helper.bq_type_from_embulk_type(:timestamp) assert_equal 'STRING', Helper.bq_type_from_embulk_type(:json) end sub_test_case "fields_from_embulk_schema" do def test_fields_from_embulk_schema_without_column_options schema = Schema.new([ Column.new({index: 0, name: 'boolean', type: :boolean}), Column.new({index: 1, name: 'long', type: :long}), Column.new({index: 2, name: 'double', type: :double}), Column.new({index: 3, name: 'string', type: :string}), Column.new({index: 4, name: 'timestamp', type: :timestamp}), Column.new({index: 5, name: 'json', type: :json}), ]) expected = [ {name: 'boolean', type: 'BOOLEAN'}, {name: 'long', type: 'INTEGER'}, {name: 'double', type: 'FLOAT'}, {name: 'string', type: 'STRING'}, {name: 'timestamp', type: 'TIMESTAMP'}, {name: 'json', type: 'STRING'}, ] fields = Helper.fields_from_embulk_schema({}, schema) assert_equal expected, fields end def test_fields_from_embulk_schema_with_column_options schema = Schema.new([ Column.new({index: 0, name: 'boolean', type: :boolean}), Column.new({index: 1, name: 'long', type: :long}), Column.new({index: 2, name: 'double', type: :double}), Column.new({index: 3, name: 'string', type: :string}), Column.new({index: 4, name: 'timestamp', type: :timestamp}), Column.new({index: 5, name: 'json', type: :json}), ]) task = { 'column_options' => [ {'name' => 'boolean', 'type' => 'STRING', 'mode' => 'REQUIRED'}, {'name' => 'long', 'type' => 'STRING'}, {'name' => 'double', 'type' => 'STRING'}, {'name' => 'string', 'type' => 'INTEGER'}, {'name' => 'timestamp', 'type' => 'INTEGER'}, {'name' => 'json', 'type' => 'RECORD', 'fields' => [ { 'name' => 'key1', 'type' => 'STRING' }, ]}, ], } expected = [ {name: 'boolean', type: 'STRING', mode: 'REQUIRED'}, {name: 'long', type: 'STRING'}, {name: 'double', type: 'STRING'}, {name: 'string', type: 'INTEGER'}, {name: 'timestamp', type: 'INTEGER'}, {name: 'json', type: 'RECORD', fields: [ {name: 'key1', type: 'STRING'}, ]}, ] fields = Helper.fields_from_embulk_schema(task, schema) assert_equal expected, fields end end def test_create_job_id task = { 'dataset' => 'your_dataset_name', 'source_format' => 'CSV', 'max_bad_records' => nil, 'field_delimiter' => ',', 'encoding' => 'UTF-8', 'ignore_unknown_values' => nil, 'allow_quoted_newlines' => nil, } fields = { name: 'a', type: 'STRING', } File.write("tmp/your_file_name", "foobarbaz") job_id = Helper.create_job_id(task, 'tmp/your_file_name', 'your_table_name', fields) assert job_id.is_a?(String) end end end end