Commit dc2b6c840246d1cc0aff4290881ae78e4cbc60ff

Authored by Rodrigo Souto
2 parents a0e7c590 63ed2432

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
src/noosfero-spb/gov_user/controllers/gov_user_plugin_controller.rb
... ... @@ -66,8 +66,9 @@ class GovUserPluginController < ApplicationController
66 66 redirect_to "/" if !request.xhr? || params[:query].blank?
67 67  
68 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 70 institutions -= selected_institutions
  71 +
71 72 institutions_list = institutions.map { |institution|
72 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 6  
7 7 attr_accessible :institution, :institution_id
8 8  
9   - validate :verify_institution
  9 + validate :verify_institution, :verify_organization_rating_values
10 10  
11 11 private
12 12  
... ... @@ -18,4 +18,11 @@ OrganizationRating.class_eval do
18 18 end
19 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 28 end
... ...
src/noosfero-spb/gov_user/lib/institution.rb
... ... @@ -39,8 +39,8 @@ class Institution < ActiveRecord::Base
39 39  
40 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 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 68  
69 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 73 end
74 74  
75 75 should "method create_institution return the html for modal" do
... ... @@ -114,11 +114,10 @@ class GovUserPluginControllerTest < ActionController::TestCase
114 114 fields[:institutions][:acronym] = "SPI"
115 115  
116 116 xhr :get, :new_institution, fields
117   -
118 117 json_response = ActiveSupport::JSON.decode(@response.body)
119 118  
120 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 121 end
123 122  
124 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 12 "Ministerio Publico da Uniao",
13 13 "MPU",
14 14 "BR",
15   - "DF",
  15 + "Distrito Federal",
16 16 "Gama",
17 17 @juridical_nature,
18 18 @gov_power,
... ... @@ -27,30 +27,31 @@ class InstitutionTest < ActiveSupport::TestCase
27 27 JuridicalNature.destroy_all
28 28 @institution = nil
29 29 end
  30 +
30 31 should "not save institutions without name" do
31 32 @institution.name = nil
32 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 35 end
35 36  
36 37 should "not save if institution has invalid type" do
37 38 invalid_msg = "Type invalid, only public and private institutions are allowed."
38 39 @institution.type = "Other type"
39 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 42 end
42 43  
43 44 should "not save without country" do
44 45 @institution.community.country = nil
45 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 48 end
48 49  
49 50 should "not save without state" do
50 51 @institution.community.state = nil
51 52  
52 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 55 end
55 56  
56 57 should "not save without city" do
... ... @@ -58,6 +59,18 @@ class InstitutionTest < ActiveSupport::TestCase
58 59 @institution.community.state = "DF"
59 60  
60 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 75 end
63 76 end
... ...
src/noosfero-spb/gov_user/test/unit/organization_rating_test.rb
... ... @@ -10,20 +10,49 @@ class OrganizationRatingTest &lt; ActiveSupport::TestCase
10 10 @environment.save
11 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 14 person = fast_create(Person)
15 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 18 community_rating = OrganizationRating.new(:person => person, :value => 3, :organization => community, :institution => private_institution)
19 19  
20 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 30 private_institution.save
23   - community_rating.institution = private_institution
24 31  
25 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 56 end
28 57  
29 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 18 OperatingSystemName.create(:name=>"CentOS")
19 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 45 Given /^I type in "([^"]*)" in autocomplete list "([^"]*)" and I choose "([^"]*)"$/ do |typed, input_field_selector, should_select|
22 46 # Wait the page javascript load
23 47 sleep 1
... ...