feature/share-libs
rb 87 lines 2.42 KB
Raw
1 require 'test_helper'
2
3 class UserTest < ActiveSupport::TestCase
4 # test "the truth" do
5 # assert true
6 # end
7
8 def setup
9 @user = User.new(name: 'Example user', email: 'user@example.com',
10 password: 'foobar', password_confirmation: 'foobar')
11 end
12
13 test 'should be valid' do
14 assert @user.valid?
15 end
16
17 test 'name should be present' do
18 @user.name = ' '
19 assert_not @user.valid?
20 end
21
22 test 'email should be present' do
23 @user.email = ' '
24 assert_not @user.valid?
25 end
26
27 test 'name should not be too long' do
28 @user.name = 'a' * 51
29 assert_not @user.valid?
30 end
31
32 test 'email should not be too long' do
33 @user.email = 'a' * 244 + '@example.com'
34 end
35
36 test 'email validation should accept valid addresses' do
37 valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org first.last@foo.jp alice+bob@baz.cn]
38 valid_addresses.each do |valid_address|
39 @user.email = valid_address
40 assert @user.valid?, "#{valid_address.inspect} should be valid"
41 end
42 end
43
44 test 'email validation should reject invalid addresses' do
45 invalid_addresses = %w[user@example,com user_at_foo.org user.name@example. foo@bar_baz.com foo@bar+baz.com
46 foo@bar..com]
47 invalid_addresses.each do |invalid_address|
48 @user.email = invalid_address
49 assert_not @user.valid?, "#{invalid_address.inspect} should be invalid"
50 end
51 end
52
53 test 'email addresses should be unique' do
54 duplicate_user = @user.dup
55 duplicate_user.email = @user.email.upcase
56 @user.save
57 assert_not duplicate_user.valid?
58 end
59
60 test 'email address should be saved as lower case' do
61 mixed_case_email = 'Foo@ExAMPle.CoM'
62 @user.email = mixed_case_email
63 @user.save
64 assert_equal mixed_case_email.downcase, @user.reload.email
65 end
66
67 test 'password should be present (not blank)' do
68 @user.password = @user.password_confirmation = ' ' * 6
69 assert_not @user.valid?
70 end
71
72 test 'password should have a minimum length' do
73 @user.password = @user.password_confirmation = 'a' * 5
74 assert_not @user.valid?
75 end
76
77 test "should follow and unfollow a user" do
78 michael = users(:michael)
79 archer = users(:archer)
80 assert_not michael.following?(archer)
81 michael.follow(archer)
82 assert michael.following?(archer)
83 assert archer.followers.include?(michael)
84 michael.unfollow(archer)
85 assert_not michael.following?(archer)
86 end
87 end