1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
require 'test_helper'
class <%= user_class_name %>Test < ActiveSupport::TestCase
<%- unless options[:authlogic] -%>
def new_<%= user_singular_name %>(attributes = {})
attributes[:username] ||= 'foo'
attributes[:email] ||= 'foo@example.com'
attributes[:password] ||= 'abc123'
attributes[:password_confirmation] ||= attributes[:password]
<%= user_singular_name %> = <%= user_class_name %>.new(attributes)
<%= user_singular_name %>.valid? # run validations
<%= user_singular_name %>
end
def setup
<%= user_class_name %>.delete_all
end
should "be valid" do
assert new_<%= user_singular_name %>.valid?
end
should "require username" do
assert_equal ["can't be blank"], new_<%= user_singular_name %>(:username => '').errors[:username]
end
should "require password" do
assert_equal ["can't be blank"], new_<%= user_singular_name %>(:password => '').errors[:password]
end
should "require well formed email" do
assert_equal ["is invalid"], new_<%= user_singular_name %>(:email => 'foo@bar@example.com').errors[:email]
end
should "validate uniqueness of email" do
new_<%= user_singular_name %>(:email => 'bar@example.com').save!
assert_equal ["has already been taken"], new_<%= user_singular_name %>(:email => 'bar@example.com').errors[:email]
end
should "validate uniqueness of username" do
new_<%= user_singular_name %>(:username => 'uniquename').save!
assert_equal ["has already been taken"], new_<%= user_singular_name %>(:username => 'uniquename').errors[:username]
end
should "not allow odd characters in username" do
assert_equal ["should only contain letters, numbers, or .-_@"], new_<%= user_singular_name %>(:username => 'odd ^&(@)').errors[:username]
end
should "validate password is longer than 3 characters" do
assert_equal ["is too short (minimum is 4 characters)"], new_<%= user_singular_name %>(:password => 'bad').errors[:password]
end
should "require matching password confirmation" do
assert_equal ["doesn't match confirmation"], new_<%= user_singular_name %>(:password_confirmation => 'nonmatching').errors[:password]
end
should "generate password hash and salt on create" do
<%= user_singular_name %> = new_<%= user_singular_name %>
<%= user_singular_name %>.save!
assert <%= user_singular_name %>.password_hash
assert <%= user_singular_name %>.password_salt
end
should "authenticate by username" do
<%= user_singular_name %> = new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret')
<%= user_singular_name %>.save!
assert_equal <%= user_singular_name %>, <%= user_class_name %>.authenticate('foobar', 'secret')
end
should "authenticate by email" do
<%= user_singular_name %> = new_<%= user_singular_name %>(:email => 'foo@bar.com', :password => 'secret')
<%= user_singular_name %>.save!
assert_equal <%= user_singular_name %>, <%= user_class_name %>.authenticate('foo@bar.com', 'secret')
end
should "not authenticate bad username" do
assert_nil <%= user_class_name %>.authenticate('nonexisting', 'secret')
end
should "not authenticate bad password" do
new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret').save!
assert_nil <%= user_class_name %>.authenticate('foobar', 'badpassword')
end
<%- end -%>
end
|