hero_generator 0.0.1.alpha5 → 0.0.1.alpha6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. data/lib/generators/hero/authentication/USAGE +8 -0
  2. data/lib/generators/hero/authentication/authentication_generator.rb +107 -0
  3. data/lib/generators/hero/authentication/templates/config/config.yml +22 -0
  4. data/lib/generators/hero/authentication/templates/config/initializers/action_mailer.rb +60 -0
  5. data/lib/generators/hero/authentication/templates/config/initializers/load_config.rb +3 -0
  6. data/lib/generators/hero/authentication/templates/config/locales/en.yml +52 -0
  7. data/lib/generators/hero/authentication/templates/config/routes.rb +29 -0
  8. data/lib/generators/hero/authentication/templates/controllers/application_controller.rb +9 -0
  9. data/lib/generators/hero/authentication/templates/controllers/confirmation_controller.rb +80 -0
  10. data/lib/generators/hero/authentication/templates/controllers/sessions_controller.rb +24 -0
  11. data/lib/generators/hero/authentication/templates/controllers/settings_controller.rb +33 -0
  12. data/lib/generators/hero/authentication/templates/controllers/users_controller.rb +32 -0
  13. data/lib/generators/hero/authentication/templates/mailers/confirmation_mailer.rb +30 -0
  14. data/lib/generators/hero/authentication/templates/migrations/20120213162337_create_users.rb +15 -0
  15. data/lib/generators/hero/authentication/templates/models/authentication.rb +33 -0
  16. data/lib/generators/hero/authentication/templates/models/user.rb +144 -0
  17. data/lib/generators/hero/authentication/templates/tests/spec/controllers/sessions_controller_spec.rb +6 -0
  18. data/lib/generators/hero/authentication/templates/tests/spec/controllers/users_controller_spec.rb +6 -0
  19. data/lib/generators/hero/authentication/templates/tests/spec/factories.rb +20 -0
  20. data/lib/generators/hero/authentication/templates/tests/spec/models/user_spec.rb +154 -0
  21. data/lib/generators/hero/authentication/templates/tests/spec/requests/new_email_request_spec.rb +69 -0
  22. data/lib/generators/hero/authentication/templates/tests/spec/requests/password_resets_spec.rb +58 -0
  23. data/lib/generators/hero/authentication/templates/tests/spec/requests/user_confirmation_spec.rb +61 -0
  24. data/lib/generators/hero/authentication/templates/tests/spec/requests/user_sign_in_spec.rb +13 -0
  25. data/lib/generators/hero/authentication/templates/tests/spec/requests/user_sign_up_spec.rb +55 -0
  26. data/lib/generators/hero/authentication/templates/tests/spec/routing/confirmation_mailer_spec.rb +49 -0
  27. data/lib/generators/hero/authentication/templates/tests/spec/spec_helper.rb +34 -0
  28. data/lib/generators/hero/authentication/templates/tests/spec/support/mailer_macros.rb +10 -0
  29. data/lib/generators/hero/authentication/templates/views/confirmation/new_email_token.html.haml +11 -0
  30. data/lib/generators/hero/authentication/templates/views/confirmation/order_new_password.html.haml +11 -0
  31. data/lib/generators/hero/authentication/templates/views/confirmation/password_token.html.haml +11 -0
  32. data/lib/generators/hero/authentication/templates/views/confirmation/recover_password.html.haml +15 -0
  33. data/lib/generators/hero/authentication/templates/views/confirmation/registration.html.haml +10 -0
  34. data/lib/generators/hero/authentication/templates/views/confirmation/resend_signup_token.html.haml +13 -0
  35. data/lib/generators/hero/authentication/templates/views/confirmation/user_email.html.haml +0 -0
  36. data/lib/generators/hero/authentication/templates/views/confirmation_mailer/new_email_request.text.haml +9 -0
  37. data/lib/generators/hero/authentication/templates/views/confirmation_mailer/registration.text.haml +11 -0
  38. data/lib/generators/hero/authentication/templates/views/confirmation_mailer/resend_signup_token.text.haml +11 -0
  39. data/lib/generators/hero/authentication/templates/views/confirmation_mailer/send_password_reset.text.haml +9 -0
  40. data/lib/generators/hero/authentication/templates/views/sessions/new.html.haml +16 -0
  41. data/lib/generators/hero/authentication/templates/views/settings/index.html.haml +28 -0
  42. data/lib/generators/hero/authentication/templates/views/users/new.html.haml +35 -0
  43. data/lib/generators/hero/hero.rb +28 -0
  44. data/lib/hero_generator/engine.rb +6 -0
  45. data/lib/hero_generator/version.rb +1 -1
  46. metadata +53 -11
  47. data/.gitignore +0 -4
  48. data/hero_generator.gemspec +0 -28
@@ -0,0 +1,144 @@
1
+ class User < ActiveRecord::Base
2
+ attr_accessible :email, :password, :password_confirmation, :new_email_confirmation, :set_new_email
3
+
4
+ attr_accessor :password, :password_confirmation, :update_password, :new_email_confirmation, :set_new_email
5
+ before_save :encrypt_password
6
+
7
+ validates_format_of :email, :with => /^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i
8
+ validates_presence_of :email
9
+ validates_uniqueness_of :email, :unless => :confirmed_duplicate
10
+
11
+ validates_presence_of :password, :if => :should_validate_password?
12
+ validates_length_of :password, :if => :should_validate_password?,
13
+ :within => 3..30,
14
+ :too_short => 'too short message',
15
+ :too_long => 'too long message'
16
+
17
+ validates_confirmation_of :password, :if => :should_validate_password?
18
+
19
+ #set new email
20
+ validates_presence_of :new_email, :if => :should_validate_new_email?
21
+ validates_format_of :new_email, :with => /^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i,
22
+ :if => :should_validate_new_email?
23
+
24
+ validates_presence_of :new_email_confirmation, :if => :should_validate_new_email?
25
+ validates_confirmation_of :new_email, :if => :should_validate_new_email?
26
+
27
+
28
+ def new_email=(new_email)
29
+ self[:new_email] = new_email if self.set_new_email.present?
30
+ end
31
+
32
+
33
+ def confirm_signup!
34
+ update_attribute(:confirmed, Time.now)
35
+ update_attribute(:signup_token, nil)
36
+ end
37
+
38
+ def confirm_password!(password)
39
+ update_attribute(:password, password)
40
+ update_attribute(:password_token, nil)
41
+ end
42
+
43
+ def confirm_new_email!
44
+ update_attribute(:email, new_email)
45
+ update_attribute(:new_email_token, nil)
46
+ end
47
+
48
+ def confirmed?
49
+ !self.confirmed.nil?
50
+ end
51
+
52
+ def self.confirmed
53
+ where("confirmed IS NOT NULL")
54
+ end
55
+
56
+ def self.with_email(email)
57
+ where(:email => email)
58
+ end
59
+
60
+ # Wenn der User sich registriert, dann wird ein signup_token für ihn hinterlegt.
61
+ # Dieser Token wird per Mail verschickt. Der User kann sich nun per Klick auf den
62
+ # Tokenlink verifizieren. Sollte die Mail nicht mehr erreichbar sein, so kann der User
63
+ # unter Angabe seiner Email einen neuen signup_Token anfordern. Der alte Token ist
64
+ # ab diesem Zeitpunkt ungültig.
65
+
66
+ # Nach erfolgreicher Verifizierung der Email-Adresse) wird das
67
+ # Feld confirmed mit einem Datum gefüllt. Ab diesem Zeitpunkt kann keine neuer
68
+ # Confirmation-Token generiert und verschickt werden.
69
+
70
+ def confirmed_duplicate
71
+ if ((User.confirmed.with_email(self.email).count == 0) || (User.with_email(self.email).count == 0))
72
+ true
73
+ else
74
+ self.id = User.confirmed.with_email(self.email).first.id
75
+ false
76
+ end
77
+ end
78
+
79
+ def should_validate_new_email?
80
+ set_new_email.present?
81
+ end
82
+
83
+ def should_validate_password?
84
+ update_password || new_record?
85
+ end
86
+
87
+ def self.authenticate(email, password)
88
+ user = find_by_email(email)
89
+ if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
90
+ user
91
+ else
92
+ nil
93
+ end
94
+ end
95
+
96
+ def encrypt_password
97
+ if password.present?
98
+ self.password_salt = BCrypt::Engine.generate_salt
99
+ self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
100
+ end
101
+ end
102
+
103
+
104
+ def send_password_reset
105
+ if generate_token(:password_token)
106
+ ConfirmationMailer.send_password_reset( self ).deliver
107
+ end
108
+ end
109
+
110
+ def send_registration
111
+ if generate_token(:signup_token)
112
+ ConfirmationMailer.registration( self ).deliver
113
+ end
114
+ end
115
+
116
+ def resend_signup_token
117
+ if !confirmed? && generate_token(:signup_token)
118
+ ConfirmationMailer.resend_signup_token( self ).deliver
119
+ end
120
+ end
121
+
122
+ def send_new_email_request
123
+ if generate_token(:new_email_token)
124
+ ConfirmationMailer.new_email_request( self ).deliver
125
+ end
126
+ end
127
+
128
+ def send_new_email( new_email )
129
+ if self.set_new_email.present?
130
+ if self.save
131
+ send_new_email_request
132
+ self.set_new_email = false
133
+ end
134
+ end
135
+ end
136
+
137
+ private
138
+
139
+ def generate_token( token )
140
+ (defined?( token ) && update_attribute( token, SecureRandom.hex(13) ))? true : false
141
+ end
142
+ end
143
+
144
+
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe SessionsController do
4
+
5
+
6
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe UsersController do
4
+
5
+
6
+ end
@@ -0,0 +1,20 @@
1
+ #Factory.define :propertyname do |f|
2
+ # f.p0 "eins"
3
+ # f.p1 ""
4
+ # f.p2 ""
5
+ # f.p3 ""
6
+ #end
7
+
8
+
9
+ Factory.define :user do |u|
10
+
11
+ u.email { Factory.next(:email) }
12
+ u.password 'secret'
13
+ #u.password_confirmation 'secret'
14
+ end
15
+
16
+
17
+ Factory.sequence :email do |n|
18
+ names = %w[ joe bob sue ]
19
+ "#{names[rand names.count]}#{n}@somewhere.com"
20
+ end
@@ -0,0 +1,154 @@
1
+ require 'spec_helper'
2
+
3
+ describe User do
4
+
5
+ before(:each) do
6
+ @user = Factory.build(:user)
7
+ end
8
+
9
+ it "should have an email field" do
10
+ @user.should respond_to(:email)
11
+ end
12
+
13
+ it "should be valid when created by factory" do
14
+ @user.should be_valid
15
+ end
16
+
17
+ it "should be invalid without email" do
18
+ @user.email = nil
19
+ @user.should_not be_valid
20
+ end
21
+
22
+ it "should be invalid without password" do
23
+ @user.password = nil
24
+ @user.should_not be_valid
25
+ end
26
+
27
+ it "should only accept real emails" do
28
+ @user.email = nil
29
+
30
+ [ 'foo', 'foo.org', 'foo@.org', 'foo@', 'foo@@bar.org', '@bar.org' ].each do |email|
31
+ @user.email = email
32
+ @user.should_not be_valid
33
+ end
34
+
35
+ @user.email = 'foo@bar.org'
36
+ @user.should be_valid
37
+ end
38
+
39
+
40
+ it "email address should only exist once" do
41
+ same_email = 'foo@bar.org'
42
+
43
+ @user.email = same_email
44
+ @user.confirmed = Time.now
45
+ @user.save
46
+
47
+ @other_user = Factory.build( :user, :email => same_email )
48
+ @other_user.should_not be_valid
49
+
50
+ @other_user.email = 'foo@otherbar.org'
51
+ @other_user.should be_valid
52
+ end
53
+
54
+ it 'saves same passwords with different salts' do
55
+ same_password = 'secret'
56
+ @user.password = same_password
57
+ @user.save
58
+
59
+ @other_user = Factory.build( :user, :password => same_password )
60
+ @other_user.save
61
+
62
+ @user.password_hash.should_not == @other_user.password_hash
63
+ @user.password_salt.should_not == @other_user.password_salt
64
+ end
65
+
66
+ it 'should authenticate valid user' do
67
+ @user.save
68
+ @user.should == User.authenticate( @user.email, @user.password )
69
+
70
+ User.authenticate( '', @user.password ).should == nil
71
+ User.authenticate( @user.email, '' ).should == nil
72
+ end
73
+
74
+ it 'should be confirmable' do
75
+ @user.should respond_to( :confirm_signup! )
76
+ @user.should respond_to( :confirmed? )
77
+
78
+ @user.confirmed?.should be false
79
+ @user.confirm_signup!
80
+ @user.confirmed?.should be true
81
+ end
82
+
83
+ it 'has confirmation token' do
84
+ @user.save
85
+ @user.send_registration
86
+ @user.signup_token.should match /^[\da-z]{26}$/
87
+ end
88
+
89
+ describe "#send_password_reset" do
90
+ let(:user) { Factory(:user) }
91
+
92
+ it "generate a unique password_token each time" do
93
+ user.send_password_reset
94
+ last_token = user.password_token
95
+ user.send_password_reset
96
+ user.password_token.should_not eq(last_token)
97
+ end
98
+
99
+ it "delivers email to user" do
100
+ user.send_password_reset
101
+ last_email.to.should include(user.email)
102
+ end
103
+ end
104
+
105
+ describe "#send_password_reset" do
106
+
107
+ it "should not set false emails" do
108
+ @user.email = "hallo@mail.de"
109
+ @user.set_new_email = true
110
+ [ 'foo', 'foo.org', 'foo@.org', 'foo@', 'foo@@bar.org', '@bar.org' ].each do |email|
111
+ @user.new_email = email
112
+ @user.new_email_confirmation = email
113
+ @user.should_not be_valid
114
+ end
115
+ end
116
+
117
+ it "should set true emails" do
118
+ @user.set_new_email = true
119
+ @user.new_email = 'foo@bar.org'
120
+ @user.new_email_confirmation = 'foo@bar.org'
121
+ @user.should be_valid
122
+ end
123
+
124
+ it "should not set new emails without confirmation" do
125
+ @user.set_new_email = true
126
+ @user.new_email = 'foo@bar.org'
127
+ @user.new_email_confirmation = nil
128
+ @user.should_not be_valid
129
+ end
130
+
131
+ it "should not set new emails with false confirmation" do
132
+ @user.set_new_email = true
133
+ @user.new_email = 'foo@bar.org'
134
+ @user.new_email_confirmation = 'ups@bar.org'
135
+ @user.should_not be_valid
136
+ end
137
+
138
+ it "should not set new emails without set_new_email flag" do
139
+ @user.set_new_email = nil
140
+ @user.new_email = 'foo@bar.org'
141
+ @user.new_email_confirmation = 'foo@bar.org'
142
+ @user.should be_valid
143
+ @user.save
144
+ @user2 = User.find(@user.id)
145
+ @user2.new_email.should be_blank
146
+ end
147
+
148
+ it "should not set new_email to a confirmed email address" do
149
+
150
+ end
151
+
152
+ end
153
+
154
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe "send new email" do
4
+
5
+ before(:each) do
6
+ @user = Factory(:user, :confirmed => Time.now)
7
+ visit log_in_path
8
+ fill_in "email", :with => @user.email
9
+ fill_in "password", :with => @user.password
10
+ click_button "log_in_button"
11
+ end
12
+
13
+ describe "GET index" do
14
+ it "send new email request" do
15
+ visit "/settings/index"
16
+ new_email = "neue@example.com"
17
+ fill_in "user_new_email", :with => new_email
18
+ fill_in "user_new_email_confirmation", :with => new_email
19
+ fill_in "user_password", :with => @user.password
20
+ click_button "change_email_button"
21
+ @user = User.find(@user.id)
22
+ @user.new_email.should eq(new_email)
23
+ end
24
+ end
25
+
26
+
27
+ it "set new email with link" do
28
+ @user.set_new_email = true
29
+ @user.new_email = "new@email.de"
30
+ @user.new_email_confirmation = "new@email.de"
31
+ @user.send_new_email_request
32
+ @user.save
33
+
34
+ visit new_email_path(:token => @user.new_email_token)
35
+
36
+ @user = User.find @user.id
37
+ @user.email.should eq(@user.new_email)
38
+ end
39
+
40
+ it "shows form if token is invalid" do
41
+ @user.set_new_email = true
42
+ @user.new_email = "new@email.de"
43
+ @user.new_email_confirmation = "new@email.de"
44
+ @user.send_new_email_request
45
+ @user.save
46
+
47
+ visit new_email_path(:token => "wrong token here")
48
+ click_button "new_email_token_button"
49
+
50
+ end
51
+
52
+ it "set new email with password token form" do
53
+ @user.set_new_email = true
54
+ @user.new_email = "new@email.de"
55
+ @user.new_email_confirmation = "new@email.de"
56
+ @user.send_new_email_request
57
+ @user.save
58
+
59
+ visit new_email_path
60
+ fill_in "token", :with => @user.new_email_token
61
+ click_button "new_email_token_button"
62
+
63
+ @user = User.find @user.id
64
+ @user.email.should eq(@user.new_email)
65
+ end
66
+
67
+ end
68
+
69
+
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe "PasswordResets" do
4
+ it "emails user when requesting password reset" do
5
+ user = Factory(:user)
6
+ visit log_in_path
7
+ click_link "password_forgotten_link"
8
+ fill_in "email", :with => user.email
9
+ click_button "send_new_password_button"
10
+ current_path.should eq root_path
11
+ page.should have_content( I18n.t( "fe.confirmation.order_new_password.flash.success" ))
12
+ last_email.to.should include(user.email)
13
+ end
14
+
15
+ it "does not email invalid user when requesting password reset" do
16
+ visit log_in_path
17
+ click_link "password_forgotten_link"
18
+ fill_in "email", :with => "diese.mail@gibt.es.nicht.de"
19
+ click_button "send_new_password_button"
20
+ current_path.should eq root_path
21
+ last_email.should be_nil
22
+ end
23
+
24
+ it "password recovery with password token form" do
25
+ user = Factory(:user, :password_token => "ein_kleiner_token")
26
+ visit recover_password_auth_path
27
+ fill_in "token", :with => user.password_token
28
+ click_button "password_token_button"
29
+ current_path.should eq recover_password_path
30
+ end
31
+
32
+ it "password recovery without valid token leads to token_form" do
33
+ params = { :token => 'den_token_gibt_es_nicht' }
34
+ visit recover_password_path
35
+ current_path.should eq recover_password_auth_path
36
+ end
37
+
38
+ it "password recovery with valid token leads password recover form and user sets new pw" do
39
+ user = Factory(:user, :password_token => "12345", :confirmed => Time.now)
40
+ visit recover_password_path(:token => "12345")
41
+ current_path.should eq recover_password_path(:token => "12345")
42
+ fill_in "recover_password", :with => "geheim"
43
+ fill_in "recover_password_confirmation", :with => "geheim"
44
+ click_button "recover_password_button"
45
+ current_path.should eq log_in_path
46
+
47
+ ## and logs in with new password
48
+ fill_in "email", :with => user.email
49
+ fill_in "password", :with => "geheim"
50
+ click_button "log_in_button"
51
+ current_path.should eq root_path
52
+ page.should have_content( I18n.t( "fe.session.create.flash.success" ))
53
+ end
54
+
55
+
56
+ end
57
+
58
+
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe "UserConfirmation" do
4
+ it "emails user to confirm his sign up" do
5
+ visit sign_up_form_path
6
+ fill_in "user_email", :with => "test@test.de"
7
+ fill_in "user_password", :with => "geheim"
8
+ fill_in "user_password_confirmation", :with => "geheim"
9
+ click_button "sign_up_button"
10
+ current_path.should eq root_path
11
+ page.should have_content( I18n.t( "fe.user.create.flash.success" ))
12
+ last_email.to.should include("test@test.de")
13
+ end
14
+
15
+ it "user uses confirmation token form and is confirmed" do
16
+ user = Factory(:user, :signup_token => "halloklaus")
17
+ visit confirm_path(:action => :registration)
18
+ fill_in "token", :with => user.signup_token
19
+ click_button "token_button"
20
+ current_path.should eq log_in_path
21
+ page.should have_content( I18n.t( "fe.confirmation.registration.flash.success" ))
22
+ end
23
+
24
+ it "user not confirmed with false confirmation token" do
25
+ user = Factory(:user, :signup_token => "halloklaus")
26
+ visit confirm_path(:action => :registration)
27
+ fill_in "token", :with => "ein_anderer_token"
28
+ click_button "token_button"
29
+ current_path.should eq confirm_path(:action => :registration)
30
+ page.should have_content( I18n.t( "fe.confirmation.registration.flash.error" ))
31
+ end
32
+
33
+ it "user asks for new confirmation token" do
34
+ user = Factory(:user, :signup_token => "halloklaus2")
35
+ visit confirm_path(:action => :registration)
36
+ click_link "resend_signup_token"
37
+ current_path.should eq confirm_path(:action => "resend_confirmation")
38
+ fill_in "email", :with => user.email
39
+ fill_in "password", :with => user.password
40
+ click_button "resend_signup_token_button"
41
+ user = User.find(user.id)
42
+ last_email.to.should include(user.email)
43
+ page.should have_content( I18n.t( "fe.confirmation.resend_signup_token.flash.success" ))
44
+ user.signup_token.should_not eq "halloklaus2"
45
+ end
46
+
47
+ it "confirmed user cannot request new confirmation token" do
48
+ user = Factory(:user, :signup_token => "halloklaus", :confirmed => Time.now)
49
+ visit confirm_path(:action => :registration)
50
+ click_link "resend_signup_token"
51
+ current_path.should eq confirm_path(:action => "resend_confirmation")
52
+ fill_in "email", :with => user.email
53
+ fill_in "password", :with => user.password
54
+ click_button "resend_signup_token_button"
55
+ last_email.should eq nil
56
+ current_path.should eq log_in_path
57
+ page.should have_content( I18n.t( "fe.confirmation.resend_signup_token.flash.error" ))
58
+ end
59
+
60
+
61
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe "UserSignIn" do
4
+ it "Signed up user cannot login if not confirmed" do
5
+ user = Factory(:user, :confirmed => nil)
6
+ visit log_in_path
7
+ fill_in "email", :with => user.email
8
+ fill_in "password", :with => user.password
9
+ click_button "log_in_button"
10
+ page.should have_content( I18n.t( "fe.session.create.flash.error.not_confirmed" ))
11
+ current_path.should eq confirm_path(:action => :registration)
12
+ end
13
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe "UserSignUp" do
4
+
5
+ it "User can sign up" do
6
+ visit sign_up_form_path
7
+ fill_in "user_email", :with => "hallo@test.de"
8
+ fill_in "user_password", :with => "geheim"
9
+ fill_in "user_password_confirmation", :with => "geheim"
10
+ click_button "sign_up_button"
11
+ page.should have_content( I18n.t( "fe.user.create.flash.success" ))
12
+ current_path.should eq root_path
13
+ end
14
+
15
+ [
16
+ {:email => "test@test.de", :password => "", :password_confirmation => ""},
17
+ {:email => "test@test.de", :password => "geheim", :password_confirmation => ""},
18
+ {:email => "test@test.de", :password => "geheim", :password_confirmation => "gehei_"},
19
+ {:email => "test@test.de", :password => "", :password_confirmation => "geheim"},
20
+ {:email => "test@test", :password => "geheim", :password_confirmation => "geheim"},
21
+ {:email => "testtest.de", :password => "geheim", :password_confirmation => "geheim"}
22
+ ].each do |u|
23
+ it "User cannot sign up with wrong parameters" do
24
+ visit sign_up_form_path
25
+ fill_in "user_email", :with => u[:email]
26
+ fill_in "user_password", :with => u[:password]
27
+ fill_in "user_password_confirmation", :with => u[:password_confirmation]
28
+ click_button "sign_up_button"
29
+ page.should have_content( I18n.t( "fe.user.create.flash.error" ))
30
+ end
31
+ end
32
+
33
+
34
+ it "User can sign up with used email-address unless confirmed" do
35
+ user = Factory(:user)
36
+ visit sign_up_form_path
37
+ fill_in "user_email", :with => user.email
38
+ fill_in "user_password", :with => "geheim"
39
+ fill_in "user_password_confirmation", :with => "geheim"
40
+ click_button "sign_up_button"
41
+ page.should have_content( I18n.t( "fe.user.create.flash.success" ))
42
+ end
43
+
44
+ it "User cannot sign up with used email-address if confirmed" do
45
+ user = Factory(:user)
46
+ user.confirm_signup!
47
+ visit sign_up_form_path
48
+ fill_in "user_email", :with => user.email
49
+ fill_in "user_password", :with => "geheim"
50
+ fill_in "user_password_confirmation", :with => "geheim"
51
+ click_button "sign_up_button"
52
+ page.should have_content( I18n.t( "fe.user.create.flash.error" ))
53
+ end
54
+
55
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe ConfirmationMailer do
4
+
5
+ describe "#password_reset" do
6
+ let(:user) { Factory(:user, :password_token => "irgendwas") }
7
+ let(:mail) { ConfirmationMailer.send_password_reset(user) }
8
+
9
+ it "send user password reset url" do
10
+ mail.subject.should eq( I18n.t( 'confirmation_mailer.send_password_reset.subject' ))
11
+ mail.to.should eq([user.email])
12
+ mail.body.encoded.should match(recover_password_url(user.password_token))
13
+ end
14
+ end
15
+
16
+ describe "#registration" do
17
+ let(:user) { Factory(:user, :signup_token => "irgendwas") }
18
+ let(:mail) { ConfirmationMailer.registration(user) }
19
+
20
+ it "send user confirmation url" do
21
+ mail.subject.should eq( I18n.t( 'confirmation_mailer.registration.subject' ))
22
+ mail.to.should eq([user.email])
23
+ mail.body.encoded.should match(confirm_url(user.signup_token))
24
+ end
25
+ end
26
+
27
+ describe "#new_user_email" do
28
+ let(:user) { Factory(:user, :set_new_email => true, :new_email => "new@email.de", :new_email_confirmation => "new@email.de" , :new_email_token => "irgendwas") }
29
+ let(:mail) { ConfirmationMailer.new_email_request(user) }
30
+
31
+ it "send user new email confirmation url" do
32
+ mail.subject.should eq( I18n.t( 'confirmation_mailer.new_email_request.subject' ))
33
+ mail.to.should eq([user.new_email])
34
+ mail.body.encoded.should match( new_email_url(user.new_email_token ))
35
+ end
36
+ end
37
+
38
+ describe "#resend_signup_token" do
39
+ let(:user) { Factory(:user, :signup_token => "irgendwas") }
40
+ let(:mail) { ConfirmationMailer.resend_signup_token(user) }
41
+
42
+ it "send user new confirmation url" do
43
+ mail.subject.should eq( I18n.t( 'confirmation_mailer.resend_signup_token.subject' ))
44
+ mail.to.should eq([user.email])
45
+ mail.body.encoded.should match(confirm_url( :registration, user.signup_token ))
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,34 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV["RAILS_ENV"] ||= 'test'
3
+ require File.expand_path("../../config/environment", __FILE__)
4
+ require 'rspec/rails'
5
+ require 'capybara/rspec'
6
+
7
+ # Requires supporting ruby files with custom matchers and macros, etc,
8
+ # in spec/support/ and its subdirectories.
9
+
10
+ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
11
+
12
+ ConfirmationMailer.default_url_options = { :host => 'localhost:3000' }
13
+
14
+ RSpec.configure do |config|
15
+ config.mock_with :rspec
16
+ config.use_transactional_fixtures = false
17
+ config.include(MailerMacros)
18
+ config.before(:each) { reset_email }
19
+
20
+ config.before(:suite) do
21
+ DatabaseCleaner.strategy = :transaction
22
+ DatabaseCleaner.clean_with(:truncation)
23
+ end
24
+
25
+ config.before(:each) do
26
+ DatabaseCleaner.start
27
+ end
28
+
29
+ config.after(:each) do
30
+ DatabaseCleaner.clean
31
+ end
32
+
33
+ end
34
+
@@ -0,0 +1,10 @@
1
+ module MailerMacros
2
+ def last_email
3
+ ActionMailer::Base.deliveries.last
4
+ end
5
+
6
+ def reset_email
7
+ ActionMailer::Base.deliveries = []
8
+ end
9
+
10
+ end