Sha256: 376f326a218f28f794167e4c80ca2f64e80cfc3edbb0abffacc65231214f8583

Contents?: true

Size: 1.96 KB

Versions: 4

Compression:

Stored size: 1.96 KB

Contents

require 'spec_helper'
require 'rake'

describe "apartment rake tasks", database: :postgresql do

  before do
    @rake = Rake::Application.new
    Rake.application = @rake
    Dummy::Application.load_tasks

    # rails tasks running F up the schema...
    Rake::Task.define_task('db:migrate')
    Rake::Task.define_task('db:seed')
    Rake::Task.define_task('db:rollback')
    Rake::Task.define_task('db:migrate:up')
    Rake::Task.define_task('db:migrate:down')
    Rake::Task.define_task('db:migrate:redo')

    Apartment.configure do |config|
      config.use_schemas = true
      config.excluded_models = ["Company"]
      config.tenant_names = lambda{ Company.pluck(:database) }
    end
    Apartment::Database.reload!(config)

    # fix up table name of shared/excluded models
    Company.table_name = 'public.companies'
  end

  after { Rake.application = nil }

  context "with x number of databases" do

    let(:x){ 1 + rand(5) }    # random number of dbs to create
    let(:db_names){ x.times.map{ Apartment::Test.next_db } }
    let!(:company_count){ Company.count + db_names.length }

    before do
      db_names.collect do |db_name|
        Apartment::Database.create(db_name)
        Company.create :database => db_name
      end
    end

    after do
      db_names.each{ |db| Apartment::Database.drop(db) }
      Company.delete_all
    end

    describe "#migrate" do
      it "should migrate all databases" do
        ActiveRecord::Migrator.should_receive(:migrate).exactly(company_count).times

        @rake['apartment:migrate'].invoke
      end
    end

    describe "#rollback" do
      it "should rollback all dbs" do
        ActiveRecord::Migrator.should_receive(:rollback).exactly(company_count).times

        @rake['apartment:rollback'].invoke
      end
    end

    describe "apartment:seed" do
      it "should seed all databases" do
        Apartment::Database.should_receive(:seed).exactly(company_count).times

        @rake['apartment:seed'].invoke
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
apartment-0.24.3 spec/integration/apartment_rake_integration_spec.rb
apartment-0.24.2 spec/integration/apartment_rake_integration_spec.rb
apartment-0.24.1 spec/integration/apartment_rake_integration_spec.rb
apartment-0.24.0 spec/integration/apartment_rake_integration_spec.rb