Changeset 1603

Show
Ignore:
Timestamp:
05/26/08 21:41:52 (3 months ago)
Author:
mikey
Message:

add more checks why the mail address filter fails for better user experience on what went wrong with an entered mail address

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/main/php/net/stubbles/ipo/request/filter/stubMailFilter.php

    r1547 r1603  
    6262    public function execute($value) 
    6363    { 
    64         if ($this->mailValidator->validate($value) === false) { 
    65             throw new stubFilterException($this->rveFactory->create('MAILADDRESS_INCORRECT')); 
     64        if (strlen($value) === 0) { 
     65            return null; 
     66        } 
     67         
     68        if ($this->mailValidator->validate($value) === true) { 
     69            return $value; 
     70        } 
     71         
     72        //    check for spaces 
     73        if (preg_match('/\s/i', $value) != false) { 
     74            throw new stubFilterException($this->rveFactory->create('MAILADDRESS_CANNOT_CONTAIN_SPACES')); 
    6675        } 
    6776 
    68         return $value; 
     77        //    check for German umlaut 
     78        if (preg_match('/[üöäß]/i', $value) != false) { 
     79            throw new stubFilterException($this->rveFactory->create('MAILADDRESS_CANNOT_CONTAIN_UMLAUTS')); 
     80        } 
     81 
     82        //    check for more than one '@' 
     83        if (substr_count($value, '@') != 1) { 
     84            throw new stubFilterException($this->rveFactory->create('MAILADDRESS_MUST_CONTAIN_ONE_AT')); 
     85        } 
     86 
     87        //    check for valid chars in email 
     88        if (preg_match('/^[' . preg_quote('abcdefghijklmnopqrstuvwxyz1234567890@.+_-') . ']+$/iD', $value) == false) { 
     89            throw new stubFilterException($this->rveFactory->create('MAILADDRESS_CONTAINS_ILLEGAL_CHARS')); 
     90        } 
     91         
     92        if (strpos($value, '..') !== false) { 
     93            throw new stubFilterException($this->rveFactory->create('MAILADDRESS_CONTAINS_TWO_FOLLOWING_DOTS')); 
     94        } 
     95         
     96        throw new stubFilterException($this->rveFactory->create('MAILADDRESS_INCORRECT')); 
    6997    } 
    7098} 
  • trunk/src/main/resources/ipo/request.xml

    r1602 r1603  
    2828      <message locale="en_*">Please enter a correct value.</message> 
    2929      <message locale="de_*">Bitte geben Sie einen korrekten Wert an.</message> 
     30      <message locale="fr_*">Votre choix n’est pas valide. Veuillez modifier votre choix.</message> 
     31      <message locale="es_*">Selección no válida. Vuelva a realizar la selección.</message> 
    3032    </messages> 
    3133    <valueKeys /> 
     
    127129    </valueKeys> 
    128130  </error> 
     131  <error id="MAILADDRESS_CANNOT_CONTAIN_SPACES"> 
     132    <messages> 
     133      <message locale="default">The mail address can not contain spaces.</message> 
     134      <message locale="en_*">The mail address can not contain spaces.</message> 
     135      <message locale="de_*">Die E-Mail Adresse darf keine Leerzeichen enthalten.</message> 
     136      <message locale="fr_*">L’adresse email ne doit pas comporter d’espace.</message> 
     137      <message locale="es_*">La dirección de e-mail no deberá contener espacios en blanco.</message> 
     138    </messages> 
     139    <valueKeys /> 
     140  </error> 
     141  <error id="MAILADDRESS_CANNOT_CONTAIN_UMLAUTS"> 
     142    <messages> 
     143      <message locale="default">The mail address can not contain german umlauts nor the character 'ß'.</message> 
     144      <message locale="en_*">The mail address can not contain german umlauts nor the character 'ß'.</message> 
     145      <message locale="de_*">Die E-Mail Adresse darf keine Umlaute oder 'ß' enthalten.</message> 
     146      <message locale="fr_*">L’adresse email ne doit pas comporter d’accent.</message> 
     147      <message locale="es_*">La dirección de e-mail no deberá contener caracteres con tilde o diéresis.</message> 
     148    </messages> 
     149    <valueKeys /> 
     150  </error> 
     151  <error id="MAILADDRESS_CONTAINS_ILLEGAL_CHARS"> 
     152    <messages> 
     153      <message locale="default">The mail address contains illegal characters.</message> 
     154      <message locale="en_*">The mail address contains illegal characters.</message> 
     155      <message locale="de_*">Die E-Mail Adresse enthÀlt ungÃŒltige Zeichen.</message> 
     156      <message locale="fr_*">L’adresse email comporte des caractÚres invalides.</message> 
     157      <message locale="es_*">La dirección de e-mail contiene caracteres no válidos.</message> 
     158    </messages> 
     159    <valueKeys /> 
     160  </error> 
     161  <error id="MAILADDRESS_MUST_CONTAIN_ONE_AT"> 
     162    <messages> 
     163      <message locale="default">The mail address must contain exactly one '@' sign.</message> 
     164      <message locale="en_*">The mail address must contain exactly one '@' sign.</message> 
     165      <message locale="de_*">Eine E-Mail-Adresse muss genau ein '@' enthalten.</message> 
     166      <message locale="fr_*">Une adresse email doit comporter exactement un '@'.</message> 
     167      <message locale="es_*">La dirección de e-mail introducida no es válida. Por favor, introdúzcala de nuevo correctamente.</message> 
     168    </messages> 
     169    <valueKeys /> 
     170  </error> 
     171  <error id="MAILADDRESS_CONTAINS_TWO_FOLLOWING_DOTS"> 
     172    <messages> 
     173      <message locale="default">The mail address can not contain two consecutive dots.</message> 
     174      <message locale="en_*">The mail address can not contain two consecutive dots.</message> 
     175      <message locale="de_*">Die E-Mail Adresse darf keine zwei aufeinanderfolgenden Punkte enthalten.</message> 
     176      <message locale="fr_*">L’adresse email ne doit pas comporter deux points à la suite.</message> 
     177      <message locale="es_*">La dirección de e-mail no deberá incluir dos puntos seguidos.</message> 
     178    </messages> 
     179    <valueKeys /> 
     180  </error> 
    129181  <error id="MAILADDRESS_INCORRECT"> 
    130182    <messages> 
     
    132184      <message locale="en_*">The mail address is not correct.</message> 
    133185      <message locale="de_*">Die E-Mail-Adresse ist nicht korrekt.</message> 
     186      <message locale="fr_*">Le format de l’adresse email est invalide. Veuillez modifier votre saisie selon le modÚle [nom@domaine.fr].</message> 
     187      <message locale="es_*">El formato del e-mail no es válido. Por favor, introduzca su e-mail de nuevo correctamente.</message> 
    134188    </messages> 
    135189    <valueKeys /> 
  • trunk/src/test/php/net/stubbles/integration/stubRequestValueErrorXJConfFactoryTestCase.php

    r1602 r1603  
    3737        $this->DATE_TOO_EARLY($rveFactory); 
    3838        $this->DATE_TOO_LATE($rveFactory); 
     39        $this->MAILADDRESS_CANNOT_CONTAIN_SPACES($rveFactory); 
     40        $this->MAILADDRESS_CANNOT_CONTAIN_UMLAUTS($rveFactory); 
     41        $this->MAILADDRESS_MUST_CONTAIN_ONE_AT($rveFactory); 
     42        $this->MAILADDRESS_CONTAINS_ILLEGAL_CHARS($rveFactory); 
     43        $this->MAILADDRESS_CONTAINS_TWO_FOLLOWING_DOTS($rveFactory); 
    3944        $this->MAILADDRESS_INCORRECT($rveFactory); 
    4045        $this->URL_INCORRECT($rveFactory); 
     
    5762        $this->DATE_TOO_EARLY($rveFactory); 
    5863        $this->DATE_TOO_LATE($rveFactory); 
     64        $this->MAILADDRESS_CANNOT_CONTAIN_SPACES($rveFactory); 
     65        $this->MAILADDRESS_CANNOT_CONTAIN_UMLAUTS($rveFactory); 
     66        $this->MAILADDRESS_MUST_CONTAIN_ONE_AT($rveFactory); 
     67        $this->MAILADDRESS_CONTAINS_ILLEGAL_CHARS($rveFactory); 
     68        $this->MAILADDRESS_CONTAINS_TWO_FOLLOWING_DOTS($rveFactory); 
    5969        $this->MAILADDRESS_INCORRECT($rveFactory); 
    6070        $this->URL_INCORRECT($rveFactory); 
     
    291301 
    292302    /** 
     303     * test that the MAILADDRESS_CANNOT_CONTAIN_SPACES error is created 
     304     * 
     305     * @param  stubRequestValueErrorFactory  $rveFactory 
     306     */ 
     307    public function MAILADDRESS_CANNOT_CONTAIN_SPACES($rveFactory) 
     308    { 
     309        $requestError = $rveFactory->create('MAILADDRESS_CANNOT_CONTAIN_SPACES'); 
     310        $this->assertType('stubRequestValueError', $requestError); 
     311        $this->assertEquals('MAILADDRESS_CANNOT_CONTAIN_SPACES', $requestError->getId()); 
     312        $this->assertTrue($requestError->hasMessage('default')); 
     313        $this->assertTrue($requestError->hasMessage('en_*')); 
     314        $this->assertTrue($requestError->hasMessage('de_*')); 
     315        $this->assertTrue($requestError->hasMessage('fr_*')); 
     316        $this->assertTrue($requestError->hasMessage('es_*')); 
     317        $requestError2 = $rveFactory->create('MAILADDRESS_CANNOT_CONTAIN_SPACES'); 
     318        $this->assertNotSame($requestError, $requestError2); 
     319    } 
     320 
     321    /** 
     322     * test that the MAILADDRESS_CANNOT_CONTAIN_UMLAUTS error is created 
     323     * 
     324     * @param  stubRequestValueErrorFactory  $rveFactory 
     325     */ 
     326    public function MAILADDRESS_CANNOT_CONTAIN_UMLAUTS($rveFactory) 
     327    { 
     328        $requestError = $rveFactory->create('MAILADDRESS_CANNOT_CONTAIN_UMLAUTS'); 
     329        $this->assertType('stubRequestValueError', $requestError); 
     330        $this->assertEquals('MAILADDRESS_CANNOT_CONTAIN_UMLAUTS', $requestError->getId()); 
     331        $this->assertTrue($requestError->hasMessage('default')); 
     332        $this->assertTrue($requestError->hasMessage('en_*')); 
     333        $this->assertTrue($requestError->hasMessage('de_*')); 
     334        $this->assertTrue($requestError->hasMessage('fr_*')); 
     335        $this->assertTrue($requestError->hasMessage('es_*')); 
     336        $requestError2 = $rveFactory->create('MAILADDRESS_CANNOT_CONTAIN_UMLAUTS'); 
     337        $this->assertNotSame($requestError, $requestError2); 
     338    } 
     339 
     340    /** 
     341     * test that the MAILADDRESS_MUST_CONTAIN_ONE_AT error is created 
     342     * 
     343     * @param  stubRequestValueErrorFactory  $rveFactory 
     344     */ 
     345    public function MAILADDRESS_MUST_CONTAIN_ONE_AT($rveFactory) 
     346    { 
     347        $requestError = $rveFactory->create('MAILADDRESS_MUST_CONTAIN_ONE_AT'); 
     348        $this->assertType('stubRequestValueError', $requestError); 
     349        $this->assertEquals('MAILADDRESS_MUST_CONTAIN_ONE_AT', $requestError->getId()); 
     350        $this->assertTrue($requestError->hasMessage('default')); 
     351        $this->assertTrue($requestError->hasMessage('en_*')); 
     352        $this->assertTrue($requestError->hasMessage('de_*')); 
     353        $this->assertTrue($requestError->hasMessage('fr_*')); 
     354        $this->assertTrue($requestError->hasMessage('es_*')); 
     355        $requestError2 = $rveFactory->create('MAILADDRESS_MUST_CONTAIN_ONE_AT'); 
     356        $this->assertNotSame($requestError, $requestError2); 
     357    } 
     358 
     359    /** 
     360     * test that the MAILADDRESS_CONTAINS_ILLEGAL_CHARS error is created 
     361     * 
     362     * @param  stubRequestValueErrorFactory  $rveFactory 
     363     */ 
     364    public function MAILADDRESS_CONTAINS_ILLEGAL_CHARS($rveFactory) 
     365    { 
     366        $requestError = $rveFactory->create('MAILADDRESS_CONTAINS_ILLEGAL_CHARS'); 
     367        $this->assertType('stubRequestValueError', $requestError); 
     368        $this->assertEquals('MAILADDRESS_CONTAINS_ILLEGAL_CHARS', $requestError->getId()); 
     369        $this->assertTrue($requestError->hasMessage('default')); 
     370        $this->assertTrue($requestError->hasMessage('en_*')); 
     371        $this->assertTrue($requestError->hasMessage('de_*')); 
     372        $this->assertTrue($requestError->hasMessage('fr_*')); 
     373        $this->assertTrue($requestError->hasMessage('es_*')); 
     374        $requestError2 = $rveFactory->create('MAILADDRESS_CONTAINS_ILLEGAL_CHARS'); 
     375        $this->assertNotSame($requestError, $requestError2); 
     376    } 
     377 
     378    /** 
     379     * test that the MAILADDRESS_CONTAINS_TWO_FOLLOWING_DOTS error is created 
     380     * 
     381     * @param  stubRequestValueErrorFactory  $rveFactory 
     382     */ 
     383    public function MAILADDRESS_CONTAINS_TWO_FOLLOWING_DOTS($rveFactory) 
     384    { 
     385        $requestError = $rveFactory->create('MAILADDRESS_CONTAINS_TWO_FOLLOWING_DOTS'); 
     386        $this->assertType('stubRequestValueError', $requestError); 
     387        $this->assertEquals('MAILADDRESS_CONTAINS_TWO_FOLLOWING_DOTS', $requestError->getId()); 
     388        $this->assertTrue($requestError->hasMessage('default')); 
     389        $this->assertTrue($requestError->hasMessage('en_*')); 
     390        $this->assertTrue($requestError->hasMessage('de_*')); 
     391        $this->assertTrue($requestError->hasMessage('fr_*')); 
     392        $this->assertTrue($requestError->hasMessage('es_*')); 
     393        $requestError2 = $rveFactory->create('MAILADDRESS_CONTAINS_TWO_FOLLOWING_DOTS'); 
     394        $this->assertNotSame($requestError, $requestError2); 
     395    } 
     396 
     397    /** 
    293398     * test that the MAILADDRESS_INCORRECT error is created 
    294399     * 
     
    303408        $this->assertTrue($requestError->hasMessage('en_*')); 
    304409        $this->assertTrue($requestError->hasMessage('de_*')); 
     410        $this->assertTrue($requestError->hasMessage('fr_*')); 
     411        $this->assertTrue($requestError->hasMessage('es_*')); 
    305412        $requestError2 = $rveFactory->create('MAILADDRESS_INCORRECT'); 
    306413        $this->assertNotSame($requestError, $requestError2); 
  • trunk/src/test/php/net/stubbles/ipo/request/filter/stubMailFilterTestCase.php

    r1546 r1603  
    4747 
    4848    /** 
     49     * assure that empty values are returned as null 
     50     * 
     51     * @test 
     52     */ 
     53    public function emptyValues() 
     54    { 
     55        $this->mockMailValidator->expects($this->never())->method('validate'); 
     56        $this->assertNull($this->mailFilter->execute('')); 
     57        $this->assertNull($this->mailFilter->execute(null)); 
     58    } 
     59 
     60    /** 
    4961     * assure that values are returned the expected way 
    5062     * 
     
    6476     * @expectedException  stubFilterException 
    6577     */ 
    66     public function wrongValue() 
     78    public function spacesTriggerException() 
     79    { 
     80        $this->mockMailValidator->expects($this->once())->method('validate')->will($this->returnValue(false)); 
     81        $this->mockRequestValueErrorFactory->expects($this->once()) 
     82                                           ->method('create') 
     83                                           ->with($this->equalTo('MAILADDRESS_CANNOT_CONTAIN_SPACES')) 
     84                                           ->will($this->returnValue(new stubRequestValueError('foo', array('en_EN' => 'Something wrent wrong.')))); 
     85        $this->mailFilter->execute('space in@mailadre.ss'); 
     86    } 
     87 
     88    /** 
     89     * assure that an exceptiom is thrown when a wrong value is passed 
     90     * 
     91     * @test 
     92     * @expectedException  stubFilterException 
     93     */ 
     94    public function germanUmlautTriggerException() 
     95    { 
     96        $this->mockMailValidator->expects($this->once())->method('validate')->will($this->returnValue(false)); 
     97        $this->mockRequestValueErrorFactory->expects($this->once()) 
     98                                           ->method('create') 
     99                                           ->with($this->equalTo('MAILADDRESS_CANNOT_CONTAIN_UMLAUTS')) 
     100                                           ->will($this->returnValue(new stubRequestValueError('foo', array('en_EN' => 'Something wrent wrong.')))); 
     101        $this->mailFilter->execute('föö@mailadre.ss'); 
     102    } 
     103 
     104    /** 
     105     * assure that an exceptiom is thrown when a wrong value is passed 
     106     * 
     107     * @test 
     108     * @expectedException  stubFilterException 
     109     */ 
     110    public function moreThanOneAtTriggerException() 
     111    { 
     112        $this->mockMailValidator->expects($this->once())->method('validate')->will($this->returnValue(false)); 
     113        $this->mockRequestValueErrorFactory->expects($this->once()) 
     114                                           ->method('create') 
     115                                           ->with($this->equalTo('MAILADDRESS_MUST_CONTAIN_ONE_AT')) 
     116                                           ->will($this->returnValue(new stubRequestValueError('foo', array('en_EN' => 'Something wrent wrong.')))); 
     117        $this->mailFilter->execute('foo@bar@mailadre.ss'); 
     118    } 
     119 
     120    /** 
     121     * assure that an exceptiom is thrown when a wrong value is passed 
     122     * 
     123     * @test 
     124     * @expectedException  stubFilterException 
     125     */ 
     126    public function illegalCharsTriggerException() 
     127    { 
     128        $this->mockMailValidator->expects($this->once())->method('validate')->will($this->returnValue(false)); 
     129        $this->mockRequestValueErrorFactory->expects($this->once()) 
     130                                           ->method('create') 
     131                                           ->with($this->equalTo('MAILADDRESS_CONTAINS_ILLEGAL_CHARS')) 
     132                                           ->will($this->returnValue(new stubRequestValueError('foo', array('en_EN' => 'Something wrent wrong.')))); 
     133        $this->mailFilter->execute('foo&/4@mailadre.ss'); 
     134    } 
     135 
     136    /** 
     137     * assure that an exceptiom is thrown when a wrong value is passed 
     138     * 
     139     * @test 
     140     * @expectedException  stubFilterException 
     141     */ 
     142    public function twoFollowingDotsTriggerException() 
     143    { 
     144        $this->mockMailValidator->expects($this->once())->method('validate')->will($this->returnValue(false)); 
     145        $this->mockRequestValueErrorFactory->expects($this->once()) 
     146                                           ->method('create') 
     147                                           ->with($this->equalTo('MAILADDRESS_CONTAINS_TWO_FOLLOWING_DOTS')) 
     148                                           ->will($this->returnValue(new stubRequestValueError('foo', array('en_EN' => 'Something wrent wrong.')))); 
     149        $this->mailFilter->execute('foo..bar@mailadre.ss'); 
     150    } 
     151 
     152    /** 
     153     * assure that an exceptiom is thrown when a wrong value is passed 
     154     * 
     155     * @test 
     156     * @expectedException  stubFilterException 
     157     */ 
     158    public function otherErrorsTriggerException() 
    67159    { 
    68160        $this->mockMailValidator->expects($this->once())->method('validate')->will($this->returnValue(false)); 
     
    71163                                           ->with($this->equalTo('MAILADDRESS_INCORRECT')) 
    72164                                           ->will($this->returnValue(new stubRequestValueError('foo', array('en_EN' => 'Something wrent wrong.')))); 
    73         $this->mailFilter->execute(null); 
     165        $this->mailFilter->execute('foobar@mailadre.ss'); 
    74166    } 
    75167} 
  • trunk/src/test/php/net/stubbles/ipo/request/validator/stubMailValidatorTestCase.php

    r1547 r1603  
    5151 
    5252    /** 
     53     * test other failing addresses 
     54     * 
     55     * @test 
     56     */ 
     57    public function failingAddresses() 
     58    { 
     59        $this->assertFalse($this->mailValidator->validate('space in@mailadre.ss')); 
     60        $this->assertFalse($this->mailValidator->validate('föö@mailadre.ss')); 
     61        $this->assertFalse($this->mailValidator->validate('foo@bar@mailadre.ss')); 
     62        $this->assertFalse($this->mailValidator->validate('foo&/4@mailadre.ss')); 
     63        $this->assertFalse($this->mailValidator->validate('foo..bar@mailadre.ss')); 
     64    } 
     65 
     66    /** 
    5367     * assure that returning the criterias works correct 
    5468     *