Ruby on Rails Tuesday, March 17, 2015

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: "user@example.com"}
 
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[foo@bar.com FOO_BAR@baz.com foo.bar_baz@qux.fum.com]
    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 rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
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.

No comments:

Post a Comment