Commit 8e7de0e4dc54e7d1c7fdd5cd2acb43de139e2c95
1 parent
d244c631
Exists in
master
and in
29 other branches
[stoa] Making invitation works only once
Showing
2 changed files
with
21 additions
and
3 deletions
Show diff stats
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 |