Sha256: 190cedbf2df6f2ffad22c740359016fca321e68c37f899f0c3766f85bfb7d7ff

Contents?: true

Size: 1.91 KB

Versions: 3

Compression:

Stored size: 1.91 KB

Contents

require 'spec_helper'
require 'rake'

describe "apartment rake tasks" do

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

    # somehow this misc.rake file gets lost in the shuffle
    # it defines a `rails_env` task that our db:migrate depends on
    # No idea why, but during the tests, we somehow lose this tasks, so we get an error when testing migrations
    # This is STUPID!
    load "rails/tasks/misc.rake"
  end

  after do
    Rake.application = nil
  end

  before do
    Apartment.configure do |config|
      config.excluded_models = ["Company"]
      config.database_names = lambda{ Company.scoped.collect(&:database) }
    end
  end

  context "with x number of databases" do

    let(:x){ 1 + rand(5) }    # random number of dbs to create
    let(:db_names){ x.times.map{|y| "database_#{y}" } }

    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
        Apartment::Migrator.should_receive(:migrate).exactly(db_names.length).times

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

    describe "#rollback" do
      it "should rollback all dbs" do
        db_names.each do |name|
          Apartment::Migrator.should_receive(:rollback).with(name, anything)
        end

        @rake['apartment:rollback'].invoke
        @rake['apartment:migrate'].invoke   # migrate again so that our next test 'seed' can run (requires migrations to be complete)
      end
    end

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

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

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
apartment-0.14.4 spec/integration/apartment_rake_integration_spec.rb
apartment-0.14.3 spec/integration/apartment_rake_integration_spec.rb
apartment-0.14.2 spec/integration/apartment_rake_integration_spec.rb