summaryrefslogtreecommitdiff
path: root/lib/generators/nifty/authentication/templates/tests/testunit/user.rb
blob: c036cf1373beba025cc81f5929da774371f40c7a (plain)
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
86
87
88
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

  def test_valid
    assert new_<%= user_singular_name %>.valid?
  end

  def test_require_username
    assert_equal ["can't be blank"], new_<%= user_singular_name %>(:username => '').errors[:username]
  end

  def test_require_password
    assert_equal ["can't be blank"], new_<%= user_singular_name %>(:password => '').errors[:password]
  end

  def test_require_well_formed_email
    assert_equal ["is invalid"], new_<%= user_singular_name %>(:email => 'foo@bar@example.com').errors[:email]
  end

  def test_validate_uniqueness_of_email
    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

  def test_validate_uniqueness_of_username
    new_<%= user_singular_name %>(:username => 'uniquename').save!
    assert_equal ["has already been taken"], new_<%= user_singular_name %>(:username => 'uniquename').errors[:username]
  end

  def test_validate_odd_characters_in_username
    assert_equal ["should only contain letters, numbers, or .-_@"], new_<%= user_singular_name %>(:username => 'odd ^&(@)').errors[:username]
  end

  def test_validate_password_length
    assert_equal ["is too short (minimum is 4 characters)"], new_<%= user_singular_name %>(:password => 'bad').errors[:password]
  end

  def test_require_matching_password_confirmation
    assert_equal ["doesn't match confirmation"], new_<%= user_singular_name %>(:password_confirmation => 'nonmatching').errors[:password]
  end

  def test_generate_password_hash_and_salt_on_create
    <%= user_singular_name %> = new_<%= user_singular_name %>
    <%= user_singular_name %>.save!
    assert <%= user_singular_name %>.password_hash
    assert <%= user_singular_name %>.password_salt
  end

  def test_authenticate_by_username
    <%= user_class_name %>.delete_all
    <%= 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

  def test_authenticate_by_email
    <%= user_class_name %>.delete_all
    <%= 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

  def test_authenticate_bad_username
    assert_nil <%= user_class_name %>.authenticate('nonexisting', 'secret')
  end

  def test_authenticate_bad_password
    <%= user_class_name %>.delete_all
    new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret').save!
    assert_nil <%= user_class_name %>.authenticate('foobar', 'badpassword')
  end
<%- end -%>
end