require 'spec_helper' require 'generators/adminpanel/resource/resource_generator' describe Adminpanel::Generators::ResourceGenerator do destination File.expand_path('../../dummy/tmp', __FILE__) before do prepare_destination Rails::Generators.options[:rails][:orm] = :active_record end after do prepare_destination end describe 'with arguments %w(post name description:wysiwyg number:float quantity:integer date:datepicker photo:images)' do before do run_generator %w( post name description:wysiwyg number:float flag:boolean quantity:integer date:datepicker photo:images ) end it 'should generate the posts migration' do migration_file('db/migrate/create_posts_table.rb').should be_a_migration end context 'the migration' do it 'should have the correct fields' do migration_file('db/migrate/create_posts_table.rb').should( contain(/t.string :name/) && contain(/t.float :number/) && contain(/t.boolean :flag/) && contain(/t.integer :quantity/) && contain(/t.string :date/) && contain(/t.text :description/) ) end end context 'the controller' do it 'should generate posts controller' do file('app/controllers/adminpanel/posts_controller.rb').should exist end it 'should have the params whitelisted' do file('app/controllers/adminpanel/posts_controller.rb').should( contain(/params.require(:post).permit/) && contain(/:name/) && contain(/:description/) && contain(/:number/) && contain(/:flag/) && contain(/:quantity/) && contain(/:date/) && contain(/{:postfiles_attributes => \[:id, :file, :_destroy\]}/) ) end end it 'should generate post model' do file('app/models/adminpanel/post.rb').should exist end context 'the model' do it 'should generate the model with correct values' do file('app/models/adminpanel/post.rb').should( contain(/include Adminpanel::Base/) && contain(/mount_images :postfiles/) && contain(/'photos' => \{/) && contain(/'type' => 'adminpanel_file_field'/) ) end it 'should have the description hash' do file('app/models/adminpanel/post.rb').should( contain(/'description' => \{/) && contain(/'type' => 'wysiwyg_field',/) && contain(/'name' => \{/) && contain(/'type' => 'text_field',/) && contain(/'number' => \{/) && contain(/'type' => 'text_field',/) && contain(/'flag' => \{/) && contain(/'type' => 'boolean',/) && contain(/'quantity' => \{/) && contain(/'type' => 'number_field',/) && contain(/'date' => \{/) && contain(/'type' => 'datepicker_field',/) && contain(/'postfiles' => \{/) && contain(/'type' => 'adminpanel_file_field',/) ) end end end describe 'with arguments categorizations category:belongs_to product:belongs_to' do before do run_generator %w( categorization category:belongs_to product:belongs_to ) end it 'shouldn\'t generate categorizations controller' do file('app/controllers/adminpanel/categorizations_controller').should_not exist end it 'should generate categorization model' do file('app/models/adminpanel/categorization.rb').should( contain(/belongs_to :product/) && contain(/belongs_to :category/) ) end end describe 'with arguments post name products,categorizations:has_many_through' do before do run_generator %w( post name products,categorizations:has_many_through ) end it 'should generate the model with has_many :categorizations' do file('app/models/adminpanel/post.rb').should( contain(/has_many :categorizations/) && contain(/has_many :products, :through => :categorizations/) ) end end end