describe EmailSanitizableConcern, type: :model do
  describe 'sanitize_email' do
    let(:email_concern) do
      (Class.new do
        include EmailSanitizableConcern
        attr_accessor :email

        def initialize(email)
          self.email = email
        end

        def [](key)
          self.send(key)
        end

        def []=(key, value)
          self.send("#{key}=", value)
        end
      end).new(email)
    end

    before do
      email_concern.sanitize_email(:email)
    end

    context 'on an empty email' do
      let(:email) { '' }
      it { expect(email_concern.email).to eq('') }
    end

    context 'on a valid email' do
      let(:email) { 'michel@toto.fr' }
      it { expect(email_concern.email).to eq('michel@toto.fr') }
    end

    context 'on an email with trailing spaces' do
      let(:email) { ' michel@toto.fr    ' }
      it { expect(email_concern.email).to eq('michel@toto.fr') }
    end

    context 'on an email with trailing nbsp' do
      let(:email) { ' michel@toto.fr  ' }
      it { expect(email_concern.email).to eq('michel@toto.fr') }
    end

    context 'on an invalid email' do
      let(:email) { 'mich el@toto.fr' }
      it { expect(email_concern.email).to eq('mich el@toto.fr') }
    end
  end
end