Commit 63ed2432919adaf4492687eb794b4680f388ec1a

Authored by Gabriel Silva
1 parent 6ffbb1ae

Fixes Institution search and Organization Rating validation

- Fixes institution search
- Adds validation on user reports (no more report values when institution is nil)

Signed-off-by: Gabriel Silva <gabriel93.silva@gmail.com>
Signed-off-by: Pedro de Lyra <pedrodelyra@gmail.com>
Signed-off-by: Luciano Prestes <lucianopcbr@gmail.com>
Signed-off-by: Tallys Martins <tallysmartins@yahoo.com.br>
src/noosfero-spb/gov_user/controllers/gov_user_plugin_controller.rb
@@ -66,8 +66,9 @@ class GovUserPluginController &lt; ApplicationController @@ -66,8 +66,9 @@ class GovUserPluginController &lt; 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 &lt; ActiveRecord::Base @@ -39,8 +39,8 @@ class Institution &lt; 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 &lt; ActionController::TestCase @@ -68,8 +68,8 @@ class GovUserPluginControllerTest &lt; 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 &lt; ActionController::TestCase @@ -114,11 +114,10 @@ class GovUserPluginControllerTest &lt; 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 &lt; ActiveSupport::TestCase @@ -12,7 +12,7 @@ class InstitutionTest &lt; 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 &lt; ActiveSupport::TestCase @@ -27,30 +27,31 @@ class InstitutionTest &lt; 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 &lt; ActiveSupport::TestCase @@ -58,6 +59,18 @@ class InstitutionTest &lt; 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 &lt; ActiveSupport::TestCase @@ -10,20 +10,49 @@ class OrganizationRatingTest &lt; 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