require_relative "../test_helper" require 'enterprise_registration_controller' # Re-raise errors caught by the controller. class EnterpriseRegistrationController; def rescue_action(e) raise e end; end class EnterpriseRegistrationControllerTest < ActionController::TestCase # all_fixtures:users all_fixtures def setup super @controller = EnterpriseRegistrationController.new @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new login_as 'ze' end should 'go to the first step on index' do get :index assert_response :success assert_template 'basic_information' end should 'get back to entering basic information if data is invalid' do post :index, :create_enterprise => {} assert_response :success assert_template 'basic_information' end should 'skip prompt for selection validator if approval method is admin' do env = Environment.default env.organization_approval_method = :admin env.save region = fast_create(Region, {}) data = { :name => 'My new enterprise', :identifier => 'mynew', :region_id => region.id } create_enterprise = CreateEnterprise.new(data) post :index, :create_enterprise => data assert_template 'confirmation' end should 'skip prompt for selection validator if approval method is none' do env = Environment.default env.organization_approval_method = :none env.save region = fast_create(Region, {}) data = { :name => 'My new enterprise', :identifier => 'mynew', :region_id => region.id } create_enterprise = CreateEnterprise.new(data) post :index, :create_enterprise => data assert_template 'creation' end should 'show template welcome page on creation view' do env = Environment.default env.organization_approval_method = :none env.save region = fast_create(Region, {}) template = Enterprise.create!(:name => 'Enterprise Template', :identifier => 'enterprise-template', :is_template => true) welcome_page = TinyMceArticle.create!(:name => 'Welcome Page', :profile => template, :body => 'This is the welcome page of enterprise template.', :published => true) template.welcome_page = welcome_page template.save! data = { :name => 'My new enterprise', :identifier => 'mynew', :region_id => region.id, :template_id => template.id } create_enterprise = CreateEnterprise.new(data) post :index, :create_enterprise => data assert_match /#{welcome_page.body}/, @response.body end should 'prompt for selecting validator if approval method is region' do env = Environment.default env.organization_approval_method = :region env.save data = { 'name' => 'My new enterprise', 'identifier' => 'mynew' } create_enterprise = CreateEnterprise.new CreateEnterprise.expects(:new).with(data).returns(create_enterprise) validator1 = mock() validator1.expects(:id).returns(1) validator1.expects(:name).returns("validator1") validator1.expects(:validation_methodology).returns("methodology1") validator1.expects(:validation_restrictions).returns("restrictions1") validator2 = mock() validator2.expects(:id).returns(2) validator2.expects(:name).returns("validator2") validator2.expects(:validation_methodology).returns("methodology2") validator2.expects(:validation_restrictions).returns("restrictions2") region = mock() region.expects(:validators).returns([validator1, validator2]).at_least_once create_enterprise.expects(:region).returns(region) # all data but validator selected create_enterprise.expects(:valid_before_selecting_target?).returns(true) create_enterprise.stubs(:valid?).returns(false) post :index, :create_enterprise => data assert_template 'select_validator' end should 'provide confirmation at the end of the process' do data = { 'name' => 'My new enterprise', 'identifier' => 'mynew' } create_enterprise = CreateEnterprise.new CreateEnterprise.expects(:new).with(data).returns(create_enterprise) # all including validator selected validator = mock() validator.stubs(:name).returns("lalala") create_enterprise.expects(:valid_before_selecting_target?).returns(true) create_enterprise.stubs(:valid?).returns(true) # validator already selected create_enterprise.expects(:save!) create_enterprise.expects(:target).returns(validator) post :index, :create_enterprise => data assert_template 'confirmation' end should 'filter html from name' do post :index, :create_enterprise => { 'name' => 'name', 'identifier' => 'mynew' } assert_sanitized assigns(:create_enterprise).name end should 'filter html from address' do post :index, :create_enterprise => { 'name' => 'name', 'identifier' => 'mynew', :address => 'address' } assert_sanitized assigns(:create_enterprise).address end should 'filter html from contact_phone' do post :index, :create_enterprise => { 'name' => 'name', 'identifier' => 'mynew', :contact_phone => 'contact_phone' } assert_sanitized assigns(:create_enterprise).contact_phone end should 'filter html from contact_person' do post :index, :create_enterprise => { 'name' => 'name', 'identifier' => 'mynew', :contact_person => 'contact_person' } assert_sanitized assigns(:create_enterprise).contact_person end should 'filter html from acronym' do post :index, :create_enterprise => { 'name' => 'name', 'identifier' => 'mynew', :acronym => 'acronym' } assert_sanitized assigns(:create_enterprise).acronym end should 'filter html from legal_form' do post :index, :create_enterprise => { 'name' => 'name', 'identifier' => 'mynew', :legal_form => 'legal_form' } assert_sanitized assigns(:create_enterprise).legal_form end should 'filter html from economic_activity' do post :index, :create_enterprise => { 'name' => 'name', 'identifier' => 'mynew', :economic_activity => 'economic_activity' } assert_sanitized assigns(:create_enterprise).economic_activity end should 'filter html from management_information' do post :index, :create_enterprise => { 'name' => 'name', 'identifier' => 'mynew', :management_information => 'management_information' } assert_sanitized assigns(:create_enterprise).management_information end should 'load only regions with validator organizations if approval method is region' do env = Environment.default env.organization_approval_method = :region env.save reg1 = env.regions.create!(:name => 'Region with validator') reg1.validators.create!(:name => 'Validator one', :identifier => 'validator-one') reg2 = env.regions.create!(:name => 'Region without validator') get :index assert_includes assigns(:regions), [reg1.name, reg1.id] assert_tag :tag => 'option', :content => "Region with validator" assert_no_tag :tag => 'option', :content => "Region without validator" end should 'set current environment as the task target if approval method is admin' do environment = Environment.new(:name => "Another environment") environment.organization_approval_method = :admin environment.save @controller.stubs(:environment).returns(environment) get :index assert_equal assigns(:create_enterprise).target, environment end should 'include hidden fields supplied by plugins on enterprise registration' do class Plugin1 < Noosfero::Plugin def enterprise_registration_hidden_fields {'plugin1' => 'Plugin 1'} end end class Plugin2 < Noosfero::Plugin def enterprise_registration_hidden_fields {'plugin2' => 'Plugin 2'} end end Noosfero::Plugin.stubs(:all).returns([Plugin1.name, Plugin2.name]) environment = Environment.default environment.enable_plugin(Plugin1.name) environment.enable_plugin(Plugin2.name) get :index assert_tag :tag => 'input', :attributes => {:id => 'create_enterprise_plugin1', :type => 'hidden', :value => 'Plugin 1'} assert_tag :tag => 'input', :attributes => {:id => 'create_enterprise_plugin2', :type => 'hidden', :value => 'Plugin 2'} end should 'display only templates of the current environment' do env2 = fast_create(Environment) template1 = fast_create(Enterprise, :name => 'template1', :environment_id => Environment.default.id, :is_template => true) template2 = fast_create(Enterprise, :name => 'template2', :environment_id => Environment.default.id, :is_template => true) template3 = fast_create(Enterprise, :name => 'template3', :environment_id => env2.id, :is_template => true) get :index assert_select '#template-options' do |elements| assert_match /template1/, elements[0].to_s assert_match /template2/, elements[0].to_s assert_no_match /template3/, elements[0].to_s end end end