devise_invitable 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/devise/invitations_controller.rb~ +48 -0
- data/config/locales/en.yml +1 -1
- data/lib/devise_invitable/model.rb +5 -0
- data/lib/devise_invitable/model.rb~ +129 -0
- data/lib/devise_invitable/version.rb +3 -0
- metadata +42 -104
- data/.document +0 -5
- data/.gitignore +0 -22
- data/Gemfile +0 -3
- data/Gemfile.lock +0 -117
- data/Rakefile +0 -55
- data/VERSION +0 -1
- data/devise_invitable.gemspec +0 -146
- data/test/generators_test.rb +0 -45
- data/test/integration/invitable_test.rb +0 -109
- data/test/integration_tests_helper.rb +0 -58
- data/test/mailers/invitation_test.rb +0 -62
- data/test/model_tests_helper.rb +0 -41
- data/test/models/invitable_test.rb +0 -188
- data/test/models_test.rb +0 -31
- data/test/rails_app/app/controllers/admins_controller.rb +0 -6
- data/test/rails_app/app/controllers/application_controller.rb +0 -3
- data/test/rails_app/app/controllers/home_controller.rb +0 -4
- data/test/rails_app/app/controllers/users_controller.rb +0 -12
- data/test/rails_app/app/helpers/application_helper.rb +0 -2
- data/test/rails_app/app/models/octopussy.rb +0 -11
- data/test/rails_app/app/models/user.rb +0 -4
- data/test/rails_app/app/views/home/index.html.erb +0 -0
- data/test/rails_app/app/views/layouts/application.html.erb +0 -15
- data/test/rails_app/app/views/users/invitations/new.html.erb +0 -15
- data/test/rails_app/config.ru +0 -4
- data/test/rails_app/config/application.rb +0 -46
- data/test/rails_app/config/boot.rb +0 -13
- data/test/rails_app/config/database.yml +0 -22
- data/test/rails_app/config/environment.rb +0 -5
- data/test/rails_app/config/environments/development.rb +0 -26
- data/test/rails_app/config/environments/production.rb +0 -49
- data/test/rails_app/config/environments/test.rb +0 -35
- data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
- data/test/rails_app/config/initializers/devise.rb +0 -144
- data/test/rails_app/config/initializers/inflections.rb +0 -10
- data/test/rails_app/config/initializers/mime_types.rb +0 -5
- data/test/rails_app/config/initializers/secret_token.rb +0 -7
- data/test/rails_app/config/initializers/session_store.rb +0 -8
- data/test/rails_app/config/locales/en.yml +0 -5
- data/test/rails_app/config/routes.rb +0 -4
- data/test/rails_app/script/rails +0 -6
- data/test/routes_test.rb +0 -20
- data/test/test_helper.rb +0 -30
data/Rakefile
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'rake'
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'jeweler'
|
5
|
-
Jeweler::Tasks.new do |gem|
|
6
|
-
gem.name = "devise_invitable"
|
7
|
-
gem.summary = %Q{An invitation strategy for devise}
|
8
|
-
gem.description = %Q{It adds support for send invitations by email (it requires to be authenticated) and accept the invitation setting the password}
|
9
|
-
gem.email = "sergio@entrecables.com"
|
10
|
-
gem.homepage = "http://github.com/scambra/devise_invitable"
|
11
|
-
gem.authors = ["Sergio Cambra"]
|
12
|
-
gem.add_development_dependency 'mocha', '>= 0.9.8'
|
13
|
-
gem.add_development_dependency 'capybara', '>= 0.3.9'
|
14
|
-
gem.add_development_dependency 'rails', '~> 3.0.0'
|
15
|
-
gem.add_development_dependency 'sqlite3-ruby'
|
16
|
-
gem.add_dependency 'devise', '~> 1.1.0'
|
17
|
-
end
|
18
|
-
Jeweler::GemcutterTasks.new
|
19
|
-
rescue LoadError
|
20
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
21
|
-
end
|
22
|
-
|
23
|
-
require 'rake/testtask'
|
24
|
-
Rake::TestTask.new(:test) do |test|
|
25
|
-
test.libs << 'lib' << 'test'
|
26
|
-
test.pattern = 'test/**/*_test.rb'
|
27
|
-
test.verbose = true
|
28
|
-
end
|
29
|
-
|
30
|
-
begin
|
31
|
-
require 'rcov/rcovtask'
|
32
|
-
Rcov::RcovTask.new do |test|
|
33
|
-
test.libs << 'test'
|
34
|
-
test.pattern = 'test/**/test_*.rb'
|
35
|
-
test.verbose = true
|
36
|
-
end
|
37
|
-
rescue LoadError
|
38
|
-
task :rcov do
|
39
|
-
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
task :test => :check_dependencies
|
44
|
-
|
45
|
-
task :default => :test
|
46
|
-
|
47
|
-
require 'rake/rdoctask'
|
48
|
-
Rake::RDocTask.new do |rdoc|
|
49
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
50
|
-
|
51
|
-
rdoc.rdoc_dir = 'rdoc'
|
52
|
-
rdoc.title = "devise_invitable #{version}"
|
53
|
-
rdoc.rdoc_files.include('README*')
|
54
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
55
|
-
end
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.3.5
|
data/devise_invitable.gemspec
DELETED
@@ -1,146 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{devise_invitable}
|
8
|
-
s.version = "0.3.5"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Sergio Cambra"]
|
12
|
-
s.date = %q{2010-11-02}
|
13
|
-
s.description = %q{It adds support for send invitations by email (it requires to be authenticated) and accept the invitation setting the password}
|
14
|
-
s.email = %q{sergio@entrecables.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE",
|
17
|
-
"README.rdoc"
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
".document",
|
21
|
-
".gitignore",
|
22
|
-
"Gemfile",
|
23
|
-
"Gemfile.lock",
|
24
|
-
"LICENSE",
|
25
|
-
"README.rdoc",
|
26
|
-
"Rakefile",
|
27
|
-
"VERSION",
|
28
|
-
"app/controllers/devise/invitations_controller.rb",
|
29
|
-
"app/views/devise/invitations/edit.html.erb",
|
30
|
-
"app/views/devise/invitations/new.html.erb",
|
31
|
-
"app/views/devise/mailer/invitation.html.erb",
|
32
|
-
"config/locales/en.yml",
|
33
|
-
"devise_invitable.gemspec",
|
34
|
-
"lib/devise_invitable.rb",
|
35
|
-
"lib/devise_invitable/controllers/helpers.rb",
|
36
|
-
"lib/devise_invitable/controllers/url_helpers.rb",
|
37
|
-
"lib/devise_invitable/mailer.rb",
|
38
|
-
"lib/devise_invitable/model.rb",
|
39
|
-
"lib/devise_invitable/rails.rb",
|
40
|
-
"lib/devise_invitable/routes.rb",
|
41
|
-
"lib/devise_invitable/schema.rb",
|
42
|
-
"lib/generators/active_record/devise_invitable_generator.rb",
|
43
|
-
"lib/generators/active_record/templates/migration.rb",
|
44
|
-
"lib/generators/devise_invitable/devise_invitable_generator.rb",
|
45
|
-
"lib/generators/devise_invitable/install_generator.rb",
|
46
|
-
"lib/generators/devise_invitable/views_generator.rb",
|
47
|
-
"test/generators_test.rb",
|
48
|
-
"test/integration/invitable_test.rb",
|
49
|
-
"test/integration_tests_helper.rb",
|
50
|
-
"test/mailers/invitation_test.rb",
|
51
|
-
"test/model_tests_helper.rb",
|
52
|
-
"test/models/invitable_test.rb",
|
53
|
-
"test/models_test.rb",
|
54
|
-
"test/rails_app/app/controllers/admins_controller.rb",
|
55
|
-
"test/rails_app/app/controllers/application_controller.rb",
|
56
|
-
"test/rails_app/app/controllers/home_controller.rb",
|
57
|
-
"test/rails_app/app/controllers/users_controller.rb",
|
58
|
-
"test/rails_app/app/helpers/application_helper.rb",
|
59
|
-
"test/rails_app/app/models/octopussy.rb",
|
60
|
-
"test/rails_app/app/models/user.rb",
|
61
|
-
"test/rails_app/app/views/home/index.html.erb",
|
62
|
-
"test/rails_app/app/views/layouts/application.html.erb",
|
63
|
-
"test/rails_app/app/views/users/invitations/new.html.erb",
|
64
|
-
"test/rails_app/config.ru",
|
65
|
-
"test/rails_app/config/application.rb",
|
66
|
-
"test/rails_app/config/boot.rb",
|
67
|
-
"test/rails_app/config/database.yml",
|
68
|
-
"test/rails_app/config/environment.rb",
|
69
|
-
"test/rails_app/config/environments/development.rb",
|
70
|
-
"test/rails_app/config/environments/production.rb",
|
71
|
-
"test/rails_app/config/environments/test.rb",
|
72
|
-
"test/rails_app/config/initializers/backtrace_silencers.rb",
|
73
|
-
"test/rails_app/config/initializers/devise.rb",
|
74
|
-
"test/rails_app/config/initializers/inflections.rb",
|
75
|
-
"test/rails_app/config/initializers/mime_types.rb",
|
76
|
-
"test/rails_app/config/initializers/secret_token.rb",
|
77
|
-
"test/rails_app/config/initializers/session_store.rb",
|
78
|
-
"test/rails_app/config/locales/en.yml",
|
79
|
-
"test/rails_app/config/routes.rb",
|
80
|
-
"test/rails_app/script/rails",
|
81
|
-
"test/routes_test.rb",
|
82
|
-
"test/test_helper.rb"
|
83
|
-
]
|
84
|
-
s.homepage = %q{http://github.com/scambra/devise_invitable}
|
85
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
86
|
-
s.require_paths = ["lib"]
|
87
|
-
s.rubygems_version = %q{1.3.7}
|
88
|
-
s.summary = %q{An invitation strategy for devise}
|
89
|
-
s.test_files = [
|
90
|
-
"test/integration/invitable_test.rb",
|
91
|
-
"test/integration_tests_helper.rb",
|
92
|
-
"test/mailers/invitation_test.rb",
|
93
|
-
"test/model_tests_helper.rb",
|
94
|
-
"test/models/invitable_test.rb",
|
95
|
-
"test/models_test.rb",
|
96
|
-
"test/rails_app/app/controllers/admins_controller.rb",
|
97
|
-
"test/rails_app/app/controllers/application_controller.rb",
|
98
|
-
"test/rails_app/app/controllers/home_controller.rb",
|
99
|
-
"test/rails_app/app/controllers/users_controller.rb",
|
100
|
-
"test/rails_app/app/helpers/application_helper.rb",
|
101
|
-
"test/rails_app/app/models/user.rb",
|
102
|
-
"test/rails_app/app/models/octopussy.rb",
|
103
|
-
"test/rails_app/config/boot.rb",
|
104
|
-
"test/rails_app/config/environment.rb",
|
105
|
-
"test/rails_app/config/environments/development.rb",
|
106
|
-
"test/rails_app/config/environments/production.rb",
|
107
|
-
"test/rails_app/config/environments/test.rb",
|
108
|
-
"test/rails_app/config/initializers/backtrace_silencers.rb",
|
109
|
-
"test/rails_app/config/initializers/inflections.rb",
|
110
|
-
"test/rails_app/config/initializers/devise.rb",
|
111
|
-
"test/rails_app/config/initializers/session_store.rb",
|
112
|
-
"test/rails_app/config/initializers/mime_types.rb",
|
113
|
-
"test/rails_app/config/initializers/secret_token.rb",
|
114
|
-
"test/rails_app/config/routes.rb",
|
115
|
-
"test/rails_app/config/application.rb",
|
116
|
-
"test/routes_test.rb",
|
117
|
-
"test/test_helper.rb",
|
118
|
-
"test/generators_test.rb"
|
119
|
-
]
|
120
|
-
|
121
|
-
if s.respond_to? :specification_version then
|
122
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
123
|
-
s.specification_version = 3
|
124
|
-
|
125
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
126
|
-
s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
|
127
|
-
s.add_development_dependency(%q<capybara>, [">= 0.3.9"])
|
128
|
-
s.add_development_dependency(%q<rails>, ["~> 3.0.0"])
|
129
|
-
s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
|
130
|
-
s.add_runtime_dependency(%q<devise>, ["~> 1.1.0"])
|
131
|
-
else
|
132
|
-
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
133
|
-
s.add_dependency(%q<capybara>, [">= 0.3.9"])
|
134
|
-
s.add_dependency(%q<rails>, ["~> 3.0.0"])
|
135
|
-
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
|
136
|
-
s.add_dependency(%q<devise>, ["~> 1.1.0"])
|
137
|
-
end
|
138
|
-
else
|
139
|
-
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
140
|
-
s.add_dependency(%q<capybara>, [">= 0.3.9"])
|
141
|
-
s.add_dependency(%q<rails>, ["~> 3.0.0"])
|
142
|
-
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
|
143
|
-
s.add_dependency(%q<devise>, ["~> 1.1.0"])
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
data/test/generators_test.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'test/test_helper'
|
2
|
-
require 'rails/generators'
|
3
|
-
require 'generators/devise_invitable/devise_invitable_generator'
|
4
|
-
|
5
|
-
class GeneratorsTest < ActiveSupport::TestCase
|
6
|
-
RAILS_APP_PATH = File.expand_path("../rails_app", __FILE__)
|
7
|
-
|
8
|
-
test "rails g should include the 3 generators" do
|
9
|
-
@output = `cd #{RAILS_APP_PATH} && rails g`
|
10
|
-
assert @output.match(%r|DeviseInvitable:\n devise_invitable\n devise_invitable:install\n devise_invitable:views|)
|
11
|
-
end
|
12
|
-
|
13
|
-
test "rails g devise_invitable:install" do
|
14
|
-
@output = `cd #{RAILS_APP_PATH} && rails g devise_invitable:install -p`
|
15
|
-
assert @output.match(%r|inject.+ config/initializers/devise\.rb\n|)
|
16
|
-
assert @output.match(%r|create.+ config/locales/devise_invitable\.en\.yml\n|)
|
17
|
-
end
|
18
|
-
|
19
|
-
test "rails g devise_invitable:views not scoped" do
|
20
|
-
@output = `cd #{RAILS_APP_PATH} && rails g devise_invitable:views -p`
|
21
|
-
assert @output.match(%r|create.+ app/views/devise\n|)
|
22
|
-
assert @output.match(%r|create.+ app/views/devise/invitations/edit\.html\.erb\n|)
|
23
|
-
assert @output.match(%r|create.+ app/views/devise/invitations/new\.html\.erb\n|)
|
24
|
-
assert @output.match(%r|create.+ app/views/devise/mailer/invitation\.html\.erb\n|)
|
25
|
-
end
|
26
|
-
|
27
|
-
test "rails g devise_invitable:views scoped" do
|
28
|
-
@output = `cd #{RAILS_APP_PATH} && rails g devise_invitable:views octopussies -p`
|
29
|
-
assert @output.match(%r|create.+ app/views/octopussies\n|)
|
30
|
-
assert @output.match(%r|create.+ app/views/octopussies/invitations/edit\.html\.erb\n|)
|
31
|
-
assert @output.match(%r|create.+ app/views/octopussies/invitations/new\.html\.erb\n|)
|
32
|
-
assert @output.match(%r|create.+ app/views/octopussies/mailer/invitation\.html\.erb\n|)
|
33
|
-
end
|
34
|
-
|
35
|
-
test "rails g devise_invitable Octopussy" do
|
36
|
-
@output = `cd #{RAILS_APP_PATH} && rails g devise_invitable Octopussy -p`
|
37
|
-
assert @output.match(%r|inject.+ app/models/octopussy\.rb\n|)
|
38
|
-
assert @output.match(%r|invoke.+ #{DEVISE_ORM}\n|)
|
39
|
-
if DEVISE_ORM == :active_record
|
40
|
-
assert @output.match(%r|create.+ db/migrate/\d{14}_devise_invitable_add_to_octopussies\.rb\n|)
|
41
|
-
elsif DEVISE_ORM == :mongoid
|
42
|
-
assert !@output.match(%r|create.+ db/migrate/\d{14}_devise_invitable_add_to_octopussies\.rb\n|)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,109 +0,0 @@
|
|
1
|
-
require 'test/test_helper'
|
2
|
-
require 'test/integration_tests_helper'
|
3
|
-
|
4
|
-
class InvitationTest < ActionDispatch::IntegrationTest
|
5
|
-
def teardown
|
6
|
-
Capybara.reset_sessions!
|
7
|
-
end
|
8
|
-
|
9
|
-
def send_invitation(&block)
|
10
|
-
visit new_user_invitation_path
|
11
|
-
|
12
|
-
fill_in 'user_email', :with => 'user@test.com'
|
13
|
-
yield if block_given?
|
14
|
-
click_button 'Send an invitation'
|
15
|
-
end
|
16
|
-
|
17
|
-
def set_password(options={}, &block)
|
18
|
-
unless options[:visit] == false
|
19
|
-
visit accept_user_invitation_path(:invitation_token => options[:invitation_token])
|
20
|
-
end
|
21
|
-
|
22
|
-
fill_in 'user_password', :with => '987654321'
|
23
|
-
fill_in 'user_password_confirmation', :with => '987654321'
|
24
|
-
yield if block_given?
|
25
|
-
click_button 'Set my password'
|
26
|
-
end
|
27
|
-
|
28
|
-
test 'not authenticated user should not be able to send an invitation' do
|
29
|
-
get new_user_invitation_path
|
30
|
-
assert_redirected_to new_user_session_path
|
31
|
-
end
|
32
|
-
|
33
|
-
test 'authenticated user should be able to send an invitation' do
|
34
|
-
sign_in_as_user
|
35
|
-
|
36
|
-
send_invitation
|
37
|
-
assert_equal root_path, current_path
|
38
|
-
assert page.has_css?('p#notice', :text => 'An email with instructions about how to set the password has been sent.')
|
39
|
-
end
|
40
|
-
|
41
|
-
test 'authenticated user with invalid email should receive an error message' do
|
42
|
-
user = create_full_user
|
43
|
-
sign_in_as_user(user)
|
44
|
-
send_invitation do
|
45
|
-
fill_in 'user_email', :with => user.email
|
46
|
-
end
|
47
|
-
|
48
|
-
assert_equal user_invitation_path, current_path
|
49
|
-
assert page.has_css?("input[type=text][value='#{user.email}']")
|
50
|
-
assert page.has_css?('#error_explanation li', :text => 'Email has already been taken')
|
51
|
-
end
|
52
|
-
|
53
|
-
test 'authenticated user should not be able to visit edit invitation page' do
|
54
|
-
sign_in_as_user
|
55
|
-
|
56
|
-
visit accept_user_invitation_path
|
57
|
-
|
58
|
-
assert_equal root_path, current_path
|
59
|
-
end
|
60
|
-
|
61
|
-
test 'not authenticated user with invalid invitation token should not be able to set his password' do
|
62
|
-
user = create_user
|
63
|
-
set_password :invitation_token => 'invalid_token'
|
64
|
-
|
65
|
-
assert_equal user_invitation_path, current_path
|
66
|
-
assert page.has_css?('#error_explanation li', :text => 'Invitation token is invalid')
|
67
|
-
assert_nil user.encrypted_password
|
68
|
-
end
|
69
|
-
|
70
|
-
test 'not authenticated user with valid invitation token but invalid password should not be able to set his password' do
|
71
|
-
user = create_user(false)
|
72
|
-
set_password :invitation_token => user.invitation_token do
|
73
|
-
fill_in 'Password confirmation', :with => 'other_password'
|
74
|
-
end
|
75
|
-
|
76
|
-
assert_equal user_invitation_path, current_path
|
77
|
-
assert page.has_css?('#error_explanation li', :text => 'Password doesn\'t match confirmation')
|
78
|
-
assert_nil user.encrypted_password
|
79
|
-
end
|
80
|
-
|
81
|
-
test 'not authenticated user with valid data should be able to change his password' do
|
82
|
-
user = create_user(false)
|
83
|
-
set_password :invitation_token => user.invitation_token
|
84
|
-
|
85
|
-
assert_equal root_path, current_path
|
86
|
-
assert page.has_css?('p#notice', :text => 'Your password was set successfully. You are now signed in.')
|
87
|
-
assert user.reload.valid_password?('987654321')
|
88
|
-
end
|
89
|
-
|
90
|
-
test 'after entering invalid data user should still be able to set his password' do
|
91
|
-
user = create_user(false)
|
92
|
-
set_password :invitation_token => user.invitation_token do
|
93
|
-
fill_in 'Password confirmation', :with => 'other_password'
|
94
|
-
end
|
95
|
-
assert_equal user_invitation_path, current_path
|
96
|
-
assert page.has_css?('#error_explanation')
|
97
|
-
assert_nil user.encrypted_password
|
98
|
-
|
99
|
-
set_password :visit => false
|
100
|
-
assert page.has_css?('p#notice', :text => 'Your password was set successfully. You are now signed in.')
|
101
|
-
assert user.reload.valid_password?('987654321')
|
102
|
-
end
|
103
|
-
|
104
|
-
test 'sign in user automatically after setting it\'s password' do
|
105
|
-
user = create_user(false)
|
106
|
-
set_password :invitation_token => user.invitation_token
|
107
|
-
assert_equal root_path, current_path
|
108
|
-
end
|
109
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
class ActionController::IntegrationTest
|
2
|
-
|
3
|
-
def warden
|
4
|
-
request.env['warden']
|
5
|
-
end
|
6
|
-
|
7
|
-
def create_full_user
|
8
|
-
@user ||= begin
|
9
|
-
user = User.create!(
|
10
|
-
:username => 'usertest',
|
11
|
-
:email => 'fulluser@test.com',
|
12
|
-
:password => '123456',
|
13
|
-
:password_confirmation => '123456',
|
14
|
-
:created_at => Time.now.utc
|
15
|
-
)
|
16
|
-
user.confirm!
|
17
|
-
user
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def sign_in_as_user(user = nil)
|
22
|
-
user ||= create_full_user
|
23
|
-
visit new_user_session_path
|
24
|
-
fill_in 'user_email', :with => user.email
|
25
|
-
fill_in 'user_password', :with => '123456'
|
26
|
-
fill_in 'user_password', :with => user.password
|
27
|
-
click_button 'Sign in'
|
28
|
-
end
|
29
|
-
|
30
|
-
def create_user(accept_invitation = true)
|
31
|
-
user = User.new :email => 'newuser@test.com'
|
32
|
-
user.skip_confirmation!
|
33
|
-
user.invitation_token = 'token'
|
34
|
-
user.invitation_sent_at = Time.now.utc
|
35
|
-
user.save(:validate => false)
|
36
|
-
user.accept_invitation! if accept_invitation
|
37
|
-
user
|
38
|
-
end
|
39
|
-
|
40
|
-
# Fix assert_redirect_to in integration sessions because they don't take into
|
41
|
-
# account Middleware redirects.
|
42
|
-
#
|
43
|
-
def assert_redirected_to(url)
|
44
|
-
assert [301, 302].include?(@integration_session.status),
|
45
|
-
"Expected status to be 301 or 302, got #{@integration_session.status}"
|
46
|
-
|
47
|
-
url = prepend_host(url)
|
48
|
-
location = prepend_host(@integration_session.headers["Location"])
|
49
|
-
assert_equal url, location
|
50
|
-
end
|
51
|
-
|
52
|
-
protected
|
53
|
-
|
54
|
-
def prepend_host(url)
|
55
|
-
url = "http://#{request.host}#{url}" if url[0] == ?/
|
56
|
-
url
|
57
|
-
end
|
58
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
require 'test/test_helper'
|
2
|
-
|
3
|
-
class InvitationMailTest < ActionMailer::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
setup_mailer
|
7
|
-
Devise.mailer_sender = 'test@example.com'
|
8
|
-
end
|
9
|
-
|
10
|
-
def user
|
11
|
-
@user ||= begin
|
12
|
-
user = create_user_with_invitation('token')
|
13
|
-
user.send_invitation
|
14
|
-
user
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def mail
|
19
|
-
@mail ||= begin
|
20
|
-
user
|
21
|
-
ActionMailer::Base.deliveries.last
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
test 'email sent after reseting the user password' do
|
26
|
-
assert_not_nil mail
|
27
|
-
end
|
28
|
-
|
29
|
-
test 'content type should be set to html' do
|
30
|
-
assert_equal 'text/html; charset=UTF-8', mail.content_type
|
31
|
-
end
|
32
|
-
|
33
|
-
test 'send invitation to the user email' do
|
34
|
-
assert_equal [user.email], mail.to
|
35
|
-
end
|
36
|
-
|
37
|
-
test 'setup sender from configuration' do
|
38
|
-
assert_equal ['test@example.com'], mail.from
|
39
|
-
end
|
40
|
-
|
41
|
-
test 'setup subject from I18n' do
|
42
|
-
store_translations :en, :devise => { :mailer => { :invitation => { :subject => 'Localized Invitation' } } } do
|
43
|
-
assert_equal 'Localized Invitation', mail.subject
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
test 'subject namespaced by model' do
|
48
|
-
store_translations :en, :devise => { :mailer => { :invitation => { :user_subject => 'User Invitation' } } } do
|
49
|
-
assert_equal 'User Invitation', mail.subject
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
test 'body should have user info' do
|
54
|
-
assert_match /#{user.email}/, mail.body
|
55
|
-
end
|
56
|
-
|
57
|
-
test 'body should have link to confirm the account' do
|
58
|
-
host = ActionMailer::Base.default_url_options[:host]
|
59
|
-
invitation_url_regexp = %r{<a href=\"http://#{host}/users/invitation/accept\?invitation_token=#{user.invitation_token}">}
|
60
|
-
assert_match invitation_url_regexp, mail.body
|
61
|
-
end
|
62
|
-
end
|