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] [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


-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/f7560e24-5534-4359-befb-d4b88cb3a11e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to