Commit 8e7de0e4dc54e7d1c7fdd5cd2acb43de139e2c95

Authored by Rodrigo Souto
1 parent d244c631

[stoa] Making invitation works only once

plugins/stoa/lib/ext/person.rb
@@ -6,8 +6,13 @@ class Person @@ -6,8 +6,13 @@ class Person
6 validate :usp_id_or_invitation, :if => lambda { |person| person.environment && person.environment.plugin_enabled?(StoaPlugin)} 6 validate :usp_id_or_invitation, :if => lambda { |person| person.environment && person.environment.plugin_enabled?(StoaPlugin)}
7 7
8 def usp_id_or_invitation 8 def usp_id_or_invitation
9 - if usp_id.blank? && (invitation_code.blank? || !Task.pending.find(:first, :conditions => {:code => invitation_code})) 9 + if usp_id.blank? && (invitation_code.blank? || !invitation_task)
10 errors.add(:usp_id, "can't register without usp_id or invitation") 10 errors.add(:usp_id, "can't register without usp_id or invitation")
11 end 11 end
12 end 12 end
  13 +
  14 + def invitation_task
  15 + Task.pending.find(:first, :conditions => {:code => invitation_code}) ||
  16 + Task.finished.find(:first, :conditions => {:code => invitation_code, :target_id => id})
  17 + end
13 end 18 end
plugins/stoa/test/unit/person.rb
@@ -39,8 +39,8 @@ class StoaPlugin::Person < ActiveSupport::TestCase @@ -39,8 +39,8 @@ class StoaPlugin::Person < ActiveSupport::TestCase
39 assert !person.errors.invalid?(:usp_id) 39 assert !person.errors.invalid?(:usp_id)
40 end 40 end
41 41
42 - should 'not allow person register with a finished task' do  
43 - t = Task.create!(:code => 87654321) 42 + should 'not allow person to be saved with a finished invitation that is not his own' do
  43 + t = Task.create!(:code => 87654321, :target_id => 1)
44 t.finish 44 t.finish
45 person = Person.new(:environment => environment, :invitation_code => 87654321) 45 person = Person.new(:environment => environment, :invitation_code => 87654321)
46 person.valid? 46 person.valid?
@@ -48,5 +48,18 @@ class StoaPlugin::Person < ActiveSupport::TestCase @@ -48,5 +48,18 @@ class StoaPlugin::Person < ActiveSupport::TestCase
48 assert person.errors.invalid?(:usp_id) 48 assert person.errors.invalid?(:usp_id)
49 end 49 end
50 50
  51 + should 'allow person to be saved with a finished invitation if it is his own' do
  52 + t = Task.create!(:code => 87654321)
  53 + user = User.new(:login => 'some-person', :email => 'some-person@example.com', :password => 'test', :password_confirmation => 'test', :person_data => {:environment => environment, :invitation_code => 87654321})
  54 + user.save!
  55 + person = user.person
  56 + t.target_id = person.id
  57 + t.finish
  58 +
  59 + person.valid?
  60 + assert !person.errors.invalid?(:usp_id)
  61 + end
  62 +
  63 +
51 end 64 end
52 65