Skip to content

Commit

Permalink
spec BigQuery
Browse files Browse the repository at this point in the history
  • Loading branch information
claytongentry committed May 1, 2024
1 parent aa02b40 commit baccbb3
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 6 deletions.
2 changes: 1 addition & 1 deletion lib/manifolds/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
require "fileutils"
require "logger"

require_relative "services/big_query"
require_relative "services/big_query_service"

module Manifolds
# CLI provides command line interface functionality
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,18 @@ def extract_dimensions(config)
end

def create_dimensions_file(project_name, dimensions)
bq_schema = [
{ "type" => "STRING", "name" => "id", "mode" => "REQUIRED" },
{ "type" => "RECORD", "name" => "dimensions", "mode" => "REQUIRED", "fields" => dimensions }
]
FileUtils.mkdir_p("./projects/#{project_name}/bq")
File.write("./projects/#{project_name}/bq/dimensions.json", JSON.pretty_generate(bq_schema))
File.write("./projects/#{project_name}/bq/dimensions.json", dimensions_schema(dimensions))
@logger.info("Generated BigQuery dimensions table schema for '#{project_name}'.")
end

def dimensions_schema(dimensions)
JSON.pretty_generate([
{ "type" => "STRING", "name" => "id", "mode" => "REQUIRED" },
{ "type" => "RECORD", "name" => "dimensions", "mode" => "REQUIRED",
"fields" => dimensions }
]).concat("\n")
end
end
end
end
53 changes: 53 additions & 0 deletions spec/manifolds/services/big_query_service_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# frozen_string_literal: true

RSpec.describe Manifolds::Services::BigQueryService do
let(:logger) { instance_double("Logger") }
let(:service) { described_class.new(logger) }
let(:project_name) { "test_project" }
let(:config_path) { "./projects/#{project_name}/config.yml" }
let(:config) do
{
"dimensions" => [
{ "name" => "STRING" },
{ "directQualified" => "BOOLEAN" }
]
}
end

before do
allow(File).to receive(:exist?).with(config_path).and_return(true)
allow(YAML).to receive(:load_file).with(config_path).and_return(config)
allow(FileUtils).to receive(:mkdir_p)
allow(File).to receive(:write)
allow(logger).to receive(:info) # Allow 'info' to be called to avoid unexpected message errors
end

describe "#generate_dimensions_schema" do
it "checks if the configuration file exists" do
service.generate_dimensions_schema(project_name)
expect(File).to have_received(:exist?).with(config_path)
end

context "when configuration file does not exist" do
before do
allow(File).to receive(:exist?).with(config_path).and_return(false)
allow(logger).to receive(:error)
end

it "logs an error message" do
service.generate_dimensions_schema(project_name)
expect(logger).to have_received(:error).with("Config file missing for project 'test_project'.")
end
end

it "writes the dimensions schema to a file" do
service.generate_dimensions_schema(project_name)
expect(File).to have_received(:write).with("./projects/#{project_name}/bq/dimensions.json", anything)
end

it "logs success message" do
service.generate_dimensions_schema(project_name)
expect(logger).to have_received(:info).with("Generated BigQuery dimensions table schema for 'test_project'.")
end
end
end

0 comments on commit baccbb3

Please sign in to comment.