Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## Object Daddy fails
- require 'spec/factory'
- describe UsersController do
- it 'allows signup' do
- lambda do
- create_user
- response.should be_redirect
- end.should change(User, :count).by(1)
- end
- def create_user(options = {})
- user = User.generate
- post :create, :user => {
- :login => user.login,
- :email => user.email,
- :password => user.password,
- :password_confirmation => user.password_confirmation
- }.merge(options)
- return user
- end
- end
- ## Factory builder passes
- require 'spec/factory'
- describe UsersController do
- it 'allows signup' do
- lambda do
- create_user
- response.should be_redirect
- end.should change(User, :count).by(1)
- end
- def create_user(options = {})
- user = User.build_valid
- post :create, :user => {
- :login => user.login,
- :email => user.email,
- :password => user.password,
- :password_confirmation => user.password_confirmation
- }.merge(options)
- return user
- end
- end
- ## Here's the user exemplar
- class User
- generator_for :login, :start => 'Login000' do |prev|
- prev.succ
- end
- generator_for :name, :start => 'Name 000' do |prev|
- name, id = prev.split(/ /)
- "#{name} #{id.succ}"
- end
- generator_for :email, :start => 'email000@domain.com' do |prev|
- user, domain = prev.split(/@/)
- "#{user.succ}@#{domain}"
- end
- generator_for :password, :start => 'password000' do |prev|
- prev.succ
- end
- generator_for :password_confirmation, :start => 'password000' do |prev|
- prev.succ
- end
- generator_for :created_at, 5.days.ago
- generator_for :salt, '7e3041ebc2fc05a40c60028e2c4901a81035d3cd'
- end
- ## Here's the factory builder
- module Factory
- def self.included(base)
- base.extend(self)
- end
- def build_valid(params = {})
- unless self.respond_to?("builder_#{self.name.underscore}")
- raise "There are no default params for #{self.name}"
- end
- new(self.send("builder_#{self.name.underscore}").merge(params))
- end
- def build_valid!(params = {})
- obj = build(params)
- obj.save!
- obj
- end
- def builder_user
- random = Time.now.to_i
- {
- :login => "Login#{random}",
- :email => "#{random}@email.com",
- :name => "Name #{random}",
- :password => "#{random}",
- :password_confirmation => "#{random}"
- }
- end
- end
- ActiveRecord::Base.class_eval do
- include Factory
- end
Add Comment
Please, Sign In to add comment