spec/rake/funnel/tasks/environments_spec.rb in rake-funnel-0.3.2.pre vs spec/rake/funnel/tasks/environments_spec.rb in rake-funnel-0.4.0.pre
- old
+ new
@@ -1,247 +1,249 @@
-require 'configatron'
-
-include Rake
-include Rake::Funnel::Support::Environments
-include Rake::Funnel::Tasks
-
-describe Rake::Funnel::Tasks::Environments do
- include Rake::DSL
-
- before {
- Task.clear
- }
-
- let(:files) { [] }
-
- before {
- allow(Dir).to receive(:[]).and_return(files)
- }
-
- def disable_default_env_setup
- allow_any_instance_of(described_class).to receive(:default_environment_setup)
- end
-
- describe 'defaults' do
- before {
- disable_default_env_setup
- }
-
- its(:store) { should == configatron }
- its(:base_dir) { should == 'config' }
- its(:default_env) { should be_nil }
- its(:default_config) { should == 'default' }
- its(:local_config) { should == 'local' }
- its(:customizer) { should be_nil }
-
- describe 'overriding defaults' do
- let(:store) { OpenStruct.new }
-
- subject {
- described_class.new do |t|
- t.store = store
- t.base_dir = 'custom base_dir'
- t.default_env = 'custom default_env'
- t.default_config = 'custom default_config'
- t.local_config = 'custom local_config'
- t.customizer = Proc.new {}
- end
- }
-
- its(:store) { should == store }
- its(:base_dir) { should == subject.base_dir }
- its(:default_env) { should == subject.default_env }
- its(:default_config) { should == subject.default_config }
- its(:local_config) { should == subject.local_config }
- its(:customizer) { should be_instance_of(Proc) }
- end
- end
-
- describe 'definition' do
- before {
- disable_default_env_setup
- }
-
- before {
- allow_any_instance_of(described_class).to receive(:task)
- }
-
- let(:files) {
- %w(config/default.yaml config/local.yaml config/dev.yaml config/production.yaml)
- }
-
- it 'should define a task for each config file' do
- expect(subject).to have_received(:task).with('dev')
- expect(subject).to have_received(:task).with('production')
- end
-
- it 'should omit environment for the default config file' do
- expect(subject).not_to have_received(:task).with('default')
- end
-
- it 'should omit environment for the local config file' do
- expect(subject).not_to have_received(:task).with('local')
- end
- end
-
- describe 'config files to load' do
- let(:optional) { nil }
- let(:files) {
- %w(config/dev.yaml)
- }
-
- before {
- allow(Loader).to receive(:load_configuration)
- }
-
- before {
- allow(File).to receive(:exists?).and_return(true)
- allow(File).to receive(:exists?).with(optional).and_return(false)
- }
-
- subject! {
- described_class.new do |t|
- t.default_env = 'dev'
- end
- }
-
- before {
- Task['dev'].invoke
- }
-
- it 'should store configuration in configatron singleton' do
- expect(Loader).to have_received(:load_configuration).with(anything, configatron, any_args)
- end
-
- context 'default and local config files exist' do
- let(:optional) { nil }
-
- it 'should load all files' do
- expect(Loader)
- .to have_received(:load_configuration).with(hash_including({ config_files: %w(config/default.yaml config/dev.yaml config/local.yaml) }), any_args)
- end
- end
-
- context 'default config file does not exist' do
- let(:optional) { 'config/default.yaml' }
-
- it 'should load environment file and local file' do
- expect(Loader)
- .to have_received(:load_configuration).with(hash_including({ config_files: %w(config/dev.yaml config/local.yaml) }), any_args)
- end
- end
-
- context 'local config file does not exist' do
- let(:optional) { 'config/local.yaml' }
-
- it 'should load default file and environment file' do
- expect(Loader)
- .to have_received(:load_configuration).with(hash_including({ config_files: %w(config/default.yaml config/dev.yaml) }), any_args)
- end
- end
- end
-
- describe 'customization' do
- let(:customizer) { Proc.new {} }
- let(:files) {
- %w(config/dev.yaml)
- }
-
- subject! {
- described_class.new do |t|
- t.customizer = customizer
- end
- }
-
- before {
- allow(Loader).to receive(:load_configuration)
- }
-
- before {
- Task['dev'].invoke
- }
-
- it 'should pass customizer to loader' do
- expect(Loader).to have_received(:load_configuration).with(anything, anything, customizer)
- end
- end
-
- describe 'automatic environment setup' do
- let(:files) {
- %w(config/dev.yaml config/production.yaml)
- }
-
- before {
- Rake.application.top_level_tasks.clear
- Rake.application.top_level_tasks.push(*top_level_tasks)
- }
-
- context 'environment task defined in top-level Rake namespace' do
- subject! {
- described_class.new do |t|
- t.default_env = default_env
- end
- }
-
- context 'no default environment configured' do
- let(:default_env) { nil }
- let(:top_level_tasks) { [] }
-
- it 'should not add top-level environment tasks' do
- expect(Rake.application.top_level_tasks).to be_empty
- end
- end
-
- context 'default environment configured' do
- let(:default_env) { 'dev' }
-
- context 'no top-level environment task' do
- let(:top_level_tasks) { %w(foo) }
-
- it 'should prepend default top-level environment task' do
- expect(Rake.application.top_level_tasks).to eq([default_env] + top_level_tasks)
- end
- end
-
- context 'top-level environment task' do
- let(:top_level_tasks) { %w(foo production) }
-
- it 'should move top-level environment task to front' do
- expect(Rake.application.top_level_tasks).to eq(top_level_tasks.reverse)
- end
- end
- end
- end
-
- context 'environment task defined in Rake namespace' do
- subject! {
- namespace :foo do
- namespace :bar do
- described_class.new do |t|
- t.default_env = default_env
- end
- end
- end
- }
-
- context 'default environment configured' do
- let(:default_env) { 'dev' }
-
- context 'no top-level environment task' do
- let(:top_level_tasks) { %w(foo) }
-
- it 'should prepend default top-level environment task' do
- expect(Rake.application.top_level_tasks).to eq(["foo:bar:#{default_env}"] + top_level_tasks)
- end
- end
-
- context 'top-level environment task' do
- let(:top_level_tasks) { %w(foo foo:bar:production) }
-
- it 'should move top-level environment task to front' do
- expect(Rake.application.top_level_tasks).to eq(top_level_tasks.reverse)
- end
- end
- end
- end
- end
-end
+require 'configatron'
+
+include Rake
+include Rake::Funnel::Support::Environments
+include Rake::Funnel::Tasks
+
+describe Rake::Funnel::Tasks::Environments do
+ include Rake::DSL
+
+ before {
+ Task.clear
+ }
+
+ let(:files) { [] }
+
+ before {
+ allow(Dir).to receive(:[]).and_return(files)
+ }
+
+ def disable_default_env_setup
+ allow_any_instance_of(described_class).to receive(:default_environment_setup)
+ end
+
+ describe 'defaults' do
+ before {
+ disable_default_env_setup
+ }
+
+ its(:store) { should == configatron }
+ its(:base_dir) { should == 'config' }
+ its(:default_env) { should be_nil }
+ its(:default_config) { should == 'default' }
+ its(:local_config) { should == 'local' }
+ its(:customizer) { should be_nil }
+
+ describe 'overriding defaults' do
+ let(:store) { OpenStruct.new }
+
+ subject {
+ described_class.new do |t|
+ t.store = store
+ t.base_dir = 'custom base_dir'
+ t.default_env = 'custom default_env'
+ t.default_config = 'custom default_config'
+ t.local_config = 'custom local_config'
+ t.customizer = proc {}
+ end
+ }
+
+ its(:store) { should == store }
+ its(:base_dir) { should == subject.base_dir }
+ its(:default_env) { should == subject.default_env }
+ its(:default_config) { should == subject.default_config }
+ its(:local_config) { should == subject.local_config }
+ its(:customizer) { should be_instance_of(Proc) }
+ end
+ end
+
+ describe 'definition' do
+ before {
+ disable_default_env_setup
+ }
+
+ before {
+ allow_any_instance_of(described_class).to receive(:task)
+ }
+
+ let(:files) {
+ %w(config/default.yaml config/local.yaml config/dev.yaml config/production.yaml)
+ }
+
+ it 'should define a task for each config file' do
+ expect(subject).to have_received(:task).with('dev')
+ expect(subject).to have_received(:task).with('production')
+ end
+
+ it 'should omit environment for the default config file' do
+ expect(subject).not_to have_received(:task).with('default')
+ end
+
+ it 'should omit environment for the local config file' do
+ expect(subject).not_to have_received(:task).with('local')
+ end
+ end
+
+ describe 'config files to load' do
+ let(:optional) { nil }
+ let(:files) {
+ %w(config/dev.yaml)
+ }
+
+ before {
+ allow(Loader).to receive(:load_configuration)
+ }
+
+ before {
+ allow(File).to receive(:exist?).and_return(true)
+ allow(File).to receive(:exist?).with(optional).and_return(false)
+ }
+
+ subject! {
+ described_class.new do |t|
+ t.default_env = 'dev'
+ end
+ }
+
+ before {
+ Task['dev'].invoke
+ }
+
+ it 'should store configuration in configatron singleton' do
+ expect(Loader).to have_received(:load_configuration).with(anything, configatron, any_args)
+ end
+
+ context 'default and local config files exist' do
+ let(:optional) { nil }
+
+ it 'should load all files' do
+ expect(Loader)
+ .to have_received(:load_configuration)
+ .with(hash_including({ config_files: %w(config/default.yaml config/dev.yaml config/local.yaml) }), any_args)
+ end
+ end
+
+ context 'default config file does not exist' do
+ let(:optional) { 'config/default.yaml' }
+
+ it 'should load environment file and local file' do
+ expect(Loader)
+ .to have_received(:load_configuration)
+ .with(hash_including({ config_files: %w(config/dev.yaml config/local.yaml) }), any_args)
+ end
+ end
+
+ context 'local config file does not exist' do
+ let(:optional) { 'config/local.yaml' }
+
+ it 'should load default file and environment file' do
+ expect(Loader)
+ .to have_received(:load_configuration).with(hash_including({ config_files: %w(config/default.yaml config/dev.yaml) }), any_args)
+ end
+ end
+ end
+
+ describe 'customization' do
+ let(:customizer) { proc {} }
+ let(:files) {
+ %w(config/dev.yaml)
+ }
+
+ subject! {
+ described_class.new do |t|
+ t.customizer = customizer
+ end
+ }
+
+ before {
+ allow(Loader).to receive(:load_configuration)
+ }
+
+ before {
+ Task['dev'].invoke
+ }
+
+ it 'should pass customizer to loader' do
+ expect(Loader).to have_received(:load_configuration).with(anything, anything, customizer)
+ end
+ end
+
+ describe 'automatic environment setup' do
+ let(:files) {
+ %w(config/dev.yaml config/production.yaml)
+ }
+
+ before {
+ Rake.application.top_level_tasks.clear
+ Rake.application.top_level_tasks.push(*top_level_tasks)
+ }
+
+ context 'environment task defined in top-level Rake namespace' do
+ subject! {
+ described_class.new do |t|
+ t.default_env = default_env
+ end
+ }
+
+ context 'no default environment configured' do
+ let(:default_env) { nil }
+ let(:top_level_tasks) { [] }
+
+ it 'should not add top-level environment tasks' do
+ expect(Rake.application.top_level_tasks).to be_empty
+ end
+ end
+
+ context 'default environment configured' do
+ let(:default_env) { 'dev' }
+
+ context 'no top-level environment task' do
+ let(:top_level_tasks) { %w(foo) }
+
+ it 'should prepend default top-level environment task' do
+ expect(Rake.application.top_level_tasks).to eq([default_env] + top_level_tasks)
+ end
+ end
+
+ context 'top-level environment task' do
+ let(:top_level_tasks) { %w(foo production) }
+
+ it 'should move top-level environment task to front' do
+ expect(Rake.application.top_level_tasks).to eq(top_level_tasks.reverse)
+ end
+ end
+ end
+ end
+
+ context 'environment task defined in Rake namespace' do
+ subject! {
+ namespace :foo do
+ namespace :bar do
+ described_class.new do |t|
+ t.default_env = default_env
+ end
+ end
+ end
+ }
+
+ context 'default environment configured' do
+ let(:default_env) { 'dev' }
+
+ context 'no top-level environment task' do
+ let(:top_level_tasks) { %w(foo) }
+
+ it 'should prepend default top-level environment task' do
+ expect(Rake.application.top_level_tasks).to eq(["foo:bar:#{default_env}"] + top_level_tasks)
+ end
+ end
+
+ context 'top-level environment task' do
+ let(:top_level_tasks) { %w(foo foo:bar:production) }
+
+ it 'should move top-level environment task to front' do
+ expect(Rake.application.top_level_tasks).to eq(top_level_tasks.reverse)
+ end
+ end
+ end
+ end
+ end
+end