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 |