From b30ec443f836a8285cb826c6df4839cbe7409b2c Mon Sep 17 00:00:00 2001 From: Rodrigo Souto Date: Tue, 15 May 2012 15:23:18 -0300 Subject: [PATCH] [stoa] Allowing invited users to register without usp id --- plugins/stoa/lib/ext/person.rb | 10 +++++++++- plugins/stoa/lib/stoa_plugin.rb | 4 +++- plugins/stoa/test/functional/account_controller_test.rb | 5 +++++ plugins/stoa/test/unit/person.rb | 33 +++++++++++++++++++++++++++------ plugins/stoa/test/unit/usp_user.rb | 1 + 5 files changed, 45 insertions(+), 8 deletions(-) diff --git a/plugins/stoa/lib/ext/person.rb b/plugins/stoa/lib/ext/person.rb index 816f116..514696b 100644 --- a/plugins/stoa/lib/ext/person.rb +++ b/plugins/stoa/lib/ext/person.rb @@ -1,5 +1,13 @@ require_dependency 'person' class Person - validates_uniqueness_of :usp_id + validates_uniqueness_of :usp_id, :allow_nil => true + settings_items :invitation_code + validate :usp_id_or_invitation, :if => lambda { |person| person.environment && person.environment.plugin_enabled?(StoaPlugin)} + + def usp_id_or_invitation + if usp_id.blank? && (invitation_code.blank? || !Task.find(:first, :conditions => {:code => invitation_code})) + errors.add(:usp_id, "can't register without usp_id or invitation") + end + end end diff --git a/plugins/stoa/lib/stoa_plugin.rb b/plugins/stoa/lib/stoa_plugin.rb index ae12fbf..78b2837 100644 --- a/plugins/stoa/lib/stoa_plugin.rb +++ b/plugins/stoa/lib/stoa_plugin.rb @@ -49,8 +49,10 @@ class StoaPlugin < Noosfero::Plugin def account_controller_filters block = lambda do + params[:profile_data] ||= {} + params[:profile_data][:invitation_code] = params[:invitation_code] if request.post? - if !StoaPlugin::UspUser.matches?(params[:profile_data][:usp_id], params[:confirmation_field], params[:confirmation_value]) + if !params[:invitation_code] && !StoaPlugin::UspUser.matches?(params[:profile_data][:usp_id], params[:confirmation_field], params[:confirmation_value]) @person = Person.new @person.errors.add(:usp_id, _(' validation failed')) render :action => :signup diff --git a/plugins/stoa/test/functional/account_controller_test.rb b/plugins/stoa/test/functional/account_controller_test.rb index 75a113c..a58a22c 100644 --- a/plugins/stoa/test/functional/account_controller_test.rb +++ b/plugins/stoa/test/functional/account_controller_test.rb @@ -29,4 +29,9 @@ class AccountControllerTest < ActionController::TestCase assert_nil assigns(:person).errors[:usp_id] end + should 'inlude invitation_code param in the person\'s attributes' do + get :signup, :invitation_code => 12345678 + assert assigns(:person).invitation_code == '12345678' + end + end diff --git a/plugins/stoa/test/unit/person.rb b/plugins/stoa/test/unit/person.rb index f3dbd6e..416cc0e 100644 --- a/plugins/stoa/test/unit/person.rb +++ b/plugins/stoa/test/unit/person.rb @@ -3,15 +3,36 @@ require File.dirname(__FILE__) + '/../../../../test/test_helper' class StoaPlugin::Person < ActiveSupport::TestCase should 'validates uniqueness of usp_id' do - usp_id = 12345678 - person = create_user('some-person').person - person.usp_id = usp_id - person.save! - another_person = Person.new(:name => "Another person", :identifier => 'another-person', :usp_id => usp_id) + usp_id = 87654321 + fast_create(Person, :usp_id => usp_id) + another_person = Person.new(:usp_id => usp_id) + another_person.valid? - assert !another_person.valid? assert another_person.errors.invalid?(:usp_id) end + should 'allow nil usp_id only if person has an invitation_code' do + environment = Environment.default + environment.enable_plugin(StoaPlugin) + person = Person.new(:environment => environment) + person.valid? + assert person.errors.invalid?(:usp_id) + + Task.create!(:code => 12345678) + person.invitation_code = 12345678 + person.valid? + + assert !person.errors.invalid?(:usp_id) + end + + should 'allow multiple nil usp_id' do + fast_create(Person) + Task.create!(:code => 87654321) + person = Person.new(:invitation_code => 87654321) + person.valid? + + assert !person.errors.invalid?(:usp_id) + end + end diff --git a/plugins/stoa/test/unit/usp_user.rb b/plugins/stoa/test/unit/usp_user.rb index 204777e..2fa9704 100644 --- a/plugins/stoa/test/unit/usp_user.rb +++ b/plugins/stoa/test/unit/usp_user.rb @@ -8,6 +8,7 @@ class StoaPlugin::UspUserTest < ActiveSupport::TestCase @db = Tempfile.new('stoa-test') configs = ActiveRecord::Base.configurations['stoa'] = {:adapter => 'sqlite3', :database => @db.path} ActiveRecord::Base.establish_connection(:stoa) + ActiveRecord::Schema.verbose = false ActiveRecord::Schema.create_table "pessoa" do |t| t.integer "codpes" t.text "numcpf" -- libgit2 0.21.2