Commit 63ed2432919adaf4492687eb794b4680f388ec1a
1 parent
6ffbb1ae
Exists in
master
and in
9 other branches
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>
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 | ... | ... |