1
0
Fork 0
mirror of https://github.com/kbparagua/paloma synced 2023-03-27 23:21:17 -04:00
paloma/spec/generator_spec.rb
2013-01-17 01:10:38 +08:00

427 lines
12 KiB
Ruby

require 'spec_helper'
require 'generator_spec/test_case'
require 'fileutils'
TEMP = "#{File.dirname(__FILE__)}/tmp/"
# rails g paloma:setup
feature Paloma::SetupGenerator do
include GeneratorSpec::TestCase
destination TEMP
before do
prepare_destination
run_generator
end
specify do
destination_root.should have_structure {
directory Paloma.destination do
file 'paloma.js'
file 'index.js'
end
}
end
end
def mimic_setup
# Mimic SetupGenerator results before running the AddGenerator
FileUtils.cd TEMP
FileUtils.mkpath Paloma.destination
File.open("#{Paloma.destination}/index.js", 'w') { |f| f.write('//= require ./paloma.js')}
end
# rails g paloma:add sexy_controller
feature Paloma::AddGenerator, 'creating controller folder only' do
include GeneratorSpec::TestCase
destination TEMP
arguments ['sexy_controller']
before do
prepare_destination
mimic_setup
run_generator
end
specify do
destination_root.should have_structure {
directory Paloma.destination do
directory 'sexy_controller' do
file '_callbacks.js' do
contains "//= require ./_local.js"
contains "//= require_tree ."
end
file '_local.js' do
contains "Paloma.sexy_controller = {"
end
end
file 'index.js' do
contains '//= require ./sexy_controller/_callbacks.js'
end
end
}
end
end
# rails g paloma:add namespace/new_controller_folder
feature Paloma::AddGenerator, 'creating a namespaced controller folder' do
include GeneratorSpec::TestCase
destination TEMP
arguments ['namespace/new_controller_folder']
before do
prepare_destination
mimic_setup
run_generator
end
specify do
destination_root.should have_structure {
directory Paloma.destination do
directory 'namespace' do
directory 'new_controller_folder' do
file '_callbacks.js' do
contains '//= require ./_local.js'
contains '//= require_tree .'
end
file '_local.js' do
contains 'Paloma.namespace.new_controller_folder = {'
end
end
file '_callbacks.js' do
contains "//= require ./_local.js"
contains "//= require ./new_controller_folder/_callbacks.js"
end
file '_local.js' do
contains "Paloma.namespace = {"
end
end
file 'index.js' do
contains "//= require ./namespace/_callbacks.js"
end
end
}
end
end
# rails g paloma:add new_controller_folder new_action
feature Paloma::AddGenerator, 'creating both controller folder and action file' do
include GeneratorSpec::TestCase
destination TEMP
arguments ['new_controller_folder', 'new_action']
before do
prepare_destination
mimic_setup
run_generator
end
specify do
destination_root.should have_structure {
directory Paloma.destination do
directory 'new_controller_folder' do
file 'new_action.js' do
contains "Paloma.callbacks['new_controller_folder/new_action']"
end
file '_callbacks.js' do
contains "//= require ./_local.js"
contains "//= require_tree ."
end
file '_local.js' do
contains "Paloma.new_controller_folder = {"
end
end
file 'index.js' do
contains "//= require ./new_controller_folder/_callbacks.js"
end
end
}
end
end
# rails g paloma:add existing_controller_folder new_action
feature Paloma::AddGenerator, 'creating action with existing controller folder' do
include GeneratorSpec::TestCase
destination TEMP
arguments ['existing_controller_folder', 'new_action']
before do
prepare_destination
mimic_setup
Dir.mkdir "#{Paloma.destination}/existing_controller_folder"
run_generator
end
specify do
destination_root.should have_structure {
directory Paloma.destination do
directory 'existing_controller_folder' do
file 'new_action.js' do
contains "Paloma.callbacks['existing_controller_folder/new_action']"
end
end
end
}
end
end
# rails g paloma:add namespace/new_controller_folder new_action
feature Paloma::AddGenerator, 'creating namespaced controller folder and action file' do
include GeneratorSpec::TestCase
destination TEMP
arguments ['namespace/new_controller_folder', 'new_action']
before do
prepare_destination
mimic_setup
run_generator
end
specify do
destination_root.should have_structure {
directory Paloma.destination do
directory 'namespace' do
directory 'new_controller_folder' do
file 'new_action.js' do
contains "Paloma.callbacks['namespace/new_controller_folder/new_action']"
end
file '_local.js' do
contains 'Paloma.namespace.new_controller_folder = {'
end
file '_callbacks.js' do
contains '//= require ./_local.js'
contains '//= require_tree .'
end
end
file '_callbacks.js' do
contains "//= require ./_local.js"
contains "//= require ./new_controller_folder/_callbacks.js"
end
file '_local.js' do
contains "Paloma.namespace = {"
end
end
file 'index.js' do
contains "//= require ./namespace/_callbacks.js"
end
end
}
end
end
# rails g paloma:add existing_namespace/new_controller_folder new_action
feature Paloma::AddGenerator, 'creating controller folder and action file under an existing namespace' do
include GeneratorSpec::TestCase
destination TEMP
arguments ['existing_namespace/new_controller_folder', 'new_action']
before do
prepare_destination
mimic_setup
Dir.mkdir "#{Paloma.destination}/existing_namespace"
run_generator
end
specify do
destination_root.should have_structure {
directory Paloma.destination do
directory 'existing_namespace' do
directory 'new_controller_folder' do
file 'new_action.js' do
contains "Paloma.callbacks['existing_namespace/new_controller_folder/new_action']"
end
file '_local.js' do
contains 'Paloma.existing_namespace.new_controller_folder = {'
end
end
# Investigate this.
# How is _callback.js generated here? It is not on the before block
file '_callbacks.js' do
contains "//= require ./new_controller_folder/_callbacks.js"
end
end
end
}
end
end
# rails g paloma:add new_controller_folder first_action second_action third_action
feature Paloma::AddGenerator, 'create controller folder and multiple action files' do
include GeneratorSpec::TestCase
destination TEMP
arguments ['new_controller_folder', 'first_action', 'second_action', 'third_action']
before do
prepare_destination
mimic_setup
run_generator
end
specify do
destination_root.should have_structure {
directory Paloma.destination do
directory 'new_controller_folder' do
file '_local.js' do
contains 'Paloma.new_controller_folder = {'
end
file 'first_action.js' do
contains "Paloma.callbacks['new_controller_folder/first_action']"
end
file 'second_action.js' do
contains "Paloma.callbacks['new_controller_folder/second_action']"
end
file 'third_action.js' do
contains "Paloma.callbacks['new_controller_folder/third_action']"
end
end
file 'index.js' do
contains '//= require ./new_controller_folder/_callbacks.js'
end
end
}
end
end
# rails g paloma:add existing_controller_folder first_action second_action third_action
feature Paloma::AddGenerator, 'create multiple actions in an existing controller folder' do
include GeneratorSpec::TestCase
destination TEMP
arguments ['existing_controller_folder', 'first_action', 'second_action', 'third_action']
before do
prepare_destination
mimic_setup
Dir.mkdir "#{Paloma.destination}/existing_controller_folder"
run_generator
end
specify do
destination_root.should have_structure {
directory Paloma.destination do
directory 'existing_controller_folder' do
['first', 'second', 'third'].each do |action|
file ("#{action}_action.js") do
contains "Paloma.callbacks['existing_controller_folder/#{action}_action']"
end
end
end
end
}
end
end
# rails g paloma:add namespace/new_controller_folder first_action second_action third_action
feature Paloma::AddGenerator, 'create multiple actions in a new namespaced controller' do
include GeneratorSpec::TestCase
destination TEMP
arguments ['namespace/new_controller_folder', 'first_action', 'second_action', 'third_action']
before do
prepare_destination
mimic_setup
run_generator
end
specify do
destination_root.should have_structure {
directory Paloma.destination do
directory 'namespace' do
directory 'new_controller_folder' do
file '_local.js' do
contains 'Paloma.namespace.new_controller_folder'
end
['first', 'second', 'third'].each do |action|
file ("#{action}_action.js") do
contains "Paloma.callbacks['namespace/new_controller_folder/#{action}_action']"
end
end
end
file '_callbacks.js' do
contains '//= require ./new_controller_folder/_callbacks.js'
end
file '_local.js' do
contains 'Paloma.namespace'
end
end
file 'index.js' do
contains '//= require ./namespace/_callbacks.js'
end
end
}
end
end
# rails g paloma:add existing_namespace/new_controller_folder first_action second_action third_action
feature Paloma::AddGenerator, 'create multiple actions in an existing namespaced controller' do
include GeneratorSpec::TestCase
destination TEMP
arguments ['existing_namespace/new_controller_folder', 'first_action', 'second_action', 'third_action']
before do
prepare_destination
mimic_setup
Dir.mkdir "#{Paloma.destination}/existing_namespace"
File.open("#{Paloma.destination}/existing_namespace/_callbacks.js", 'w'){ |f|
f.write('//= require ./_local.js') }
run_generator
end
specify do
destination_root.should have_structure {
directory Paloma.destination do
directory 'existing_namespace' do
directory 'new_controller_folder' do
['first', 'second', 'third'].each do |action|
file ("#{action}_action.js") do
contains "Paloma.callbacks['existing_namespace/new_controller_folder/#{action}_action']"
end
end
file '_local.js' do
contains 'Paloma.existing_namespace.new_controller_folder'
end
end
file '_callbacks.js' do
contains '//= require ./new_controller_folder/_callbacks.js'
end
end
end
}
end
end