Salut à tous,
je suis en train de créer une application avec Rails 4.2. J’ai un souci
d’unicité. Je voudrais vérifier qu’une adresse email n’est pas en double
dans la base de données et voici comment je fais :
app/models/users.rb
== Schema Information
Table name: users
id :integer not null, primary key
nom :string
email :string
created_at :datetime not null
updated_at :datetime not null
class User < ActiveRecord::Base
attr_accessor :nom, :email
email_regex = /\A[\w+-.]+@[a-z\d-.]+.[a-z]+\z/i
validates :nom, presence: true, length: {maximum: 50}
validates :email, presence: true, format: {with: email_regex},
uniqueness:
true
end
db/migrate/20150317112639_add_email_uniqueness_index.rb :
class AddEmailUniquenessIndex < ActiveRecord::Migration
def self.up
add_index :users, :email, unique: true
end
def self.down
remove_index :users, :email
end
end
spec/models/user_spec.rb :
== Schema Information
Table name: users
id :integer not null, primary key
nom :string
email :string
created_at :datetime not null
updated_at :datetime not null
require ‘rails_helper’
RSpec.describe User, type: :model do
before(:each) do
@attr = {nom: “Example User”, email: “[email protected]”}
end
it “doit créer une nouvelle instance avec des attributs valides” do
User.create!(@attr)
end
it “devrait exiger un nom obligatoire” do
bad_guy = User.new(@attr.merge(nom: “”))
bad_guy.should_not be_valid
end
it “devrait exiger une adresse email obligatoire” do
bad_guy = User.new(@attr.merge(email: “”))
bad_guy.should_not be_valid
end
it “devrait rejeter les noms trop longs” do
long_name = “a” * 51
bad_guy = User.new(@attr.merge(nom: long_name))
bad_guy.should_not be_valid
end
it “devrait accepter les adresses emails valides” do
adresses = %w[[email protected] removed_em[email protected] [email protected]]
adresses.each do |adress|
valid_email = User.new(@attr.merge(email: adress))
valid_email.should be_valid
end
end
it “devrait rejeter les adresses emails invalides” do
adresses = %w[foo@bar,com foo.bar.com foobar@baz.]
adresses.each do |adress|
valid_email = User.new(@attr.merge(email: adress))
valid_email.should_not be_valid
end
end
it “devrait rejeter les emails doubles” do
User.create!(@attr)
user_duplicate = User.create!(@attr)
user_duplicate.should_not be_valid
end
it “devrait rejeter les emails doubles insensible à la casse” do
user_upcase = @attr[:email].upcase
User.create!(@attr.merge(email: user_upcase))
user = User.create(@attr)
user.should_not be_valid
end
end
Je ne comprends pas car lors de l’exécution de rspec spec/ j’ai comme
erreur :
Failed examples:
rspec ./spec/models/user_spec.rb:55 # User devrait rejeter les emails
doubles
rspec ./spec/models/user_spec.rb:61 # User devrait rejeter les emails
doubles insensible à la casse
Vous y comprenez quelque chose ? Merci de votre aide et désolé de parler
français.
PS : Vous pouvez retrouver l’application en entier sur :
https://github.com/mjerem34/sample_app/tree/users