- [x] [phpunit/tests/Database_delNumeric] Tests unitaire de delNumeric()

- [x] [Database] Mise a jour des methodes de Database
		- [x] [Database::check] Suite de l'implementation (couverture des types de la BDD actuelle: 100%)
		- [x] [Database::delNumeric] Prevention si oubli @oneDimension + ne supprime plus les indices numeriques associees a aucun indice textuel
- [x] [phpunit/tests/Database_check] Tests unitaire du checker
This commit is contained in:
xdrm-brackets 2016-02-12 20:49:03 +01:00
parent 594cad0ea4
commit 02b4e0b703
6 changed files with 215 additions and 38 deletions

View File

@ -280,7 +280,6 @@
return true; return true;
}testDatabaseChecker(); }//testDatabaseChecker();
?> ?>

View File

@ -73,21 +73,29 @@
* *
*/ */
public static function delNumeric($fetchData, $oneDimension=false){ public static function delNumeric($fetchData, $oneDimension=false){
$nextEquivalent = false; // Vaut VRAI si le prochain est peut-etre un equivalent numerique
/* [1] 2 dimensions /* [1] 2 dimensions
===============================================*/ ===============================================*/
if( !$oneDimension ){ if( !$oneDimension && is_array($fetchData[0]) ){
// on supprime les doublons des entrées (indice numérique) // on supprime les doublons des entrées (indice numérique)
for( $i = 0 ; $i < count($fetchData) ; $i++ ) // pour tout les utilisateurs for( $i = 0 ; $i < count($fetchData) ; $i++ ) // pour tout les utilisateurs
foreach($fetchData[$i] as $col => $val){ // pour toutes les entrées foreach($fetchData[$i] as $col => $val){ // pour toutes les entrées
if( !mb_detect_encoding($val, 'UTF-8') ) if( !mb_detect_encoding($val, 'UTF-8') )
$fetchData[$i][$col] = utf8_encode($val); $fetchData[$i][$col] = utf8_encode($val);
if( is_int($col) ) // si l'indice est un entier if( is_int($col) ){ // Si indice numerique
unset( $fetchData[$i][$col] ); // on le supprime if( $nextEquivalent ) // Si suit un indice textuel
} unset( $fetchData[$i][$col] ); // on supprime l'indice
$nextEquivalent = false; // Dans tous les cas, on dit que le prochain ne pourra pas etre supprime si numerique
}else // Si l'indice n'est pas un entier
$nextEquivalent = true; // On signale qu'il y aura peut etre un indice numerique suivant
}
/* [2] 1 dimensions /* [2] 1 dimensions
===============================================*/ ===============================================*/
@ -99,8 +107,15 @@
if( !mb_detect_encoding($val, 'UTF-8') ) if( !mb_detect_encoding($val, 'UTF-8') )
$fetchData[$i] = utf8_encode($val); $fetchData[$i] = utf8_encode($val);
if( is_int($i) ) // si l'indice est un entier if( is_int($i) ){ // Si indice numerique
unset( $fetchData[$i] ); // on le supprime if( $nextEquivalent ) // Si suit un indice textuel
unset( $fetchData[$i] ); // on supprime l'indice
$nextEquivalent = false; // Dans tous les cas, on dit que le prochain ne pourra pas etre supprime si numerique
}else // Si l'indice n'est pas un entier
$nextEquivalent = true; // On signale qu'il y aura peut etre un indice numerique suivant
} }
} }
@ -139,33 +154,29 @@
/* (2) Utilisateur */ /* (2) Utilisateur */
case 'user.code': case 'user.code':
case 'machine.code':
return $checker && is_string($value) && preg_match('/^[\dA-F]{2}(\-[\dA-F]{2}){3,5}$/i', $value); return $checker && is_string($value) && preg_match('/^[\dA-F]{2}(\-[\dA-F]{2}){3,5}$/i', $value);
break; break;
case 'user.username': case 'user.lastname':
return $checker && is_string($value) && preg_match('/^[\w-]{3,30}$/i', $value); case 'user.username':
case 'machine.name':
case 'group.name':
return $checker && is_string($value) && preg_match('/^[\w-]{1,30}$/i', $value);
break; break;
case 'user.firstname': case 'user.lastname':
case 'user.firstname':
case 'user.lastname':
return $checker && is_string($value) && preg_match('/^[a-z -]{3,30}$/i', $value); return $checker && is_string($value) && preg_match('/^[a-z -]{3,30}$/i', $value);
break; break;
case 'user.mail': case 'user.mail':
return $checker && is_string($value) && strlen($value) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $value); return $checker && is_string($value) && strlen($value) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $value);
break; break;
case 'user.password': case 'user.password':
return $checker && is_numeric($value) && preg_match('/^[\da-f]{40}$/i', $value); return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value);
break; break;
/* (3) Machine */
case 'groupe.nom':
return $checker && is_string($value) && preg_match('/^[a-z0-9 -]{1,10}$/i', $value);
break;
/* (4) Groupe */
case 'formation.code':
return $checker && is_string($value) && preg_match('/[\w]{0,10}/i', $value);
break;
case 'formation.nom':
return $checker && is_string($value) && preg_match('/[\w ]{0,100}/i', $value);
break;
} }
return $checker; return $checker;

View File

@ -1,8 +1,9 @@
<phpunit bootstrap="../manager/autoloader.php"> <phpunit bootstrap="../manager/autoloader.php">
<testsuites> <testsuites>
<testsuite name="Database::check"> <testsuite name="\manager\Database">
<file>tests/Database_check.php</file> <file>tests/Database_check.php</file>
<file>tests/Database_delNumeric.php</file>
</testsuite> </testsuite>
</testsuites> </testsuites>

View File

@ -63,7 +63,7 @@
/* [2] username /* [2] user.username ; machine.name ; group.name
=========================================================*/ =========================================================*/
/* (1) Type */ /* (1) Type */
public function testUsernameTypeStringCorrect(){ public function testUsernameTypeStringCorrect(){
@ -90,18 +90,22 @@
/* (3) Size */ /* (3) Size */
public function testUsernameSize3Correct(){ public function testUsernameSize3Correct(){
$this->assertEquals( 3, strlen('012') );
$this->assertTrue( \manager\Database::check('user.username', '012') ); $this->assertTrue( \manager\Database::check('user.username', '012') );
} }
public function testUsernameSize30Correct(){ public function testUsernameSize30Correct(){
$this->assertEquals( 30, strlen('0123456789abcdefghijklmno_-sda') );
$this->assertTrue( \manager\Database::check('user.username', '0123456789abcdefghijklmno_-sda') ); $this->assertTrue( \manager\Database::check('user.username', '0123456789abcdefghijklmno_-sda') );
} }
public function testUsernameSizeLt3Incorrect(){ public function testUsernameSizeLt3Incorrect(){
$this->assertFalse( \manager\Database::check('user.username', '01') ); $this->assertLessThan( 3, strlen('') );
$this->assertFalse( \manager\Database::check('user.username', '') );
} }
public function testUsernameSizeGt30Incorrect(){ public function testUsernameSizeGt30Incorrect(){
$this->assertGreaterThan( 30, strlen('0123456789abcdefghijklmno_-sdaa') );
$this->assertFalse( \manager\Database::check('user.username', '0123456789abcdefghijklmno_-sdaa') ); $this->assertFalse( \manager\Database::check('user.username', '0123456789abcdefghijklmno_-sdaa') );
} }
@ -131,37 +135,89 @@
/* (3) Size */ /* (3) Size */
public function testFirstnameSize3Correct(){ public function testFirstnameSize3Correct(){
$this->assertEquals( 3, strlen('abc') );
$this->assertTrue( \manager\Database::check('user.firstname', 'abc') ); $this->assertTrue( \manager\Database::check('user.firstname', 'abc') );
} }
public function testFirstnameSize30Correct(){ public function testFirstnameSize30Correct(){
$this->assertEquals( 30, strlen('abcdefghijklmnopqrstuvwxyz-k s') );
$this->assertTrue( \manager\Database::check('user.firstname', 'abcdefghijklmnopqrstuvwxyz-k s') ); $this->assertTrue( \manager\Database::check('user.firstname', 'abcdefghijklmnopqrstuvwxyz-k s') );
} }
public function testFirstnameSizeLt3Incorrect(){ public function testFirstnameSizeLt3Incorrect(){
$this->assertLessThan( 3, strlen('ab') );
$this->assertFalse( \manager\Database::check('user.firstname', 'ab') ); $this->assertFalse( \manager\Database::check('user.firstname', 'ab') );
} }
public function testFirstnameSizeGt30Incorrect(){ public function testFirstnameSizeGt30Incorrect(){
$this->assertGreaterThan( 30, strlen('abcdefghijklmnopqrstuvwxyz-k ss') );
$this->assertFalse( \manager\Database::check('user.firstname', 'abcdefghijklmnopqrstuvwxyz-k ss') ); $this->assertFalse( \manager\Database::check('user.firstname', 'abcdefghijklmnopqrstuvwxyz-k ss') );
} }
/* [4] Adresse mail /* [4] Adresse mail
=========================================================*/ =========================================================*/
public function testMailContentCorrect(){ /* (1) Size */
public function testMailSizeEqCorrect(){
$this->assertLessThanOrEqual( 50, 'nom-prenom.mot@domaine-d.gouv' );
$this->assertTrue( \manager\Database::check('user.mail', 'nom-prenom.mot@domaine-d.gouv') ); $this->assertTrue( \manager\Database::check('user.mail', 'nom-prenom.mot@domaine-d.gouv') );
} }
public function testMailSizeSupCorrect(){
$this->assertGreaterThan( 50, strlen('ab12345678901234567890nom-prenom.mot@domaine-d.gouv') );
$this->assertFalse( \manager\Database::check('user.mail', 'ab12345678901234567890nom-prenom.mot@domaine-d.gouv') );
}
/* (2) Content */
public function testMailContentCorrect(){
$this->assertTrue( \manager\Database::check('user.mail', '0nom-prenom.mot@domaine-d.gouv') );
}
public function testMailContentIncorrect1(){ public function testMailContentIncorrect1(){
$this->assertFalse( \manager\Database::check('user.mail', 'nom-prenom.mot@domaine-d.gouve') ); $this->assertFalse( \manager\Database::check('user.mail', '0nom-prenom.mot@domaine-d.gouve') );
} }
public function testMailContentIncorrect2(){ public function testMailContentIncorrect2(){
$this->assertFalse( \manager\Database::check('user.mail', 'nom-prenom.mot@domaine-d.g') ); $this->assertFalse( \manager\Database::check('user.mail', '0nom-prenom.mot@domaine-d.g') );
} }
/* [5] Mot de passe
=========================================================*/
public function testPasswordSizeEqCorrect(){
$password_hash = sha1('monmotdepasse');
$this->assertEquals( 40, strlen($password_hash) );
$this->assertTrue( \manager\Database::check('user.password', $password_hash) );
}
public function testPasswordSizeInfIncorrect(){
$password_hash = 'a';
$this->assertLessThan( 40, strlen($password_hash) );
$this->assertFalse( \manager\Database::check('user.password', $password_hash) );
}
public function testPasswordSizeSupIncorrect(){
$password_hash = sha1('monmotdepasse').'a';
$this->assertGreaterThan( 40, strlen($password_hash) );
$this->assertFalse( \manager\Database::check('user.password', $password_hash) );
}
public function testPasswordContentCorrect(){
$this->assertTrue( \manager\Database::check('user.password', 'dd629d39c4576731a2bef003c72ff89d6fc2a99a') );
}
public function testPasswordContentIncorrect(){
$this->assertContains( 'g', 'dd629d39c4576731a2bef003c72ff89d6fc2a9g' );
$this->assertFalse( \manager\Database::check('user.password', 'dd629d39c4576731a2bef003c72ff89d6fc2a9g') );
}
} }
?> ?>

View File

@ -0,0 +1,106 @@
<?php
class Database_delNumeric extends PHPUnit_Framework_TestCase{
/* [1] Verification pour 2 dimensions
=========================================================*/
/* (1) Global */
public function testGlobal2Dim(){
$fetchData = array(array(
'id' => '000001',
0 => '000001',
'nom' => 'Jean Dupont',
1 => 'Jean Dupont',
));
$computed_array = \manager\Database::delNumeric( $fetchData );
$this->assertArrayHasKey( 'id', $computed_array[0] );
$this->assertArrayHasKey( 'nom', $computed_array[0] );
$this->assertArrayNotHasKey( 0, $computed_array[0] );
$this->assertArrayNotHasKey( 1, $computed_array[0] );
}
/* (2) Verification d'indices numeriques dans les donnees */
public function testGlobal2DimWithNumericIndexes(){
$fetchData = array(array(
'id' => '000001',
0 => '000001',
'nom' => 'Jean Dupont',
1 => 'Jean Dupont',
2 => 'Bla',
3 => 'Bla',
4 => 'Bla',
5 => 'Bla',
6 => 'Bla',
7 => 'Bla'
));
$computed_array = \manager\Database::delNumeric( $fetchData );
$this->assertArrayHasKey( 'id', $computed_array[0] );
$this->assertArrayHasKey( 'nom', $computed_array[0] );
$this->assertArrayNotHasKey( 0, $computed_array[0] );
$this->assertArrayNotHasKey( 1, $computed_array[0] );
$this->assertArrayHasKey( 2, $computed_array[0] );
$this->assertArrayHasKey( 3, $computed_array[0] );
$this->assertArrayHasKey( 4, $computed_array[0] );
$this->assertArrayHasKey( 5, $computed_array[0] );
$this->assertArrayHasKey( 6, $computed_array[0] );
$this->assertArrayHasKey( 7, $computed_array[0] );
}
/* [2] Verification pour 1 dimensions
=========================================================*/
/* (1) Global */
public function testGlobal1Dim(){
$fetchData = array(
'id' => '000001',
0 => '000001',
'nom' => 'Jean Dupont',
1 => 'Jean Dupont'
);
$computed_array = \manager\Database::delNumeric( $fetchData );
$this->assertArrayHasKey( 'id', $computed_array );
$this->assertArrayHasKey( 'nom', $computed_array );
$this->assertArrayNotHasKey( 0, $computed_array );
$this->assertArrayNotHasKey( 1, $computed_array );
}
/* (2) Verification d'indices numeriques dans les donnees */
public function testGlobal1DimWithNumericIndexes(){
$fetchData = array(
'id' => '000001',
0 => '000001',
'nom' => 'Jean Dupont',
1 => 'Jean Dupont',
2 => 'Bla',
3 => 'Bla',
4 => 'Bla',
5 => 'Bla',
6 => 'Bla',
7 => 'Bla'
);
$computed_array = \manager\Database::delNumeric( $fetchData );
$this->assertArrayHasKey( 'id', $computed_array );
$this->assertArrayHasKey( 'nom', $computed_array );
$this->assertArrayNotHasKey( 0, $computed_array );
$this->assertArrayNotHasKey( 1, $computed_array );
$this->assertArrayHasKey( 2, $computed_array );
$this->assertArrayHasKey( 3, $computed_array );
$this->assertArrayHasKey( 4, $computed_array );
$this->assertArrayHasKey( 5, $computed_array );
$this->assertArrayHasKey( 6, $computed_array );
$this->assertArrayHasKey( 7, $computed_array );
}
}
?>

View File

@ -13,7 +13,6 @@
############ ############
# EN COURS # # EN COURS #
############ ############
- [.] [phpunit/tests/Database_check] Tests unitaire du checker
- [ ] [Database] Checker de type - [ ] [Database] Checker de type
- [ ] Gestion des groupes (utilisateurs/machines) - [ ] Gestion des groupes (utilisateurs/machines)
- [x] bdd - [x] bdd
@ -41,6 +40,11 @@
######## ########
# FAIT # # FAIT #
######## ########
- [x] [phpunit/tests/Database_delNumeric] Tests unitaire de delNumeric()
- [x] [Database] Mise a jour des methodes de Database
- [x] [Database::check] Suite de l'implementation (couverture des types de la BDD actuelle: 100%)
- [x] [Database::delNumeric] Prevention si oubli @oneDimension + ne supprime plus les indices numeriques associees a aucun indice textuel
- [x] [phpunit/tests/Database_check] Tests unitaire du checker
- [x] [phpunit/] Install+Config phpunit - [x] [phpunit/] Install+Config phpunit
- [x] [manager/Repo] Gestion des Repo - [x] [manager/Repo] Gestion des Repo
- [x] [ManagerError] Correction/ajout des codes erreurs - [x] [ManagerError] Correction/ajout des codes erreurs