restful_authenticationの生成したフィクスチャ、users.ymlを動的なものにする。
いやはや。
友達機能だとか、メッセージ機能だとかのテストをするとなると、やっぱり、沢山のユーザ・データが必要になる訳ですわ。
でも、restful_authenticationのジェネレータでは、たった3件、role_requiremetで作られるadminユーザを入れても、たったの4件しか、エントリーが無い訳ですわ。
そんなもん、どう足掻いたって、回りきらねぇよっwww
なんだけど、saltやらtokenやらcrypted_passwordなんてのは、どこかで生成しないと、解んないよね?
なんで、モノは試し、と、vendor/restful_authentication/generators/authenticated/spec/fixtures/users.ymlのコードをペロンと貼ってみたんだけど、なんか、エラーが返ってくる。
必要そうなものをrequireしてincludeして、と色々試したんだけど...
さて。どうしましょうか?
で、しばらく、放っておいたんだけど、今さっき、restful_authenticationのコードを見直したら、どうも、crypted_passwordの生成には、たった二つのメソッドしか、使ってないんだね...
- vendor/restful_authentication/lib/authentication.rbのModelClassMethods moduleの、secure_digest
- vendor/restful_authentication/lib/authentication/by_password.rbのModelClassMethods moduleの、password_digest
なんで、コレ、二つとも、持ってきちゃえば、動きそうだよね?
で、vendor/restful_authentication/generators/authenticated/spec/fixtures/users.ymlの冒頭のerbをペロンと貼って、その中に、上の二つのメソッドを追加してみた。
んで、動かしたら、動いたよwww
んじゃあ、とりあえず、人数増やす前のusers.ymlを。
test/fixtures/users.yml
<% ## this code must match that in templates/model.rb require 'digest/sha1' def secure_digest(*args) Digest::SHA1.hexdigest(args.flatten.join('--')) end def password_digest(password, salt) digest = REST_AUTH_SITE_KEY REST_AUTH_DIGEST_STRETCHES.times do digest = secure_digest(digest, salt, password, REST_AUTH_SITE_KEY) end digest end def make_fake_token @fake_token_counter ||= 0 @fake_token_counter += 1 Digest::SHA1.hexdigest(@fake_token_counter.to_s) end salts = (1..10).map{ make_fake_token } passwds = salts.map{ |salt| password_digest('monkey', salt) } %> quentin: id: 1 nickname: quentin family_name: Family middle_name: Middle given_name: Given email: quentin@example.com salt: <%= salts[0] %> # SHA1('0') crypted_password: <%= passwds[0] %> # 'monkey' created_at: <%= 5.days.ago.to_s :db %> remember_token_expires_at: <%= 1.days.from_now.to_s %> remember_token: <%= make_fake_token %> activation_code: activated_at: <%= 5.days.ago.to_s :db %> state: active aaron: id: 2 nickname: aaron family_name: Hogehoge middle_name: "" given_name: Fugafuga email: aaron@example.com salt: <%= salts[1] %> # SHA1('1') crypted_password: <%= passwds[1] %> # 'monkey' created_at: <%= 1.days.ago.to_s :db %> remember_token_expires_at: remember_token: activation_code: <%= make_fake_token %> activated_at: state: pending old_password_holder: id: 3 nickname: old_password_holder family_name: 名字 middle_name: ミドル・ネーム given_name: 名前 email: salty_dog@example.com salt: 7e3041ebc2fc05a40c60028e2c4901a81035d3cd crypted_password: 00742970dc9e6319f8019fd54864d3ea740f04b1 # test created_at: <%= 1.days.ago.to_s :db %> remember_token_expires_at: remember_token: activation_code: activated_at: <%= 5.days.ago.to_s :db %> state: passive admin: id: 4 nickname: admin family_name: アドミン middle_name: ザ given_name: 管理者 email: admin@example.com salt: <%= salts[2] %> # SHA1('2') crypted_password: <%= passwds[2] %> # 'monkey' # activation_code: adminscode # only if you're activating new signups created_at: <%= 1.days.ago.to_s :db %> remember_token_expires_at: remember_token: activation_code: activated_at: <%= 5.days.ago.to_s :db %> state: active
スゴイね。
ちゃんとテスト通ってるよwww
ああ、old_password_holderのsaltとcrypted_passwordは、falseを返す為のものだから、これでいいのだ:-) ...と思われ。
じゃあ、コレを更にアレンジしながら、人数増やしましょうかね。
ああ、あと、adminをid: 1に移動しようかな。
その方が、管理が楽そうだし。
じゃあ、そんな感じで、やっちゃいましょうか。