Sha256: 4bc6c6dad152cf8e431283d3731cad61e0b3a9e9e81069b3101207b7bcf2b150

Contents?: true

Size: 1.96 KB

Versions: 4

Compression:

Stored size: 1.96 KB

Contents

require_relative '../remi_spec'

describe Extractor::Postgres do
  let(:extractor) { Extractor::Postgres.new(credentials: {}, query: 'some_query') }
  let(:pg_conn) { double('pg_conn') }
  let(:data) { 'some postgres data' }

  before do
    allow(pg_conn).to receive(:exec) { data }
    allow(extractor).to receive(:connection) { pg_conn }
  end

  context '#data' do
    it 'returns extracted data' do
      expect(extractor.extract.data).to eq data
    end
  end
end


describe Parser::Postgres do
  let(:parser) { Parser::Postgres.new }
  let(:pg_extract) { double('pg_extract') }
  let(:data) do
    [
      { 'brewer' => 'Baerlic', 'style' => 'IPA', 'quantity' => 5 },
      { 'brewer' => 'Ex Novo', 'style' => 'Red', 'quantity' => 3 }
    ]
  end

  before do
    allow(pg_extract).to receive(:data) { data }
  end

  it 'converts postgres response data into a dataframe' do
    expect(parser.parse pg_extract).to be_a Remi::DataFrame::Daru
  end

  it 'converted data into the correct dataframe' do
    expected_df = Daru::DataFrame.new(
      :brewer => ['Baerlic', 'Ex Novo'],
      :style  => ['IPA', 'Red'],
      :quantity => [5, 3]
    )
    expect(parser.parse(pg_extract).to_a).to eq expected_df.to_a
  end
end


describe Encoder::Postgres do
  let(:fields) do
    {
      brewer: { type: 'text' },
      style: { type: 'text' },
      quantity: { type: 'integer' }
    }
  end
  let(:encoder) { Encoder::Postgres.new(fields: fields) }
  let(:dataframe) do
    expected_df = Daru::DataFrame.new(
      :brewer => ['Baerlic', 'Ex Novo'],
      :style  => ['IPA', 'Red'],
      :quantity => [5, 3]
    )
  end

  it 'converts the dataframe into an array of strings to be used by the loader' do
    expect(encoder.encode(dataframe).values).to eq [
      "Baerlic\tIPA\t5",
      "Ex Novo\tRed\t3"
    ]
  end

  it 'builds the field ddl' do
    expect(encoder.encode(dataframe).ddl_fields).to eq 'brewer text, style text, quantity integer'
  end
end

describe Loader::Postgres, skip: 'todo' do
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
remi-0.3.3 spec/data_subjects/postgres_spec.rb
remi-0.3.2 spec/data_subjects/postgres_spec.rb
remi-0.3.1 spec/data_subjects/postgres_spec.rb
remi-0.3.0 spec/data_subjects/postgres_spec.rb