PageRenderTime 45ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/test/unit/user_test.rb

https://github.com/newrooky/lftwb
Ruby | 307 lines | 213 code | 52 blank | 42 comment | 5 complexity | eecb3a23f237c97fe601b2ef18aa4bff MD5 | raw file
Possible License(s): MIT
  1. require File.dirname(__FILE__) + '/../test_helper'
  2. class UserTest < Test::Unit::TestCase
  3. context 'A user instance' do
  4. should_have_many :friendships
  5. # TODO uncomment these when shoulda adds support for source
  6. #should_have_many :friends, :through => :friendships, :source => :invited
  7. #should_have_many :followers, :through => :follower_friends
  8. #should_have_many :followings, :through => :following_friends
  9. should_have_many :follower_friends
  10. should_have_many :following_friends
  11. should_have_many :comments, :blogs
  12. should_have_many :pages
  13. should_have_many :moderatorships
  14. should_have_many :forums
  15. should_have_many :posts
  16. should_have_many :topics
  17. should_have_many :monitorships
  18. should_have_many :monitored_topics, :through => :monitorships
  19. should_require_unique_attributes :login, :email
  20. should_require_attributes :login, :email, :first_name, :last_name
  21. should_ensure_length_in_range :password, (4..40)
  22. should_ensure_length_in_range :login, (3..40)
  23. should_have_many :permissions
  24. should_have_many :roles, :through => :permissions
  25. should_have_many :events
  26. should_have_many :event_users
  27. should_have_many :attending_events
  28. should_protect_attributes :crypted_password, :salt, :remember_token, :remember_token_expires_at, :activation_code, :activated_at,
  29. :password_reset_code, :enabled, :can_send_messages, :is_active, :created_at, :updated_at, :plone_password,
  30. :posts_count
  31. should_ensure_length_in_range :email, 6..100 #, :short_message => 'does not look like a valid email address.', :long_message => 'does not look like a valid email address.'
  32. should_allow_values_for :email, 'a@x.com', 'de.veloper@example.com'
  33. should_not_allow_values_for :email, 'example.com', '@example.com', 'developer@example', 'developer', :message => 'does not look like a valid email address.'
  34. should_not_allow_values_for :login, 'test guy', 'test.guy', 'testguy!', 'test@guy.com', :message => 'may only contain letters, numbers or a hyphen.'
  35. should_allow_values_for :login, 'testguy', 'test-guy'
  36. should_have_named_scope :by_login_alpha, :order => "login DESC"
  37. should_have_named_scope :by_newest, :order => "created_at DESC"
  38. should_have_named_scope :active, :conditions => "activated_at IS NOT NULL"
  39. should_have_named_scope :inactive, :conditions => "activated_at IS NULL"
  40. should_have_named_scope 'recent(1.day.ago)'
  41. should_have_named_scope "by_login('a')"
  42. end
  43. should "Create a new user and a feed item" do
  44. assert_difference 'User.count' do
  45. assert_difference 'FeedItem.count' do
  46. user = Factory(:user)
  47. assert !user.new_record?, "#{user.errors.full_messages.to_sentence}"
  48. end
  49. end
  50. end
  51. should "have full name" do
  52. assert_difference 'User.count' do
  53. user = Factory(:user, :first_name => 'quent', :last_name => 'smith')
  54. assert !user.new_record?, "#{user.errors.full_messages.to_sentence}"
  55. assert user.full_name == 'quent smith'
  56. end
  57. end
  58. should "have display name" do
  59. assert_difference 'User.count' do
  60. user = Factory(:user, :login => 'quentguy')
  61. assert !user.new_record?, "#{user.errors.full_messages.to_sentence}"
  62. assert user.display_name == 'quentguy'
  63. end
  64. end
  65. should "Create a new user and lowercase the login" do
  66. assert_difference 'User.count' do
  67. user = Factory(:user, :login => 'TESTGUY')
  68. assert !user.new_record?, "#{user.errors.full_messages.to_sentence}"
  69. assert user.login == 'testguy'
  70. end
  71. end
  72. should "Not allow login with dot" do
  73. user = Factory.build(:user, :login => 'test.guy')
  74. assert !user.valid?
  75. end
  76. should "Not allow login with dots" do
  77. user = Factory.build(:user, :login => 'test.guy.guy')
  78. assert !user.valid?
  79. end
  80. should "Allow login with dash" do
  81. user = Factory.build(:user, :login => 'test-guy')
  82. assert user.valid?
  83. end
  84. should "Not allow login with '@'" do
  85. user = Factory.build(:user, :login => 'testguy@example.com')
  86. assert !user.valid?
  87. end
  88. should "Not allow login with '!'" do
  89. user = Factory.build(:user, :login => 'testguy!')
  90. assert !user.valid?
  91. end
  92. should "be in the admin role" do
  93. admin = users(:admin)
  94. assert admin.is_admin?
  95. end
  96. # should "Fail to create a new user because they didn't agree to terms of service" do
  97. # assert_no_difference 'User.count' do
  98. # user = Factory.build(:user, :terms_of_service => false)
  99. # assert user.new_record?, "#{user.errors.full_messages.to_sentence}"
  100. # end
  101. # end
  102. should "initialize activation code upon creation" do
  103. user = Factory(:user)
  104. assert_not_nil user.activation_code
  105. end
  106. should "require login" do
  107. assert_no_difference 'User.count' do
  108. u = Factory.build(:user, :login => nil)
  109. assert !u.valid?
  110. assert u.errors.on(:login)
  111. end
  112. end
  113. should "require password" do
  114. assert_no_difference 'User.count' do
  115. u = Factory.build(:user, :password => nil)
  116. assert !u.valid?
  117. assert u.errors.on(:password)
  118. end
  119. end
  120. should "require password confirmation" do
  121. assert_no_difference 'User.count' do
  122. u = Factory.build(:user, :password_confirmation => nil)
  123. assert !u.valid?
  124. assert u.errors.on(:password_confirmation)
  125. end
  126. end
  127. should "require require email" do
  128. assert_no_difference 'User.count' do
  129. u = Factory.build(:user, :email => nil)
  130. assert !u.valid?
  131. assert u.errors.on(:email)
  132. end
  133. end
  134. should "be able to reset their password" do
  135. assert_not_equal false, users(:quentin).update_attributes(:email => "hiapal@hotmail.com", :password => 'new password', :password_confirmation => 'new password')
  136. assert_equal users(:quentin), User.authenticate('quentin', 'new password')
  137. end
  138. should "not rehash password" do
  139. user = users(:quentin)
  140. hashed_password = user.crypted_password
  141. user.update_attributes(:login => 'quentin2')
  142. assert_equal hashed_password, user.crypted_password
  143. end
  144. should "authenticate user" do
  145. assert_equal users(:quentin), User.authenticate('quentin', 'test')
  146. end
  147. should "set remember token" do
  148. users(:quentin).remember_me
  149. assert_not_nil users(:quentin).remember_token
  150. assert_not_nil users(:quentin).remember_token_expires_at
  151. end
  152. should "unset remember token" do
  153. users(:quentin).remember_me
  154. assert_not_nil users(:quentin).remember_token
  155. users(:quentin).forget_me
  156. assert_nil users(:quentin).remember_token
  157. end
  158. should "remember me for one week" do
  159. before = 1.week.from_now.utc
  160. users(:quentin).remember_me_for 1.week
  161. after = 1.week.from_now.utc
  162. assert_not_nil users(:quentin).remember_token
  163. assert_not_nil users(:quentin).remember_token_expires_at
  164. assert users(:quentin).remember_token_expires_at.between?(before, after)
  165. end
  166. should "remember me until one week" do
  167. time = 1.week.from_now.utc
  168. users(:quentin).remember_me_until time
  169. assert_not_nil users(:quentin).remember_token
  170. assert_not_nil users(:quentin).remember_token_expires_at
  171. assert_equal users(:quentin).remember_token_expires_at, time
  172. end
  173. should "remember me default two weeks" do
  174. before = 2.weeks.from_now.utc
  175. users(:quentin).remember_me
  176. after = 2.weeks.from_now.utc
  177. assert_not_nil users(:quentin).remember_token
  178. assert_not_nil users(:quentin).remember_token_expires_at
  179. assert users(:quentin).remember_token_expires_at.between?(before, after)
  180. end
  181. # test friendships
  182. context 'users(:quentin)' do
  183. should 'be friends with users(:aaron)' do
  184. assert users(:quentin).friend_of?( users(:aaron) )
  185. assert users(:aaron).friend_of?( users(:quentin) )
  186. end
  187. should 'be following users(:follower_guy)' do
  188. assert users(:quentin).following?( users(:follower_guy) )
  189. assert users(:follower_guy).followed_by?( users(:quentin) )
  190. end
  191. end
  192. should "get a list of other users to share activity feed with" do
  193. share_with = users(:quentin).feed_to
  194. assert share_with.include?(users(:quentin))
  195. assert share_with.include?(users(:aaron))
  196. end
  197. should "get rss links for blog" do
  198. u = Factory.build(:user)
  199. u.blog = "http://www.justinball.com"
  200. end
  201. # should "prefix with http" do
  202. # p = users(:quentin)
  203. # assert p.website.nil?
  204. # assert p.website = 'example.com'
  205. # assert p.save
  206. # assert_equal 'http://example.com', p.reload.website
  207. # end
  208. #
  209. # should "prefix with http4" do
  210. # p = users(:quentin)
  211. # assert p.website.nil?
  212. # assert p.website = ''
  213. # assert p.save
  214. # assert_equal '', p.reload.website
  215. # end
  216. #
  217. # should "prefix with http2" do
  218. # p = users(:quentin)
  219. # assert p.blog.nil?
  220. # assert p.blog = 'example.com'
  221. # assert p.save
  222. # assert_equal 'http://example.com', p.reload.blog
  223. # end
  224. #
  225. # should "prefix with friend_guy" do
  226. # p = users(:quentin)
  227. # assert p.flickr.nil?
  228. # assert p.flickr = 'example.com'
  229. # assert p.save
  230. # assert_equal 'http://example.com', p.reload.flickr
  231. # end
  232. should "have wall with aaron" do
  233. assert users(:quentin).has_wall_with(users(:aaron))
  234. end
  235. should "not have wall with friend_guy" do
  236. assert !users(:quentin).has_wall_with(users(:friend_guy))
  237. end
  238. def test_associations
  239. _test_associations
  240. end
  241. protected
  242. def call_methods(user)
  243. user.friendships
  244. user.follower_friends
  245. user.following_friends
  246. user.friends
  247. user.followers
  248. user.followings
  249. user.friendships_initiated_by_me
  250. user.friendships_not_initiated_by_me
  251. user.occurances_as_friend
  252. user.pledge_requests
  253. user.active?
  254. end
  255. end