diff --git a/src/noosfero-spb/gov_user/controllers/gov_user_plugin_controller.rb b/src/noosfero-spb/gov_user/controllers/gov_user_plugin_controller.rb index 15b9ecd..991f36f 100644 --- a/src/noosfero-spb/gov_user/controllers/gov_user_plugin_controller.rb +++ b/src/noosfero-spb/gov_user/controllers/gov_user_plugin_controller.rb @@ -66,8 +66,9 @@ class GovUserPluginController < ApplicationController redirect_to "/" if !request.xhr? || params[:query].blank? selected_institutions = Institution.where(id: params[:selected_institutions]).select([:id, :name]) - institutions = Institution.search_institution(params[:query]).select([:id, :name]) + institutions = Institution.search_institution(params[:query], environment).select("institutions.id, institutions.name") institutions -= selected_institutions + institutions_list = institutions.map { |institution| {:value=>institution.name, :id=>institution.id} } diff --git a/src/noosfero-spb/gov_user/lib/ext/organization_rating.rb b/src/noosfero-spb/gov_user/lib/ext/organization_rating.rb index d2b36c8..7992f75 100644 --- a/src/noosfero-spb/gov_user/lib/ext/organization_rating.rb +++ b/src/noosfero-spb/gov_user/lib/ext/organization_rating.rb @@ -6,7 +6,7 @@ OrganizationRating.class_eval do attr_accessible :institution, :institution_id - validate :verify_institution + validate :verify_institution, :verify_organization_rating_values private @@ -18,4 +18,11 @@ OrganizationRating.class_eval do end end + def verify_organization_rating_values + if self.institution.nil? && (self.people_benefited || self.saved_value) + self.errors.add :institution, _("Report values cannot be saved without an institution") + false + end + end + end diff --git a/src/noosfero-spb/gov_user/lib/institution.rb b/src/noosfero-spb/gov_user/lib/institution.rb index 5773e18..ba59672 100644 --- a/src/noosfero-spb/gov_user/lib/institution.rb +++ b/src/noosfero-spb/gov_user/lib/institution.rb @@ -39,8 +39,8 @@ class Institution < ActiveRecord::Base belongs_to :community - scope :search_institution, lambda{ |value| - where("name ilike ? OR acronym ilike ?", "%#{value}%", "%#{value}%" ) + scope :search_institution, lambda{ |value, env| + joins(:community).where("(profiles.name ilike ? OR institutions.acronym ilike ?) AND profiles.environment_id = ?", "%#{value}%", "%#{value}%", env.id) } validate :validate_country, :validate_state, :validate_city, diff --git a/src/noosfero-spb/gov_user/test/functional/gov_user_plugin_controller_test.rb b/src/noosfero-spb/gov_user/test/functional/gov_user_plugin_controller_test.rb index ae22769..21f9d5b 100644 --- a/src/noosfero-spb/gov_user/test/functional/gov_user_plugin_controller_test.rb +++ b/src/noosfero-spb/gov_user/test/functional/gov_user_plugin_controller_test.rb @@ -68,8 +68,8 @@ class GovUserPluginControllerTest < ActionController::TestCase json_response = ActiveSupport::JSON.decode(@response.body) - assert_equal "Ministerio Publico da Uniao", json_response[0]["value"] - assert_equal "Tribunal Regional da Uniao", json_response[1]["value"] + assert json_response.any?{|r| r["value"] == "Ministerio Publico da Uniao"} + assert json_response.any?{|r| r["value"] == "Tribunal Regional da Uniao"} end should "method create_institution return the html for modal" do @@ -114,11 +114,10 @@ class GovUserPluginControllerTest < ActionController::TestCase fields[:institutions][:acronym] = "SPI" xhr :get, :new_institution, fields - json_response = ActiveSupport::JSON.decode(@response.body) assert_false json_response["success"] - assert json_response["errors"].include? "Cnpj can't be blank" + assert_false json_response["errors"].blank? end should "create public institution without cnpj" do diff --git a/src/noosfero-spb/gov_user/test/unit/institution_test.rb b/src/noosfero-spb/gov_user/test/unit/institution_test.rb index c4c77e5..4408ab6 100644 --- a/src/noosfero-spb/gov_user/test/unit/institution_test.rb +++ b/src/noosfero-spb/gov_user/test/unit/institution_test.rb @@ -12,7 +12,7 @@ class InstitutionTest < ActiveSupport::TestCase "Ministerio Publico da Uniao", "MPU", "BR", - "DF", + "Distrito Federal", "Gama", @juridical_nature, @gov_power, @@ -27,30 +27,31 @@ class InstitutionTest < ActiveSupport::TestCase JuridicalNature.destroy_all @institution = nil end + should "not save institutions without name" do @institution.name = nil assert_equal false, @institution.save - assert_equal true, @institution.errors.full_messages.include?("Name can't be blank") + assert_equal true, @institution.errors.messages.keys.include?(:name) end should "not save if institution has invalid type" do invalid_msg = "Type invalid, only public and private institutions are allowed." @institution.type = "Other type" assert_equal false, @institution.save - assert_equal true, @institution.errors.full_messages.include?(invalid_msg) + assert_equal true, @institution.errors.messages.keys.include?(:type) end should "not save without country" do @institution.community.country = nil assert_equal false, @institution.save - assert_equal true, @institution.errors.full_messages.include?("Country can't be blank") + assert_equal true, @institution.errors.messages.keys.include?(:country) end should "not save without state" do @institution.community.state = nil assert_equal false, @institution.save - assert_equal true, @institution.errors.full_messages.include?("State can't be blank") + assert_equal true, @institution.errors.messages.keys.include?(:state) end should "not save without city" do @@ -58,6 +59,18 @@ class InstitutionTest < ActiveSupport::TestCase @institution.community.state = "DF" assert_equal false, @institution.save - assert_equal true, @institution.errors.full_messages.include?("City can't be blank") + assert_equal true, @institution.errors.messages.keys.include?(:city) + end + + should "only return institutions of a specific environment" do + env1 = Environment.create(:name => "Environment One") + env2 = Environment.create(:name => "Environment Two") + + env1.communities << @institution.community + search_result_env1 = Institution.search_institution("Ministerio", env1).collect{ |i| i.id } + search_result_env2 = Institution.search_institution("Ministerio", env2).collect{ |i| i.id } + + assert_includes search_result_env1, @institution.id + assert_not_includes search_result_env2, @institution.id end end diff --git a/src/noosfero-spb/gov_user/test/unit/organization_rating_test.rb b/src/noosfero-spb/gov_user/test/unit/organization_rating_test.rb index 50c8731..a2adad3 100644 --- a/src/noosfero-spb/gov_user/test/unit/organization_rating_test.rb +++ b/src/noosfero-spb/gov_user/test/unit/organization_rating_test.rb @@ -10,20 +10,49 @@ class OrganizationRatingTest < ActiveSupport::TestCase @environment.save end - should "validate institution if there is an institution_id" do + should "not validate organization rating if the institution is not saved" do person = fast_create(Person) community = fast_create(Community) - private_institution = build_private_institution "huehue", "hue", "11.222.333/4444-55" + private_institution = build_private_institution "Some Institution", "Some Inst Incorporated", "11.222.333/4444-55" community_rating = OrganizationRating.new(:person => person, :value => 3, :organization => community, :institution => private_institution) assert_equal false, community_rating.valid? + assert_equal true, community_rating.errors.messages.keys.include?(:institution) + end + should "validate organization rating if the institution is saved" do + person = fast_create(Person) + community = fast_create(Community) + + private_institution = build_private_institution "Some Institution", "Some Inst Incorporated", "11.222.333/4444-55" + community_rating = OrganizationRating.new(:person => person, :value => 3, :organization => community, :institution => private_institution) private_institution.save - community_rating.institution = private_institution assert_equal true, community_rating.valid? - assert_equal false, community_rating.errors[:institution].include?("institution not found") + assert_equal false, community_rating.errors.messages.keys.include?(:institution) + end + + should "not create organization rating with saved value and no institution" do + person = fast_create(Person) + community = fast_create(Community) + + community_rating = OrganizationRating.new(:person => person, :value => 3, :organization => community, :institution => nil) + community_rating.saved_value = "2000" + + assert_equal false, community_rating.save + assert_equal true, community_rating.errors.messages.keys.include?(:institution) + end + + should "not create organization rating with benefited people value and no institution" do + person = fast_create(Person) + community = fast_create(Community) + + community_rating = OrganizationRating.new(:person => person, :value => 3, :organization => community, :institution => nil) + community_rating.people_benefited = "100" + + assert_equal false, community_rating.save + assert_equal true, community_rating.errors.messages.keys.include?(:institution) end private diff --git a/src/noosfero-spb/software_communities/features/step_definitions/software_communities_steps.rb b/src/noosfero-spb/software_communities/features/step_definitions/software_communities_steps.rb index 588af1c..35f27e1 100644 --- a/src/noosfero-spb/software_communities/features/step_definitions/software_communities_steps.rb +++ b/src/noosfero-spb/software_communities/features/step_definitions/software_communities_steps.rb @@ -18,6 +18,30 @@ Given /^SoftwareInfo has initial default values on database$/ do OperatingSystemName.create(:name=>"CentOS") end +Given /^Institutions has initial default values on database$/ do + GovernmentalPower.create(:name => "Executivo") + GovernmentalPower.create(:name => "Legislativo") + GovernmentalPower.create(:name => "Judiciario") + + GovernmentalSphere.create(:name => "Federal") + + JuridicalNature.create(:name => "Autarquia") + JuridicalNature.create(:name => "Administracao Direta") + JuridicalNature.create(:name => "Empresa Publica") + JuridicalNature.create(:name => "Fundacao") + JuridicalNature.create(:name => "Orgao Autonomo") + JuridicalNature.create(:name => "Sociedade") + JuridicalNature.create(:name => "Sociedade Civil") + JuridicalNature.create(:name => "Sociedade de Economia Mista") + + national_region = NationalRegion.new + national_region.name = "Distrito Federal" + national_region.national_region_code = '35' + national_region.national_region_type_id = NationalRegionType::STATE + national_region.save +end + + Given /^I type in "([^"]*)" in autocomplete list "([^"]*)" and I choose "([^"]*)"$/ do |typed, input_field_selector, should_select| # Wait the page javascript load sleep 1 -- libgit2 0.21.2