Commit dc2b6c840246d1cc0aff4290881ae78e4cbc60ff
Exists in
master
and in
16 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 | 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 < 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 | ... | ... |