Created
March 9, 2012 14:22
-
-
Save resure/2006719 to your computer and use it in GitHub Desktop.
RSpec & Factory_girl & Validation problems
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class DeviseCreateUsers < ActiveRecord::Migration | |
def change | |
create_table(:users) do |t| | |
t.string :username | |
t.string :real_name | |
t.boolean :author, default: false, null: false | |
t.boolean :moderator, default: false, null: false | |
t.boolean :admin, default: false, null: false | |
t.datetime :banned_at | |
## Database authenticatable | |
t.string :email, :null => false, :default => "" | |
t.string :encrypted_password, :null => false, :default => "" | |
## Recoverable | |
t.string :reset_password_token | |
t.datetime :reset_password_sent_at | |
## Rememberable | |
t.datetime :remember_created_at | |
## Trackable | |
t.integer :sign_in_count, :default => 0 | |
t.datetime :current_sign_in_at | |
t.datetime :last_sign_in_at | |
t.string :current_sign_in_ip | |
t.string :last_sign_in_ip | |
## Encryptable | |
# t.string :password_salt | |
## Confirmable | |
# t.string :confirmation_token | |
# t.datetime :confirmed_at | |
# t.datetime :confirmation_sent_at | |
# t.string :unconfirmed_email # Only if using reconfirmable | |
## Lockable | |
t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts | |
t.string :unlock_token # Only if unlock strategy is :email or :both | |
t.datetime :locked_at | |
## Token authenticatable | |
# t.string :authentication_token | |
t.timestamps | |
end | |
add_index :users, :email, :unique => true | |
add_index :users, :reset_password_token, :unique => true | |
# add_index :users, :confirmation_token, :unique => true | |
# add_index :users, :unlock_token, :unique => true | |
# add_index :users, :authentication_token, :unique => true | |
add_index :users, :username, unique: true | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Factory.define :user do |f| | |
f.sequence(:username) { |n| "foo#{n}" } | |
f.sequence(:email) { |n| "foo#{n}@example.com" } | |
f.real_name 'Foo Bar' | |
f.password 'secret' | |
f.password_confirmation 'secret' | |
end | |
Factory.define :page do |f| | |
f.sequence(:title) { |n| "Page #{n}" } | |
f.sequence(:url) { |n| "page-#{url}" } | |
f.user_id = Factory :user | |
f.content 'Lorem Ipsum' | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
source 'https://rubygems.org' | |
gem 'rails', '3.2.2' | |
gem 'pg' | |
group :assets do | |
gem 'sass-rails', '~> 3.2.3' | |
gem 'coffee-rails', '~> 3.2.1' | |
gem 'uglifier', '>= 1.0.3' | |
gem 'therubyracer' | |
gem 'twitter-bootstrap-rails' | |
end | |
group :production do | |
gem 'thin' | |
end | |
gem 'rspec-rails', group: [:test, :development] | |
group :test do | |
gem 'capybara' | |
gem 'factory_girl_rails' | |
gem 'guard-rspec' | |
gem 'spork' | |
gem 'guard-spork' | |
end | |
gem 'jquery-rails' | |
gem 'database_cleaner' | |
gem 'devise' | |
gem 'cancan' | |
gem 'simple_form' | |
gem 'friendly_id' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
~/Work/scpfoundation[pages*]% rspec . > gist - | |
/Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.2/lib/active_record/validations.rb:56:in `save!': Validation failed: Email has already been taken, Email has already been taken (ActiveRecord::RecordInvalid) | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.2/lib/active_record/attribute_methods/dirty.rb:33:in `save!' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.2/lib/active_record/transactions.rb:246:in `block in save!' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.2/lib/active_record/transactions.rb:295:in `block in with_transaction_returning_status' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.2/lib/active_record/transactions.rb:208:in `transaction' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.2/lib/active_record/transactions.rb:293:in `with_transaction_returning_status' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.2/lib/active_record/transactions.rb:246:in `save!' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/definition.rb:9:in `block in initialize' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/strategy/create.rb:11:in `[]' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/strategy/create.rb:11:in `block in result' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/strategy/create.rb:9:in `tap' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/strategy/create.rb:9:in `result' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/factory.rb:48:in `run' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/factory_runner.rb:23:in `run' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/syntax/methods.rb:63:in `create' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/syntax/vintage.rb:50:in `default_strategy' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/syntax/vintage.rb:143:in `Factory' | |
from /Users/resure/Work/scpfoundation/spec/factories.rb:12:in `block in <top (required)>' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/syntax/vintage.rb:30:in `define' | |
from /Users/resure/Work/scpfoundation/spec/factories.rb:9:in `<top (required)>' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:245:in `load' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:245:in `block in load' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:236:in `load_dependency' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:245:in `load' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/find_definitions.rb:16:in `block in find_definitions' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/find_definitions.rb:15:in `each' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl-2.6.1/lib/factory_girl/find_definitions.rb:15:in `find_definitions' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/factory_girl_rails-1.7.0/lib/factory_girl_rails/railtie.rb:26:in `block in <class:Railtie>' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/lazy_load_hooks.rb:34:in `call' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/lazy_load_hooks.rb:34:in `execute_hook' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/lazy_load_hooks.rb:43:in `block in run_load_hooks' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/lazy_load_hooks.rb:42:in `each' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/lazy_load_hooks.rb:42:in `run_load_hooks' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/application/finisher.rb:59:in `block in <module:Finisher>' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/initializable.rb:30:in `instance_exec' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/initializable.rb:30:in `run' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/initializable.rb:55:in `block in run_initializers' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/initializable.rb:54:in `each' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/initializable.rb:54:in `run_initializers' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/application.rb:136:in `initialize!' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/railtie/configurable.rb:30:in `method_missing' | |
from /Users/resure/Work/scpfoundation/config/environment.rb:5:in `<top (required)>' | |
from /Users/resure/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' | |
from /Users/resure/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' | |
from /Users/resure/Work/scpfoundation/spec/spec_helper.rb:6:in `block in <top (required)>' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/spork-1.0.0rc1/lib/spork.rb:23:in `prefork' | |
from /Users/resure/Work/scpfoundation/spec/spec_helper.rb:4:in `<top (required)>' | |
from /Users/resure/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' | |
from /Users/resure/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' | |
from /Users/resure/Work/scpfoundation/spec/controllers/pages_controller_spec.rb:1:in `<top (required)>' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in `load' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in `block in load_spec_files' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in `map' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in `load_spec_files' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.8.0/lib/rspec/core/command_line.rb:22:in `run' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:80:in `run_in_process' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:69:in `run' | |
from /Users/resure/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:10:in `block in autorun' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'rubygems' | |
require 'spork' | |
Spork.prefork do | |
ENV["RAILS_ENV"] ||= 'test' | |
require File.expand_path("../../config/environment", __FILE__) | |
require 'rspec/rails' | |
require 'rspec/autorun' | |
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} | |
RSpec.configure do |config| | |
config.use_transactional_fixtures = true | |
config.infer_base_class_for_anonymous_controllers = false | |
config.include(MailerMacros) | |
config.before(:suite) do | |
DatabaseCleaner.strategy = :transaction | |
DatabaseCleaner.clean_with(:truncation) | |
end | |
config.before(:each) do | |
reset_email | |
DatabaseCleaner.start | |
end | |
config.after(:each) do | |
DatabaseCleaner.clean | |
end | |
config.treat_symbols_as_metadata_keys_with_true_values = true | |
config.filter_run focus: :true | |
config.run_all_when_everything_filtered = true | |
end | |
end | |
Spork.each_run do | |
FactoryGirl.reload | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# encoding: utf-8 | |
class User < ActiveRecord::Base | |
devise :database_authenticatable, :registerable, | |
:recoverable, :rememberable, :trackable, :validatable, :lockable | |
attr_accessor :login | |
validates :email, uniqueness: { case_sensitive: false }, | |
email: true | |
validates :real_name, format: /^[\wа-яА-Я\d\s\-]*$/, if: :real_name_changed? | |
validates :username, format: /^[\w\_\d\s\-]+$/, length: { within: 3..30 } | |
attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :real_name | |
def self.find_for_database_authentication(warden_conditions) | |
conditions = warden_conditions.dup | |
login = conditions.delete(:login) | |
where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.strip.downcase }]).first | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment