Sha256: 0d02b011bbea9c01edfc1a1b16b7c80dea7ccb0ea111fa5e010e4376fdd1bc79

Contents?: true

Size: 1.97 KB

Versions: 2

Compression:

Stored size: 1.97 KB

Contents

require 'spec_helper'

module TestMiddleware
  module Middleware

    module Schema
      module ViewDefinition
        SPY = []
        def after(env)
          SPY << env.to_hash.except(:connection)
        end
      end
    end

    module Migration
      module CreateView
        SPY = []
        def after(env)
          SPY << env.to_hash.except(:connection)
        end
      end
      module DropView
        SPY = []
        def after(env)
          SPY << env.to_hash.except(:connection)
        end
      end
    end

  end
end

SchemaMonkey.register TestMiddleware

context SchemaPlus::Views::Middleware do

  let(:migration) { ActiveRecord::Migration }
  let(:connection) { ActiveRecord::Base.connection }

  before(:each) do
    apply_migration do
      create_table :items, force: true do |t|
        t.integer :a
      end
      create_view 'a_view', "select a from items"
    end
  end

  context TestMiddleware::Middleware::Schema::ViewDefinition do
    it "calls middleware" do
      spied = spy_on {connection.view_definition('a_view', 'qn')}
      expect(spied[:view_name]).to eq('a_view')
      expect(spied[:definition]).to match(%r{SELECT .*a.* FROM .*items.*}mi)
      expect(spied[:query_name]).to eq('qn')
    end
  end

  context TestMiddleware::Middleware::Migration::CreateView do
    it "calls middleware" do
      expect(spy_on {migration.create_view('newview', 'select a from items', force: true)}).to eq({
        #connection: connection,
        view_name: 'newview',
        definition: 'select a from items',
        options: { force: true }
      })
    end
  end

  context TestMiddleware::Middleware::Migration::DropView do
    it "calls middleware" do
      expect(spy_on {migration.drop_view('a_items', if_exists: true)}).to eq({
        #connection: connection,
        view_name: 'a_items',
        options: { if_exists: true }
      })
    end
  end


  private

  def spy_on 
    spy = described_class.const_get :SPY
    spy.clear
    yield
    spy.first
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
schema_plus_views-0.4.1 spec/middleware_spec.rb
schema_plus_views-0.4.0 spec/middleware_spec.rb