Commit dc2b6c840246d1cc0aff4290881ae78e4cbc60ff
Exists in
master
and in
9 other branches
Merge branch 'fix_use_report_institution' into 'master'
Fixes use report validation and institutions search - Correção do bug na pesquisa de instituições: resultados provenientes de todos os environments - Correção na validação do relato de uso: valores só são aceitos se há uma instituição relacionada Closes #700, #298 See merge request !170
Showing
7 changed files
with
91 additions
and
18 deletions
Show diff stats
src/noosfero-spb/gov_user/controllers/gov_user_plugin_controller.rb
| @@ -66,8 +66,9 @@ class GovUserPluginController < ApplicationController | @@ -66,8 +66,9 @@ class GovUserPluginController < ApplicationController | ||
| 66 | redirect_to "/" if !request.xhr? || params[:query].blank? | 66 | redirect_to "/" if !request.xhr? || params[:query].blank? |
| 67 | 67 | ||
| 68 | selected_institutions = Institution.where(id: params[:selected_institutions]).select([:id, :name]) | 68 | selected_institutions = Institution.where(id: params[:selected_institutions]).select([:id, :name]) |
| 69 | - institutions = Institution.search_institution(params[:query]).select([:id, :name]) | 69 | + institutions = Institution.search_institution(params[:query], environment).select("institutions.id, institutions.name") |
| 70 | institutions -= selected_institutions | 70 | institutions -= selected_institutions |
| 71 | + | ||
| 71 | institutions_list = institutions.map { |institution| | 72 | institutions_list = institutions.map { |institution| |
| 72 | {:value=>institution.name, :id=>institution.id} | 73 | {:value=>institution.name, :id=>institution.id} |
| 73 | } | 74 | } |
src/noosfero-spb/gov_user/lib/ext/organization_rating.rb
| @@ -6,7 +6,7 @@ OrganizationRating.class_eval do | @@ -6,7 +6,7 @@ OrganizationRating.class_eval do | ||
| 6 | 6 | ||
| 7 | attr_accessible :institution, :institution_id | 7 | attr_accessible :institution, :institution_id |
| 8 | 8 | ||
| 9 | - validate :verify_institution | 9 | + validate :verify_institution, :verify_organization_rating_values |
| 10 | 10 | ||
| 11 | private | 11 | private |
| 12 | 12 | ||
| @@ -18,4 +18,11 @@ OrganizationRating.class_eval do | @@ -18,4 +18,11 @@ OrganizationRating.class_eval do | ||
| 18 | end | 18 | end |
| 19 | end | 19 | end |
| 20 | 20 | ||
| 21 | + def verify_organization_rating_values | ||
| 22 | + if self.institution.nil? && (self.people_benefited || self.saved_value) | ||
| 23 | + self.errors.add :institution, _("Report values cannot be saved without an institution") | ||
| 24 | + false | ||
| 25 | + end | ||
| 26 | + end | ||
| 27 | + | ||
| 21 | end | 28 | end |
src/noosfero-spb/gov_user/lib/institution.rb
| @@ -39,8 +39,8 @@ class Institution < ActiveRecord::Base | @@ -39,8 +39,8 @@ class Institution < ActiveRecord::Base | ||
| 39 | 39 | ||
| 40 | belongs_to :community | 40 | belongs_to :community |
| 41 | 41 | ||
| 42 | - scope :search_institution, lambda{ |value| | ||
| 43 | - where("name ilike ? OR acronym ilike ?", "%#{value}%", "%#{value}%" ) | 42 | + scope :search_institution, lambda{ |value, env| |
| 43 | + joins(:community).where("(profiles.name ilike ? OR institutions.acronym ilike ?) AND profiles.environment_id = ?", "%#{value}%", "%#{value}%", env.id) | ||
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | validate :validate_country, :validate_state, :validate_city, | 46 | validate :validate_country, :validate_state, :validate_city, |
src/noosfero-spb/gov_user/test/functional/gov_user_plugin_controller_test.rb
| @@ -68,8 +68,8 @@ class GovUserPluginControllerTest < ActionController::TestCase | @@ -68,8 +68,8 @@ class GovUserPluginControllerTest < ActionController::TestCase | ||
| 68 | 68 | ||
| 69 | json_response = ActiveSupport::JSON.decode(@response.body) | 69 | json_response = ActiveSupport::JSON.decode(@response.body) |
| 70 | 70 | ||
| 71 | - assert_equal "Ministerio Publico da Uniao", json_response[0]["value"] | ||
| 72 | - assert_equal "Tribunal Regional da Uniao", json_response[1]["value"] | 71 | + assert json_response.any?{|r| r["value"] == "Ministerio Publico da Uniao"} |
| 72 | + assert json_response.any?{|r| r["value"] == "Tribunal Regional da Uniao"} | ||
| 73 | end | 73 | end |
| 74 | 74 | ||
| 75 | should "method create_institution return the html for modal" do | 75 | should "method create_institution return the html for modal" do |
| @@ -114,11 +114,10 @@ class GovUserPluginControllerTest < ActionController::TestCase | @@ -114,11 +114,10 @@ class GovUserPluginControllerTest < ActionController::TestCase | ||
| 114 | fields[:institutions][:acronym] = "SPI" | 114 | fields[:institutions][:acronym] = "SPI" |
| 115 | 115 | ||
| 116 | xhr :get, :new_institution, fields | 116 | xhr :get, :new_institution, fields |
| 117 | - | ||
| 118 | json_response = ActiveSupport::JSON.decode(@response.body) | 117 | json_response = ActiveSupport::JSON.decode(@response.body) |
| 119 | 118 | ||
| 120 | assert_false json_response["success"] | 119 | assert_false json_response["success"] |
| 121 | - assert json_response["errors"].include? "Cnpj can't be blank" | 120 | + assert_false json_response["errors"].blank? |
| 122 | end | 121 | end |
| 123 | 122 | ||
| 124 | should "create public institution without cnpj" do | 123 | should "create public institution without cnpj" do |
src/noosfero-spb/gov_user/test/unit/institution_test.rb
| @@ -12,7 +12,7 @@ class InstitutionTest < ActiveSupport::TestCase | @@ -12,7 +12,7 @@ class InstitutionTest < ActiveSupport::TestCase | ||
| 12 | "Ministerio Publico da Uniao", | 12 | "Ministerio Publico da Uniao", |
| 13 | "MPU", | 13 | "MPU", |
| 14 | "BR", | 14 | "BR", |
| 15 | - "DF", | 15 | + "Distrito Federal", |
| 16 | "Gama", | 16 | "Gama", |
| 17 | @juridical_nature, | 17 | @juridical_nature, |
| 18 | @gov_power, | 18 | @gov_power, |
| @@ -27,30 +27,31 @@ class InstitutionTest < ActiveSupport::TestCase | @@ -27,30 +27,31 @@ class InstitutionTest < ActiveSupport::TestCase | ||
| 27 | JuridicalNature.destroy_all | 27 | JuridicalNature.destroy_all |
| 28 | @institution = nil | 28 | @institution = nil |
| 29 | end | 29 | end |
| 30 | + | ||
| 30 | should "not save institutions without name" do | 31 | should "not save institutions without name" do |
| 31 | @institution.name = nil | 32 | @institution.name = nil |
| 32 | assert_equal false, @institution.save | 33 | assert_equal false, @institution.save |
| 33 | - assert_equal true, @institution.errors.full_messages.include?("Name can't be blank") | 34 | + assert_equal true, @institution.errors.messages.keys.include?(:name) |
| 34 | end | 35 | end |
| 35 | 36 | ||
| 36 | should "not save if institution has invalid type" do | 37 | should "not save if institution has invalid type" do |
| 37 | invalid_msg = "Type invalid, only public and private institutions are allowed." | 38 | invalid_msg = "Type invalid, only public and private institutions are allowed." |
| 38 | @institution.type = "Other type" | 39 | @institution.type = "Other type" |
| 39 | assert_equal false, @institution.save | 40 | assert_equal false, @institution.save |
| 40 | - assert_equal true, @institution.errors.full_messages.include?(invalid_msg) | 41 | + assert_equal true, @institution.errors.messages.keys.include?(:type) |
| 41 | end | 42 | end |
| 42 | 43 | ||
| 43 | should "not save without country" do | 44 | should "not save without country" do |
| 44 | @institution.community.country = nil | 45 | @institution.community.country = nil |
| 45 | assert_equal false, @institution.save | 46 | assert_equal false, @institution.save |
| 46 | - assert_equal true, @institution.errors.full_messages.include?("Country can't be blank") | 47 | + assert_equal true, @institution.errors.messages.keys.include?(:country) |
| 47 | end | 48 | end |
| 48 | 49 | ||
| 49 | should "not save without state" do | 50 | should "not save without state" do |
| 50 | @institution.community.state = nil | 51 | @institution.community.state = nil |
| 51 | 52 | ||
| 52 | assert_equal false, @institution.save | 53 | assert_equal false, @institution.save |
| 53 | - assert_equal true, @institution.errors.full_messages.include?("State can't be blank") | 54 | + assert_equal true, @institution.errors.messages.keys.include?(:state) |
| 54 | end | 55 | end |
| 55 | 56 | ||
| 56 | should "not save without city" do | 57 | should "not save without city" do |
| @@ -58,6 +59,18 @@ class InstitutionTest < ActiveSupport::TestCase | @@ -58,6 +59,18 @@ class InstitutionTest < ActiveSupport::TestCase | ||
| 58 | @institution.community.state = "DF" | 59 | @institution.community.state = "DF" |
| 59 | 60 | ||
| 60 | assert_equal false, @institution.save | 61 | assert_equal false, @institution.save |
| 61 | - assert_equal true, @institution.errors.full_messages.include?("City can't be blank") | 62 | + assert_equal true, @institution.errors.messages.keys.include?(:city) |
| 63 | + end | ||
| 64 | + | ||
| 65 | + should "only return institutions of a specific environment" do | ||
| 66 | + env1 = Environment.create(:name => "Environment One") | ||
| 67 | + env2 = Environment.create(:name => "Environment Two") | ||
| 68 | + | ||
| 69 | + env1.communities << @institution.community | ||
| 70 | + search_result_env1 = Institution.search_institution("Ministerio", env1).collect{ |i| i.id } | ||
| 71 | + search_result_env2 = Institution.search_institution("Ministerio", env2).collect{ |i| i.id } | ||
| 72 | + | ||
| 73 | + assert_includes search_result_env1, @institution.id | ||
| 74 | + assert_not_includes search_result_env2, @institution.id | ||
| 62 | end | 75 | end |
| 63 | end | 76 | end |
src/noosfero-spb/gov_user/test/unit/organization_rating_test.rb
| @@ -10,20 +10,49 @@ class OrganizationRatingTest < ActiveSupport::TestCase | @@ -10,20 +10,49 @@ class OrganizationRatingTest < ActiveSupport::TestCase | ||
| 10 | @environment.save | 10 | @environment.save |
| 11 | end | 11 | end |
| 12 | 12 | ||
| 13 | - should "validate institution if there is an institution_id" do | 13 | + should "not validate organization rating if the institution is not saved" do |
| 14 | person = fast_create(Person) | 14 | person = fast_create(Person) |
| 15 | community = fast_create(Community) | 15 | community = fast_create(Community) |
| 16 | - private_institution = build_private_institution "huehue", "hue", "11.222.333/4444-55" | ||
| 17 | 16 | ||
| 17 | + private_institution = build_private_institution "Some Institution", "Some Inst Incorporated", "11.222.333/4444-55" | ||
| 18 | community_rating = OrganizationRating.new(:person => person, :value => 3, :organization => community, :institution => private_institution) | 18 | community_rating = OrganizationRating.new(:person => person, :value => 3, :organization => community, :institution => private_institution) |
| 19 | 19 | ||
| 20 | assert_equal false, community_rating.valid? | 20 | assert_equal false, community_rating.valid? |
| 21 | + assert_equal true, community_rating.errors.messages.keys.include?(:institution) | ||
| 22 | + end | ||
| 21 | 23 | ||
| 24 | + should "validate organization rating if the institution is saved" do | ||
| 25 | + person = fast_create(Person) | ||
| 26 | + community = fast_create(Community) | ||
| 27 | + | ||
| 28 | + private_institution = build_private_institution "Some Institution", "Some Inst Incorporated", "11.222.333/4444-55" | ||
| 29 | + community_rating = OrganizationRating.new(:person => person, :value => 3, :organization => community, :institution => private_institution) | ||
| 22 | private_institution.save | 30 | private_institution.save |
| 23 | - community_rating.institution = private_institution | ||
| 24 | 31 | ||
| 25 | assert_equal true, community_rating.valid? | 32 | assert_equal true, community_rating.valid? |
| 26 | - assert_equal false, community_rating.errors[:institution].include?("institution not found") | 33 | + assert_equal false, community_rating.errors.messages.keys.include?(:institution) |
| 34 | + end | ||
| 35 | + | ||
| 36 | + should "not create organization rating with saved value and no institution" do | ||
| 37 | + person = fast_create(Person) | ||
| 38 | + community = fast_create(Community) | ||
| 39 | + | ||
| 40 | + community_rating = OrganizationRating.new(:person => person, :value => 3, :organization => community, :institution => nil) | ||
| 41 | + community_rating.saved_value = "2000" | ||
| 42 | + | ||
| 43 | + assert_equal false, community_rating.save | ||
| 44 | + assert_equal true, community_rating.errors.messages.keys.include?(:institution) | ||
| 45 | + end | ||
| 46 | + | ||
| 47 | + should "not create organization rating with benefited people value and no institution" do | ||
| 48 | + person = fast_create(Person) | ||
| 49 | + community = fast_create(Community) | ||
| 50 | + | ||
| 51 | + community_rating = OrganizationRating.new(:person => person, :value => 3, :organization => community, :institution => nil) | ||
| 52 | + community_rating.people_benefited = "100" | ||
| 53 | + | ||
| 54 | + assert_equal false, community_rating.save | ||
| 55 | + assert_equal true, community_rating.errors.messages.keys.include?(:institution) | ||
| 27 | end | 56 | end |
| 28 | 57 | ||
| 29 | private | 58 | private |
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 | @@ -18,6 +18,30 @@ Given /^SoftwareInfo has initial default values on database$/ do | ||
| 18 | OperatingSystemName.create(:name=>"CentOS") | 18 | OperatingSystemName.create(:name=>"CentOS") |
| 19 | end | 19 | end |
| 20 | 20 | ||
| 21 | +Given /^Institutions has initial default values on database$/ do | ||
| 22 | + GovernmentalPower.create(:name => "Executivo") | ||
| 23 | + GovernmentalPower.create(:name => "Legislativo") | ||
| 24 | + GovernmentalPower.create(:name => "Judiciario") | ||
| 25 | + | ||
| 26 | + GovernmentalSphere.create(:name => "Federal") | ||
| 27 | + | ||
| 28 | + JuridicalNature.create(:name => "Autarquia") | ||
| 29 | + JuridicalNature.create(:name => "Administracao Direta") | ||
| 30 | + JuridicalNature.create(:name => "Empresa Publica") | ||
| 31 | + JuridicalNature.create(:name => "Fundacao") | ||
| 32 | + JuridicalNature.create(:name => "Orgao Autonomo") | ||
| 33 | + JuridicalNature.create(:name => "Sociedade") | ||
| 34 | + JuridicalNature.create(:name => "Sociedade Civil") | ||
| 35 | + JuridicalNature.create(:name => "Sociedade de Economia Mista") | ||
| 36 | + | ||
| 37 | + national_region = NationalRegion.new | ||
| 38 | + national_region.name = "Distrito Federal" | ||
| 39 | + national_region.national_region_code = '35' | ||
| 40 | + national_region.national_region_type_id = NationalRegionType::STATE | ||
| 41 | + national_region.save | ||
| 42 | +end | ||
| 43 | + | ||
| 44 | + | ||
| 21 | Given /^I type in "([^"]*)" in autocomplete list "([^"]*)" and I choose "([^"]*)"$/ do |typed, input_field_selector, should_select| | 45 | Given /^I type in "([^"]*)" in autocomplete list "([^"]*)" and I choose "([^"]*)"$/ do |typed, input_field_selector, should_select| |
| 22 | # Wait the page javascript load | 46 | # Wait the page javascript load |
| 23 | sleep 1 | 47 | sleep 1 |