Sha256: bbd52605a89b65b14b185d9c9e3316e1530c16db69698d51f8aa8af9804b910c

Contents?: true

Size: 1.65 KB

Versions: 13

Compression:

Stored size: 1.65 KB

Contents

require 'spec_helper'

describe Dossier::Adapter::ActiveRecord do

  let(:ar_connection) { double(:activerecord_connection) }
  let(:adapter)       { described_class.new({connection: ar_connection}) }

  describe "escaping" do

    let(:dirty_value) { "Robert'); DROP TABLE Students;--" }
    let(:clean_value) { "'Robert\\'); DROP TABLE Students;--'" }

    it "delegates to the connection" do
      ar_connection.should_receive(:quote).with(dirty_value)
      adapter.escape(dirty_value)
    end

    it "returns the connection's escaped value" do
      ar_connection.stub(:quote).and_return(clean_value)
      expect(adapter.escape(dirty_value)).to eq(clean_value)
    end

  end

  describe "execution" do

    let(:query)                { 'SELECT * FROM `people_who_resemble_vladimir_putin`' }
    let(:connection_results)   { [] }
    let(:adapter_result_class) { Dossier::Adapter::ActiveRecord::Result}

    it "delegates to the connection" do
      ar_connection.should_receive(:exec_query).with(query)
      adapter.execute(query)
    end

    it "builds an adapter result" do
      ar_connection.stub(:exec_query).and_return(connection_results)
      adapter_result_class.should_receive(:new).with(connection_results)
      adapter.execute(:query)
    end

    it "returns the adapter result" do
      ar_connection.stub(:exec_query).and_return(connection_results)
      expect(adapter.execute(:query)).to be_a(adapter_result_class)
    end

    it "rescues any errors and raises a Dossier::ExecuteError" do
      ar_connection.stub(:exec_query).and_raise(StandardError.new('wat'))
      expect{ adapter.execute(:query) }.to raise_error(Dossier::ExecuteError)
    end

  end

end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
dossier-2.7.1 spec/dossier/adapter/active_record_spec.rb
dossier-2.7.0 spec/dossier/adapter/active_record_spec.rb
dossier-2.6.0 spec/dossier/adapter/active_record_spec.rb
dossier-2.5.2 spec/dossier/adapter/active_record_spec.rb
dossier-2.5.1 spec/dossier/adapter/active_record_spec.rb
dossier-2.5.0 spec/dossier/adapter/active_record_spec.rb
dossier-2.4.0 spec/dossier/adapter/active_record_spec.rb
dossier-2.3.0 spec/dossier/adapter/active_record_spec.rb
dossier-2.2.0 spec/dossier/adapter/active_record_spec.rb
dossier-2.1.1 spec/dossier/adapter/active_record_spec.rb
dossier-2.1.0 spec/dossier/adapter/active_record_spec.rb
dossier-2.0.1 spec/dossier/adapter/active_record_spec.rb
dossier-2.0.0 spec/dossier/adapter/active_record_spec.rb