Guest User

Untitled

a guest
Aug 29th, 2018
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.36 KB | None | 0 0
  1. attr_accessor causes Rspec tests to fail
  2. class User < ActiveRecord::Base
  3.  
  4. #authlogic
  5. acts_as_authentic do |c|
  6. c.login_field = :username_or_email
  7. end
  8.  
  9. #virtual field for allowing a user to login with their username or email
  10. attr_accessor :username_or_email
  11.  
  12. attr_accessible :username, :email, :password, :password_confirmation, :username_or_email
  13.  
  14. validates :username, :presence => true,
  15. :length => { :within => 3..20 },
  16. :uniqueness => true,
  17. :format => { :with => /A[a-z0-9][a-z0-9-]+[a-z0-9]z/ }
  18.  
  19. validates :email, :presence => true,
  20. :format => { :with => /A[w+-.]+@[a-zd-.]+.[a-z]+z/i },
  21. :uniqueness => { :case_sensative => false }
  22.  
  23. validates :password, :presence => true,
  24. :confirmation => true,
  25. :length => { :within => 6..40 }
  26.  
  27. def self.find_by_username_or_email(username_or_email)
  28. User.find_by_username(username_or_email) || User.find_by_email(username_or_email)
  29. end
  30.  
  31. end
  32.  
  33. require 'spec_helper'
  34.  
  35. describe User do
  36.  
  37. before(:each) do
  38. @attr = {
  39. :username => "example",
  40. :email => "user@example.com",
  41. :password => "password",
  42. :password_confirmation => "password"
  43. }
  44. end
  45.  
  46. describe "username validations" do
  47.  
  48. it "should allow usernames with numbers" do
  49. User.create!(@attr.merge(:username => 'example123'))
  50. end
  51.  
  52. it "should allow hyphens" do
  53. User.create!(@attr.merge(:username => 'example-two'))
  54. end
  55.  
  56. it "should require a username" do
  57. no_username_user = User.new (@attr.merge(:username => ""))
  58. no_username_user.should_not be_valid
  59. end
  60.  
  61. it "should reject usernames that are too long" do
  62. user = User.new(@attr.merge(:username => ("a" * 21)))
  63. user.should_not be_valid
  64. end
  65.  
  66. it "should reject username that are too short" do
  67. user = User.new(@attr.merge(:username => ("a" * 2)))
  68. user.should_not be_valid
  69. end
  70.  
  71. it "should reject username with uppercase letters" do
  72. user = User.new(@attr.merge(:username => "Example"))
  73. user.should_not be_valid
  74. end
  75.  
  76. it "should reject duplicate usernames" do
  77. User.create!(@attr)
  78. user = User.new(@attr.merge(:email => "user2@example.com"))
  79. user.should_not be_valid
  80. end
  81.  
  82. it "should reject usernames with whitespace characters" do
  83. u1 = User.new(@attr.merge(:username => "exa mple"))
  84. u2 = User.new(@attr.merge(:username => " example"))
  85. u3 = User.new(@attr.merge(:username => "example "))
  86. u4 = User.new(@attr.merge(:username => "exatmple"))
  87. u5 = User.new(@attr.merge(:username => "exanmple"))
  88.  
  89. u1.should_not be_valid
  90. u2.should_not be_valid
  91. u3.should_not be_valid
  92. u4.should_not be_valid
  93. u5.should_not be_valid
  94. end
  95.  
  96. it "should reject usernames with special characters" do
  97. u1 = User.new(@attr.merge(:username => 'ex&mple'))
  98. u2 = User.new(@attr.merge(:username => 'ex*mple'))
  99. u3 = User.new(@attr.merge(:username => 'ex"mple'))
  100. u4 = User.new(@attr.merge(:username => 'ex^mple'))
  101. u5 = User.new(@attr.merge(:username => 'ex;mple'))
  102.  
  103. u1.should_not be_valid
  104. u2.should_not be_valid
  105. u3.should_not be_valid
  106. u4.should_not be_valid
  107. u5.should_not be_valid
  108. end
  109.  
  110. it "should reject usernames that begin with a hypen" do
  111. user = User.new(@attr.merge(:username => '-example'))
  112. user.should_not be_valid
  113. end
  114.  
  115. it "should reject usernames that end with a hypen" do
  116. user = User.new(@attr.merge(:username => 'example-'))
  117. user.should_not be_valid
  118. end
  119.  
  120. end
  121.  
  122.  
  123.  
  124. describe "email validations" do
  125.  
  126. it "should require an email" do
  127. no_email_user = User.new (@attr.merge(:email => ""))
  128. no_email_user.should_not be_valid
  129. end
  130.  
  131. it "should reject duplicate emails" do
  132. User.create!(@attr)
  133. user2 = User.new(@attr.merge(:username => "example2"))
  134. user2.should_not be_valid
  135. end
  136.  
  137. it "should accept valid email addresses" do
  138. addresses = %w[user@foo.com THE_USER@foo.bar.org first.last@foo.jp]
  139. addresses.each do |address|
  140. valid_email_user = User.new(@attr.merge(:email => address))
  141. valid_email_user.should be_valid
  142. end
  143. end
  144.  
  145. it "should reject invalid email addresses" do
  146. addresses = %w[user@foo,com user_at_foo.org example.user@foo.]
  147. addresses.each do |address|
  148. invalid_email_user = User.new(@attr.merge(:email => address))
  149. invalid_email_user.should_not be_valid
  150. end
  151. end
  152.  
  153. it "should reject email address idential up to case" do
  154. User.create!(@attr)
  155. user = User.new(@attr.merge(:email => @attr[:email].capitalize))
  156. user.should_not be_valid
  157. end
  158.  
  159. end
  160.  
  161.  
  162.  
  163. describe "password validations" do
  164.  
  165. it "should require a password or a password confirmation" do
  166. user = User.new(@attr.merge(:password => "", :password_confirmation => ""))
  167. user.should_not be_valid
  168. end
  169.  
  170. it "should require a password" do
  171. user = User.new(@attr.merge(:password => ""))
  172. user.should_not be_valid
  173. end
  174.  
  175. it "should require a password confirmation" do
  176. user = User.new(@attr.merge(:password_confirmation => ""))
  177. user.should_not be_valid
  178. end
  179.  
  180. it "should require a matching password confirmation" do
  181. user = User.new(@attr.merge(:password_confirmation => "invalid"))
  182. user.should_not be_valid
  183. end
  184.  
  185. it "should reject passwords that are too short" do
  186. password = "a" * 5
  187. user = User.new(@attr.merge(:password => password, :password_confirmation => password))
  188. user.should_not be_valid
  189. end
  190.  
  191. it "should reject passwords that are too long" do
  192. password = "a" * 41
  193. user = User.new(@attr.merge(:password => password, :password_confirmation => password))
  194. user.should_not be_valid
  195. end
  196.  
  197. it "should require case sensative password confirmations" do
  198. password = "password"
  199. user = User.new(@attr.merge(:password => password,
  200. :password_confirmation => password.capitalize))
  201. user.should_not be_valid
  202. end
  203.  
  204. end
  205.  
  206. end
  207.  
  208. Running: spec/models/user_spec.rb
  209. FFFFFFFFFFFFFFFFFFFFFFF
  210.  
  211. Failures:
  212.  
  213. 1) User username validations should allow usernames with numbers
  214. Failure/Error: User.create!(@attr.merge(:username => 'example123'))
  215. NoMethodError:
  216. undefined method `username_or_email_changed?' for #<User:0x000001017c1850>
  217. # ./spec/models/user_spec.rb:17:in `block (3 levels) in <top (required)>'
  218.  
  219. 2) User username validations should allow hyphens
  220. Failure/Error: User.create!(@attr.merge(:username => 'example-two'))
  221. NoMethodError:
  222. undefined method `username_or_email_changed?' for #<User:0x00000100d50f10>
  223. # ./spec/models/user_spec.rb:21:in `block (3 levels) in <top (required)>'
  224.  
  225. 3) User username validations should require a username
  226. Failure/Error: no_username_user.should_not be_valid
  227. NoMethodError:
  228. undefined method `username_or_email_changed?' for #<User:0x00000100cc9da8>
  229. # ./spec/models/user_spec.rb:26:in `block (3 levels) in <top (required)>'
  230.  
  231. 4) User username validations should reject usernames that are too long
  232. Failure/Error: user.should_not be_valid
  233. NoMethodError:
  234. undefined method `username_or_email_changed?' for #<User:0x00000100c333f8>
  235. # ./spec/models/user_spec.rb:31:in `block (3 levels) in <top (required)>'
  236.  
  237. 5) User username validations should reject username that are too short
  238. Failure/Error: user.should_not be_valid
  239. NoMethodError:
  240. undefined method `username_or_email_changed?' for #<User:0x00000100aafbd0>
  241. # ./spec/models/user_spec.rb:36:in `block (3 levels) in <top (required)>'
  242.  
  243. 6) User username validations should reject username with uppercase letters
  244. Failure/Error: user.should_not be_valid
  245. NoMethodError:
  246. undefined method `username_or_email_changed?' for #<User:0x000001032e2f58>
  247. # ./spec/models/user_spec.rb:41:in `block (3 levels) in <top (required)>'
  248.  
  249. 7) User username validations should reject duplicate usernames
  250. Failure/Error: User.create!(@attr)
  251. NoMethodError:
  252. undefined method `username_or_email_changed?' for #<User:0x00000103167f70>
  253. # ./spec/models/user_spec.rb:45:in `block (3 levels) in <top (required)>'
  254.  
  255. 8) User username validations should reject usernames with whitespace characters
  256. Failure/Error: u1.should_not be_valid
  257. NoMethodError:
  258. undefined method `username_or_email_changed?' for #<User:0x000001032dbb40>
  259. # ./spec/models/user_spec.rb:57:in `block (3 levels) in <top (required)>'
  260.  
  261. 9) User username validations should reject usernames with special characters
  262. Failure/Error: u1.should_not be_valid
  263. NoMethodError:
  264. undefined method `username_or_email_changed?' for #<User:0x0000010328d0d0>
  265. # ./spec/models/user_spec.rb:71:in `block (3 levels) in <top (required)>'
  266.  
  267. 10) User username validations should reject usernames that begin with a hypen
  268. Failure/Error: user.should_not be_valid
  269. NoMethodError:
  270. undefined method `username_or_email_changed?' for #<User:0x0000010323f3d0>
  271. # ./spec/models/user_spec.rb:80:in `block (3 levels) in <top (required)>'
  272.  
  273. 11) User username validations should reject usernames that end with a hypen
  274. Failure/Error: user.should_not be_valid
  275. NoMethodError:
  276. undefined method `username_or_email_changed?' for #<User:0x00000103212a10>
  277. # ./spec/models/user_spec.rb:85:in `block (3 levels) in <top (required)>'
  278.  
  279. 12) User email validations should require an email
  280. Failure/Error: no_email_user.should_not be_valid
  281. NoMethodError:
  282. undefined method `username_or_email_changed?' for #<User:0x000001031ed4e0>
  283. # ./spec/models/user_spec.rb:96:in `block (3 levels) in <top (required)>'
  284.  
  285. 13) User email validations should reject duplicate emails
  286. Failure/Error: User.create!(@attr)
  287. NoMethodError:
  288. undefined method `username_or_email_changed?' for #<User:0x000001031bf630>
  289. # ./spec/models/user_spec.rb:100:in `block (3 levels) in <top (required)>'
  290.  
  291. 14) User email validations should accept valid email addresses
  292. Failure/Error: valid_email_user.should be_valid
  293. NoMethodError:
  294. undefined method `username_or_email_changed?' for #<User:0x000001031991b0>
  295. # ./spec/models/user_spec.rb:109:in `block (4 levels) in <top (required)>'
  296. # ./spec/models/user_spec.rb:107:in `each'
  297. # ./spec/models/user_spec.rb:107:in `block (3 levels) in <top (required)>'
  298.  
  299. 15) User email validations should reject invalid email addresses
  300. Failure/Error: invalid_email_user.should_not be_valid
  301. NoMethodError:
  302. undefined method `username_or_email_changed?' for #<User:0x0000010315d1b0>
  303. # ./spec/models/user_spec.rb:117:in `block (4 levels) in <top (required)>'
  304. # ./spec/models/user_spec.rb:115:in `each'
  305. # ./spec/models/user_spec.rb:115:in `block (3 levels) in <top (required)>'
  306.  
  307. 16) User email validations should reject email address idential up to case
  308. Failure/Error: User.create!(@attr)
  309. NoMethodError:
  310. undefined method `username_or_email_changed?' for #<User:0x0000010310a898>
  311. # ./spec/models/user_spec.rb:122:in `block (3 levels) in <top (required)>'
  312.  
  313. 17) User password validations should require a password or a password confirmation
  314. Failure/Error: user.should_not be_valid
  315. NoMethodError:
  316. undefined method `username_or_email_changed?' for #<User:0x0000010172f2c0>
  317. # ./spec/models/user_spec.rb:135:in `block (3 levels) in <top (required)>'
  318.  
  319. 18) User password validations should require a password
  320. Failure/Error: user.should_not be_valid
  321. NoMethodError:
  322. undefined method `username_or_email_changed?' for #<User:0x000001015f5b98>
  323. # ./spec/models/user_spec.rb:140:in `block (3 levels) in <top (required)>'
  324.  
  325. 19) User password validations should require a password confirmation
  326. Failure/Error: user.should_not be_valid
  327. NoMethodError:
  328. undefined method `username_or_email_changed?' for #<User:0x0000010155f120>
  329. # ./spec/models/user_spec.rb:145:in `block (3 levels) in <top (required)>'
  330.  
  331. 20) User password validations should require a matching password confirmation
  332. Failure/Error: user.should_not be_valid
  333. NoMethodError:
  334. undefined method `username_or_email_changed?' for #<User:0x00000101310298>
  335. # ./spec/models/user_spec.rb:150:in `block (3 levels) in <top (required)>'
  336.  
  337. 21) User password validations should reject passwords that are too short
  338. Failure/Error: user.should_not be_valid
  339. NoMethodError:
  340. undefined method `username_or_email_changed?' for #<User:0x00000100eecbf8>
  341. # ./spec/models/user_spec.rb:156:in `block (3 levels) in <top (required)>'
  342.  
  343. 22) User password validations should reject passwords that are too long
  344. Failure/Error: user.should_not be_valid
  345. NoMethodError:
  346. undefined method `username_or_email_changed?' for #<User:0x00000100d7f400>
  347. # ./spec/models/user_spec.rb:162:in `block (3 levels) in <top (required)>'
  348.  
  349. 23) User password validations should require case sensative password confirmations
  350. Failure/Error: user.should_not be_valid
  351. NoMethodError:
  352. undefined method `username_or_email_changed?' for #<User:0x00000100cf0b38>
  353. # ./spec/models/user_spec.rb:169:in `block (3 levels) in <top (required)>'
  354.  
  355. Finished in 0.19613 seconds
  356. 23 examples, 23 failures
  357.  
  358. class User < ActiveRecord::Base
  359.  
  360. #authlogic
  361. acts_as_authentic do |c|
  362. c.login_field = :username_or_email
  363. c.validates_login_field = false
  364. end
  365.  
  366. ...
  367.  
  368. end
Add Comment
Please, Sign In to add comment