Add some Unit tests, not all test are here, still cant link coverage.xml to SonarQube
continuous-integration/drone/push Build is failing Details

unit_test
dorian.hodin 2 years ago
parent 81ab5d5019
commit f6bfd4eea7

@ -5,7 +5,6 @@
<sourceFolder url="file://$MODULE_DIR$/Source" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/Source/Tests" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/.idea/dataSources" />
<excludeFolder url="file://$MODULE_DIR$/Source/Config/vendor" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />

@ -3,7 +3,7 @@
namespace BusinessClass;
/**
* Définit une question avec plusieurs réponse mais une seule possible.
* Définit une question avec plusieurs réponses, mais une seule possible.
*/
class ListBoxQuestion extends BoxQuestion
{

@ -62,6 +62,29 @@ class AltoRouter
$this->addMatchTypes($matchTypes);
}
/**
* @return string
*/
public function getBasePath(): string
{
return $this->basePath;
}
/**
* @return array
*/
public function getMatchTypes(): array
{
return $this->matchTypes;
}
/**
* @return array
*/
public function getNamedRoutes(): array
{
return $this->namedRoutes;
}
/**
* Retrieves all routes.
* Useful if you want to process or display routes.

@ -1,37 +1,47 @@
<?php
namespace Config;
use RuntimeException;
class Autoload
{
private static $instance = null;
private static mixed $instance = null;
/**
* @return mixed
*/
public static function getInstance(): mixed
{
return self::$instance;
}
public static function charger()
public static function charger(): void
{
if (null !== self::$instance) {
throw RuntimeException(sprintf('%s is already started', __CLASS__));
throw new RuntimeException(sprintf('%s is already started', __CLASS__));
}
self::$instance = new self();
if (!spl_autoload_register(array(self::$instance, 'autoloader'))) {
throw RuntimeException(sprintf('%s : Could not start the autoload', __CLASS__));
throw new RuntimeException(sprintf('%s : Could not start the autoload', __CLASS__));
}
}
public static function shutDown()
public static function shutDown(): void
{
if (null !== self::$instance) {
if (!spl_autoload_unregister(array(self::$instance, 'autoloader'))) {
throw RuntimeException('Could not stop the autoload');
throw new RuntimeException('Could not stop the autoload');
}
self::$instance = null;
}
}
private static function autoloader($className)
private static function autoloader($className): void
{
$folder = "./";
$className = ltrim($className, '\\');

@ -6,7 +6,7 @@ class Clean
{
/**
* Cette fonction prend une chaîne de caractères en entrée et retourne une version nettoyée de cette chaîne.
* Elle supprime les espaces de début et de fin, ainsi que toutes les balises HTML, et encode les
* Elle supprime les espaces de début et de fin, ainsi que toutes les balises HTML et encode les
* caractères spéciaux.
*
* @param string $string La chaîne à nettoyer
@ -15,14 +15,14 @@ class Clean
public static function simpleString(string $string): string
{
$string = trim($string);
$string = strip_tags($string);
$string = trim($string);
return htmlspecialchars($string);
}
/**
* Cette fonction prend une chaîne de caractères en entrée et retourne une version nettoyée de cette chaîne.
* Elle supprime les espaces de début et de fin, ainsi que toutes les balises HTML, et encode les
* Elle supprime les espaces de début et de fin, ainsi que toutes les balises HTML et encode les
* caractères spéciaux.
* @param $email
* @return string La chaîne nettoyée
@ -30,8 +30,13 @@ class Clean
public static function email($email): string
{
$email = self::simpleString($email);
// Vérifier si l'adresse e-mail est valide
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// Supprimer les caractères incorrects
$email = preg_replace('/[^a-zA-Z0-9.@]/', '', $email);
}
return filter_var($email, FILTER_SANITIZE_EMAIL);
}
/**
@ -41,8 +46,13 @@ class Clean
* @return int Le nombre entier formaté
*/
public static function int(int $int): int
public static function int(mixed $int): int
{
if (!is_int($int)){
$cleaned = preg_replace('/[^0-9]/', '', $int);
return filter_var(intval($cleaned), FILTER_SANITIZE_NUMBER_INT);
}
return filter_var($int, FILTER_SANITIZE_NUMBER_INT);
}
}

@ -1,54 +0,0 @@
<?php
namespace Config;
use PDO;
use PDOStatement;
/**
* Définit une connection à la base de données.
*/
class Connection extends PDO
{
/**
* @var PDOStatement
*/
private PDOStatement $stmt;
public function __construct(string $dsn, string $username, string $password)
{
parent::__construct($dsn, $username, $password);
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
/**
* Éxécute une réquête SQL.
*
* @param string $query
* @param array $parameters
* @return bool Returns `true` on success, `false` otherwise
*/
public function executeQuery(string $query, array $parameters = []): bool
{
$this->stmt = parent::prepare($query);
foreach ($parameters as $name => $value) {
$this->stmt->bindValue($name, $value[0], $value[1]);
}
return $this->stmt->execute();
}
/**
* Permet de récupère le résultat de la dernière réquête éxecuté avec
* la fonction executeQuery().
*
* @return array
*/
public function getResults(): array
{
return $this->stmt->fetchAll();
}
}

@ -1,5 +1,7 @@
<?php
namespace Config;
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@ -67,7 +69,7 @@ class SplClassLoader
}
/**
* Gets the namespace seperator used by classes in the namespace of this class loader.
* Gets the namespace separator used by classes in the namespace of this class loader.
*
* @return string
*/

@ -2,6 +2,8 @@
namespace Config;
require_once "config.php";
class Validate
{
/**
@ -14,22 +16,25 @@ class Validate
public static function email(String $email): bool
{
global $emailMaxLength;
return (filter_var($email, FILTER_VALIDATE_EMAIL) && strlen($email) <= $emailMaxLength);
// Vérifier si l'adresse e-mail est valide
return filter_var($email, FILTER_VALIDATE_EMAIL) && strlen($email) <= $GLOBALS['emailMaxLength'];
}
/**
* Valide un pseudo en vérifiant que la longueur est suffisante, qu'il contient uniquement des
* caractères alphanumériques, et qu'il respecte la longueur maximale définie globalement.
*
* @param string $pseudo Le pseudo à valider.
* @param string $login
* @return bool Vrai si le pseudo est valide, faux sinon.
*/
public static function login(string $login) : bool
{
global $loginMaxLength;
return (strlen($login) >= 3 && preg_match("#[a-zA-Z0-9]+#", $login) && strlen($login) <= $loginMaxLength);
// Vérifier si la longueur est supérieure à 3.
if (strlen($login) <= 3 || !ctype_alnum($login) || strlen($login) >= $GLOBALS['pseudoMaxLength']) {
return false;
}
return true;
}
/**
@ -42,66 +47,63 @@ class Validate
public static function password(string $password) : bool
{
global $passwordMaxLength;
return (strlen($password) >= 8 && strlen($password) <=$passwordMaxLength &&
return (strlen($password) >= 8 && strlen($password) <=$GLOBALS['passwordMaxLength'] &&
preg_match("/\d/", $password) && preg_match("#[a-zA-Z]+#", $password));
}
/**
* Vérifie si le mot-clé est valide.
*
* @param string $keyword Le mot-clé a vérifié.
* @param string $keyword Le mot-clé à vérifier
* @return bool Vrai si le mot-clé est valide, faux sinon.
*/
public static function keyWord(string $keyword) : bool
{
global $keyWordMaxLength;
return (strlen($keyword) <= $keyWordMaxLength && strlen($keyword) >= 3);
return (strlen($keyword) <= $GLOBALS['keyWordMaxLength'] && strlen($keyword) >= 3);
}
/**
* Vérifie si le titre est valide.
*
* @param string $title Le titre a vérifié.
* @param string $title Le titre à vérifier
* @return bool Vrai si le titre est valide, faux sinon.
*/
public static function title(string $title) : bool
{
global $titleMaxLength;
return (strlen($title) <= $titleMaxLength && strlen($title) >= 3);
return (strlen($title) <= $GLOBALS['titleMaxLength'] && strlen($title) >= 3);
}
/**
* Vérifie si le type est valide.
*
* @param string $type Le type a vérifié.
* @param string $type Le type à vérifier
* @return bool Vrai si le type est valide, faux sinon.
*/
public static function type(string $type) : bool
{
global $typeMaxLength;
return (strlen($type) <= $typeMaxLength && strlen($type) >=3);
return (strlen($type) <= $GLOBALS['typeMaxLength'] && strlen($type) >=3);
}
/**
* Vérifie si la réponse est valide.
*
* @param string $response La réponse a vérifié.
* @param string $response La réponse à vérifier
* @return bool Vrai si la réponse est valide, faux sinon.
*/
public static function response(string $response) : bool
{
global $responseMaxLength;
return (strlen($response) <= $responseMaxLength);
return (strlen($response) <= $GLOBALS['responseMaxLength'] && !empty($response));
}
public static function username(string $username): bool
{
global $usernameMaxLength;
return (strlen($username) >= 3 && preg_match("#[a-zA-Z0-9]+#", $username) && strlen($username) <= $usernameMaxLength);
if (strlen($username) <= 3 || !ctype_alnum($username) || strlen($username) >= $GLOBALS['usernameMaxLength']) {
return false;
}
return true;
}
}

@ -3,14 +3,19 @@
"description": "composer for guzzle client",
"require": {
"guzzlehttp/psr7": "^2.4",
"guzzlehttp/guzzle": "^7.5",
"phpunit/phpunit": "^10.0"
"guzzlehttp/guzzle": "^7.5"
},
"autoload": {
"classmap": [
"../../Source/"
],
"psr-4": {
"BusinessClass\\" : "../BusinessClass",
"Config\\" : "../Config"
}
},
"require-dev": {
"phpunit/phpunit": "^10.0"
}
}

File diff suppressed because it is too large Load Diff

@ -1,8 +1,5 @@
<?php
use Config\Connection;
$rep = __DIR__ . '/../';
$views['form'] = 'Views/HTML/form.php';
@ -26,26 +23,12 @@ $poppins = "https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=sw
$icon = "https://cdn.uca.fr/images/favicon/favicon.ico";
$logoUCA = "https://cdn.uca.fr/images/logos/logo_uca_mini_light.png";
function connect()
{
$dsn = "mysql:host=localhost;dbname=formulaire;charset=utf8";
$login = "root";
try {
$connection = new Connection($dsn, $login, "root");
} catch (PDOException $e) {
http_response_code(404);
return http_response_code();
}
return $connection;
}
$emailMaxLength=150;
$pseudoMaxLength=50;
$passwordMaxLength=500;
$keyWordMaxLength=50;
$titleMaxLength=50;
$typeMaxLength=50;
$responseMaxLength=200;
$GLOBALS['emailMaxLength']=150;
$GLOBALS['pseudoMaxLength']=50;
$GLOBALS['passwordMaxLength']=500;
$GLOBALS['keyWordMaxLength']=50;
$GLOBALS['titleMaxLength']=50;
$GLOBALS['typeMaxLength']=50;
$GLOBALS['responseMaxLength']=200;
$GLOBALS['usernameMaxLength']=50;

@ -2,6 +2,8 @@
namespace Controller;
use Exception;
use InvalidArgumentException;
use Model\ModelAdmin;
/**
@ -16,10 +18,14 @@ class ControllerAdmin
* d'ajouter des réponses prédéfinies à la question.
*
* @return void
* @throws Exception
*/
public function addQuestion(): void
{
$type = $_POST['type'];
if (empty($_POST['type'])) {
throw new InvalidArgumentException('$_POST[\'type\'] is empty');
}
$idQuestion = (new ModelAdmin())->addQuestion();
if (strcmp($type, "BusinessClass\TextQuestion") == 0) {
$this->goToQuestions();
@ -33,13 +39,17 @@ class ControllerAdmin
/**
* Ajoute une possibilité de réponse à une question, on assige également cette réponse
* à des catégories. On propose ensuite à l'utilisateur de continuer l'ajout d'autre réponses.
* Ajoute une possibilité de réponse à une question, on assigne également cette réponse
* à des catégories. On propose ensuite à l'utilisateur de continuer l'ajout d'autres réponses.
*
* @return void
* @throws Exception
*/
public function addResponse(): void
{
if (empty($_POST['idQuestion'] || empty($_POST['question']) || empty($_POST['type']))) {
throw new InvalidArgumentException('$_POST parameters is missing');
}
(new ModelAdmin())->addResponse();
$categories = (new ModelAdmin())->getCategories();
$idQuestion = $_POST['idQuestion'];
@ -52,12 +62,16 @@ class ControllerAdmin
/**
* Permet de proposer à l'utiliser de continuer ou non à ajouter des possibilités de réponses à l'aide
* de la fonction addResponse(). Si non, il retourne à la page d'admnistration.
* de la fonction addResponse(). Sinon, il retourne à la page administration.
*
* @return void
* @throws Exception
*/
public function continueResponse(): void
{
if (empty($_POST['choose'] || empty($_POST['idQuestion']) || empty($_POST['type']) || empty($_POST['question']))) {
throw new InvalidArgumentException('$_POST parameters is missing');
}
$choose = $_POST['choose'];
if ($choose == "Oui") {
$idQuestion = $_POST['idQuestion'];
@ -76,6 +90,7 @@ class ControllerAdmin
* Permet de créer un nouveau formulaire avec un titre et une description.
*
* @return void
* @throws Exception
*/
public function createForm(): void
{
@ -84,9 +99,10 @@ class ControllerAdmin
/**
* Permet d'ajouter une catégories (mot-clef) à notre application
* Permet d'ajouter une catégorie (mot-clef) à notre application
*
* @return void
* @throws Exception
*/
public function addKeyword(): void
{
@ -99,6 +115,7 @@ class ControllerAdmin
* Permet de naviguer jusqu'à la page de gestion des catégories
*
* @return void
* @throws Exception
*/
public function goToCategories(): void
{
@ -112,6 +129,7 @@ class ControllerAdmin
* Permet de naviguer jusqu'à la page de gestion des questions
*
* @return void
* @throws Exception
*/
public function goToQuestions(): void
{
@ -125,6 +143,7 @@ class ControllerAdmin
* Permet de naviguer jusqu'à la page de gestion des réponses
*
* @return void
* @throws Exception
*/
public function goToResponses(): void
{

@ -15,6 +15,7 @@ class ControllerCandidate
* Permet de naviguer jusqu'au formulaire.
*
* @return void
* @throws Exception
*/
public function goToForm(): void
{
@ -34,6 +35,7 @@ class ControllerCandidate
* Permet de finaliser la saisie du formulaire et de le soumettre.
*
* @return void
* @throws Exception
*/
public function submitForm(): void
{

@ -5,7 +5,7 @@ namespace Model;
use BusinessClass\Question;
/**
* Décrit les fonctionnalités principale d'une frabique
* Décrit les fonctionnalités principales d'une fabrique
*/
abstract class Factory
{
@ -20,7 +20,7 @@ abstract class Factory
/**
* Permet de récupérer les objets créer par la fonction create().
* Permet de récupérer les objets créés par la fonction create().
*
* @param array $results
* @param string $type

@ -12,7 +12,7 @@ class FactoryQuestion extends Factory
{
/**
* Permet de créer une liste de question en fonction du retour d'une gateway
* passer en paramètre. On prend en compte les différents type de question.
* passer en paramètre. On prend en compte les différents types de question.
*
* @param array $results
*

@ -0,0 +1,55 @@
<?php
namespace TestBusinessClass;
use BusinessClass\BoxQuestion;
use PHPUnit\Framework\TestCase;
class BoxQuestionTest extends TestCase
{
public function testConstructorWithFourArguments()
{
$args = [['response1', 'response2'], 'question', ['category1', 'category2'], 1];
$boxQuestion = new class(4, $args) extends BoxQuestion {
public function printStrategy(): string
{
return '';
}
};
$this->assertEquals($args[0], $boxQuestion->getPossibleResponses());
$this->assertEquals($args[2], $boxQuestion->getCategories());
}
public function testSetPossibleResponses()
{
$args = [1, 'question'];
$possibleResponses = ['response1', 'response2'];
$boxQuestion = new class(2, $args) extends BoxQuestion {
public function printStrategy(): string
{
return '';
}
};
$boxQuestion->setPossibleResponses($possibleResponses);
$this->assertEquals($possibleResponses, $boxQuestion->getPossibleResponses());
}
public function testSetCategories()
{
$args = [1, 'question'];
$categories = ['category1', 'category2'];
$boxQuestion = new class(2, $args) extends BoxQuestion {
public function printStrategy(): string
{
return '';
}
};
$boxQuestion->setCategories($categories);
$this->assertEquals($categories, $boxQuestion->getCategories());
}
}

@ -1,7 +1,9 @@
<?php
use PHPUnit\Framework\TestCase;
namespace TestBusinessClass;
use BusinessClass\Form;
use PHPUnit\Framework\TestCase;
class FormTest extends TestCase
{
@ -34,9 +36,9 @@ class FormTest extends TestCase
public function testGetQuestionsReturnsCorrectValue()
{
$questions = [
'Question 1',
'Question 2',
'Question 3'
'Question 1',
'Question 2',
'Question 3'
];
$form = new Form(1, 'Titre du formulaire', 'Description du formulaire', $questions);
@ -46,9 +48,9 @@ class FormTest extends TestCase
public function testSetQuestionsSetsCorrectValue()
{
$questions = [
'Question 1',
'Question 2',
'Question 3'
'Question 1',
'Question 2',
'Question 3'
];
$form = new Form(1, 'Titre du formulaire', 'Description du formulaire', []);

@ -0,0 +1,21 @@
<?php
namespace TestBusinessClass;
use BusinessClass\IPrintQuestionStrategy;
use PHPUnit\Framework\TestCase;
class IPrintQuestionStrategyTest extends TestCase
{
public function testPrintStrategy()
{
$strategy = new class implements IPrintQuestionStrategy {
public function printStrategy(): string
{
return '<div>Question</div>';
}
};
$this->assertEquals('<div>Question</div>', $strategy->printStrategy());
}
}

@ -0,0 +1,31 @@
<?php
namespace TestBusinessClass;
use BusinessClass\Keyword;
use PHPUnit\Framework\TestCase;
class KeywordTest extends TestCase
{
public function testConstructor()
{
$id = 1;
$word = 'example';
$keyword = new Keyword($id, $word);
$this->assertEquals($id, $keyword->getId());
$this->assertEquals($word, $keyword->getWord());
}
public function testSetWord()
{
$id = 1;
$word = 'example';
$newWord = 'new example';
$keyword = new Keyword($id, $word);
$keyword->setWord($newWord);
$this->assertEquals($newWord, $keyword->getWord());
}
}

@ -0,0 +1,39 @@
<?php
namespace TestBusinessClass;
use BusinessClass\Question;
use PHPUnit\Framework\TestCase;
class QuestionTest extends TestCase
{
public function testConstructor()
{
$id = 1;
$content = 'What is your name?';
$question = new class($id, $content) extends Question {
public function printStrategy(): string
{
return '';
}
};
$this->assertEquals($id, $question->getId());
$this->assertEquals($content, $question->getContent());
}
public function testSetContent()
{
$content = 'What is your age?';
$question = new class(1, 'question') extends Question {
public function printStrategy(): string
{
return '';
}
};
$question->setContent($content);
$this->assertEquals($content, $question->getContent());
}
}

@ -0,0 +1,49 @@
<?php
namespace TestBusinessClass;
use BusinessClass\Response;
use PHPUnit\Framework\TestCase;
class ResponseTest extends TestCase
{
private int $id = 1;
private string $date = "2022-03-18";
private string $titleForm = "My Form";
private array $questionsResponses = [
"Question 1" => "Response 1",
"Question 2" => "Response 2"
];
public function testGetters()
{
$response = new Response($this->id, $this->date, $this->titleForm, $this->questionsResponses);
$this->assertEquals($this->id, $response->getId());
$this->assertEquals($this->date, $response->getDate());
$this->assertEquals($this->titleForm, $response->getTitleForm());
$this->assertEquals($this->questionsResponses, $response->getQuestionsResponses());
}
public function testSetters()
{
$response = new Response($this->id, $this->date, $this->titleForm, $this->questionsResponses);
$newDate = "2023-03-18";
$response->setDate($newDate);
$this->assertEquals($newDate, $response->getDate());
$newTitleForm = "New Form";
$response->setTitleForm($newTitleForm);
$this->assertEquals($newTitleForm, $response->getTitleForm());
$newQuestionsResponses = [
"Question 1" => "New Response 1",
"Question 2" => "New Response 2"
];
$response->setQuestionsResponses($newQuestionsResponses);
$this->assertEquals($newQuestionsResponses, $response->getQuestionsResponses());
}
}

@ -0,0 +1,25 @@
<?php
namespace TestBusinessClass;
use BusinessClass\TextQuestion;
use PHPUnit\Framework\TestCase;
class TextQuestionTest extends TestCase
{
public function testPrintStrategy()
{
$content = 'What is your name?';
$id = 1;
$textQuestion = new TextQuestion($id, $content);
$expectedOutput = "<div class='tab'>
<h6>$content</h6>
<p>
<input data-id='$id' placeholder='...' oninput='this.className = '''' type='text' name='answers[]'>
</p>
</div>\n";
$this->assertEquals($expectedOutput, $textQuestion->printStrategy());
}
}

@ -0,0 +1,73 @@
<?php
namespace TestConfig;
use Config\AltoRouter;
use Exception;
use PHPUnit\Framework\TestCase;
use RuntimeException;
class AltoRouterTest extends TestCase
{
protected AltoRouter $router;
public function setUp(): void
{
$this->router = new AltoRouter();
}
/**
* @throws Exception
*/
public function testAddRoutesThrowsExceptionForInvalidInput()
{
$this->expectException(RuntimeException::class);
$this->router->addRoutes('invalid input');
}
public function testGetRoutesReturnsArrayOfRoutes()
{
$this->assertIsArray($this->router->getRoutes());
}
public function testSetBasePathSetsBasePath()
{
$this->router->setBasePath('/test');
$this->assertEquals('/test', $this->router->getBasePath());
}
public function testAddMatchTypesAddsMatchTypes()
{
$this->router->addMatchTypes(['test' => 'regex']);
$this->assertArrayHasKey('test', $this->router->getMatchTypes());
}
/**
* @throws Exception
*/
public function testMapAddsRouteToRoutesArray()
{
$this->router->map('GET', '/test', 'handler');
$this->assertEquals([['GET', '/test', 'handler', null]], $this->router->getRoutes());
}
/**
* @throws Exception
*/
public function testMapAddsNamedRouteToNamedRoutesArray()
{
$this->router->map('GET', '/test', 'handler', 'test');
$this->assertEquals('/test', $this->router->getNamedRoutes()['test']);
}
/**
* @throws Exception
*/
public function testMapThrowsExceptionForDuplicateNamedRoutes()
{
$this->expectException(RuntimeException::class);
$this->router->map('GET', '/test', 'handler', 'test');
$this->router->map('GET', '/test2', 'handler', 'test');
}
}

@ -0,0 +1,29 @@
<?php
namespace TestConfig;
use PHPUnit\Framework\TestCase;
use Config\Autoload;
use RuntimeException;
class AutoloadTest extends TestCase
{
public function testCharger()
{
$this->expectException(RuntimeException::class);
$this->expectExceptionMessage('Config\Autoload is already started');
Autoload::charger();
Autoload::charger();
}
public function testShutDown()
{
Autoload::shutDown();
Autoload::charger();
Autoload::shutDown();
$this->assertNull(Autoload::getInstance());
}
}

@ -0,0 +1,47 @@
<?php
namespace TestConfig;
use Config\Clean;
use PHPUnit\Framework\TestCase;
class CleanTest extends TestCase
{
public function testSimpleString()
{
// Test avec une chaîne de caractères qui contient des balises HTML et des espaces
$string = '<p> Test avec des espaces ! </p>';
$expected = 'Test avec des espaces !';
$this->assertEquals($expected, Clean::simpleString($string));
// Test avec une chaîne de caractères qui contient des caractères spéciaux
$string = 'Ceci est une chaîne & avec des "caractères" spéciaux !';
$expected = 'Ceci est une chaîne &amp; avec des &quot;caractères&quot; spéciaux !';
$this->assertEquals($expected, Clean::simpleString($string));
}
public function testEmail()
{
// Test avec une adresse email valide
$email = 'john.doe@example.com';
$expected = 'john.doe@example.com';
$this->assertEquals($expected, Clean::email($email));
// Test avec une adresse email invalide
$email = 'john.doe@<??|||""__##:;>example.com';
$this->assertEquals($expected, Clean::email($email));
}
public function testInt()
{
// Test avec un entier valide
$int = '1234';
$expected = 1234;
$this->assertEquals($expected, Clean::int($int));
// Test avec un entier invalide
$int = '1234abc';
$this->assertEquals($expected, Clean::int($int));
}
}

@ -0,0 +1,70 @@
<?php
namespace TestConfig;
use PHPUnit\Framework\TestCase;
use Config\Validate;
class ValidateTest extends TestCase
{
public function testEmail()
{
$this->assertTrue(Validate::email('john.doe@example.com'));
$this->assertFalse(Validate::email('john.doe@'));
$this->assertFalse(Validate::email('john.doe@example.commmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'));
}
public function testLogin()
{
$this->assertTrue(Validate::login('john123'));
$this->assertFalse(Validate::login('joh'));
$this->assertFalse(Validate::login('joh!'));
$this->assertFalse(Validate::login('john123456789012345555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555'));
}
public function testPassword()
{
$this->assertTrue(Validate::password('Pa$$w0rd'));
$this->assertFalse(Validate::password('password'));
$this->assertFalse(Validate::password('12345678'));
$this->assertFalse(Validate::password('pa$$word'));
$this->assertFalse(Validate::password('P@$$worddddddddddddddddddddddddddddddddddddddddddd'));
}
public function testKeyWord()
{
$this->assertTrue(Validate::keyWord('keyword'));
$this->assertFalse(Validate::keyWord('ke'));
$this->assertFalse(Validate::keyWord('keyworddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'));
}
public function testTitle()
{
$this->assertTrue(Validate::title('Title'));
$this->assertFalse(Validate::title('Ti'));
$this->assertFalse(Validate::title('titleddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'));
}
public function testType()
{
$this->assertTrue(Validate::type('Type'));
$this->assertFalse(Validate::type('Ty'));
$this->assertFalse(Validate::type('typeddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'));
}
public function testResponse()
{
$this->assertTrue(Validate::response('Response'));
$this->assertFalse(Validate::response(''));
$this->assertFalse(Validate::response('responseddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'));
}
public function testUsername()
{
$this->assertTrue(Validate::username('john123'));
$this->assertFalse(Validate::username('jo'));
$this->assertFalse(Validate::username('joh!'));
$this->assertFalse(Validate::username('john1234567890123455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555'));
}
}

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests" tests="38" assertions="70" errors="0" failures="0" skipped="0" time="0.012849">
<testsuite name="TestBusinessClass\BoxQuestionTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\BoxQuestionTest.php" tests="3" assertions="4" errors="0" failures="0" skipped="0" time="0.005575">
<testcase name="testConstructorWithFourArguments" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\BoxQuestionTest.php" line="10" class="TestBusinessClass\BoxQuestionTest" classname="TestBusinessClass.BoxQuestionTest" assertions="2" time="0.005396"/>
<testcase name="testSetPossibleResponses" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\BoxQuestionTest.php" line="24" class="TestBusinessClass\BoxQuestionTest" classname="TestBusinessClass.BoxQuestionTest" assertions="1" time="0.000120"/>
<testcase name="testSetCategories" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\BoxQuestionTest.php" line="40" class="TestBusinessClass\BoxQuestionTest" classname="TestBusinessClass.BoxQuestionTest" assertions="1" time="0.000060"/>
</testsuite>
<testsuite name="TestBusinessClass\FormTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\FormTest.php" tests="7" assertions="7" errors="0" failures="0" skipped="0" time="0.000805">
<testcase name="testGetTitleReturnsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\FormTest.php" line="10" class="TestBusinessClass\FormTest" classname="TestBusinessClass.FormTest" assertions="1" time="0.000474"/>
<testcase name="testSetTitleSetsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\FormTest.php" line="16" class="TestBusinessClass\FormTest" classname="TestBusinessClass.FormTest" assertions="1" time="0.000059"/>
<testcase name="testGetDescriptionReturnsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\FormTest.php" line="23" class="TestBusinessClass\FormTest" classname="TestBusinessClass.FormTest" assertions="1" time="0.000056"/>
<testcase name="testSetDescriptionSetsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\FormTest.php" line="29" class="TestBusinessClass\FormTest" classname="TestBusinessClass.FormTest" assertions="1" time="0.000055"/>
<testcase name="testGetQuestionsReturnsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\FormTest.php" line="36" class="TestBusinessClass\FormTest" classname="TestBusinessClass.FormTest" assertions="1" time="0.000056"/>
<testcase name="testSetQuestionsSetsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\FormTest.php" line="48" class="TestBusinessClass\FormTest" classname="TestBusinessClass.FormTest" assertions="1" time="0.000054"/>
<testcase name="testGetIdReturnsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\FormTest.php" line="61" class="TestBusinessClass\FormTest" classname="TestBusinessClass.FormTest" assertions="1" time="0.000052"/>
</testsuite>
<testsuite name="TestBusinessClass\IPrintQuestionStrategyTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\IPrintQuestionStrategyTest.php" tests="1" assertions="1" errors="0" failures="0" skipped="0" time="0.000072">
<testcase name="testPrintStrategy" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\IPrintQuestionStrategyTest.php" line="10" class="TestBusinessClass\IPrintQuestionStrategyTest" classname="TestBusinessClass.IPrintQuestionStrategyTest" assertions="1" time="0.000072"/>
</testsuite>
<testsuite name="TestBusinessClass\KeywordTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\KeywordTest.php" tests="2" assertions="3" errors="0" failures="0" skipped="0" time="0.000347">
<testcase name="testConstructor" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\KeywordTest.php" line="10" class="TestBusinessClass\KeywordTest" classname="TestBusinessClass.KeywordTest" assertions="2" time="0.000295"/>
<testcase name="testSetWord" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\KeywordTest.php" line="20" class="TestBusinessClass\KeywordTest" classname="TestBusinessClass.KeywordTest" assertions="1" time="0.000052"/>
</testsuite>
<testsuite name="TestBusinessClass\QuestionTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\QuestionTest.php" tests="2" assertions="3" errors="0" failures="0" skipped="0" time="0.000110">
<testcase name="testConstructor" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\QuestionTest.php" line="10" class="TestBusinessClass\QuestionTest" classname="TestBusinessClass.QuestionTest" assertions="2" time="0.000061"/>
<testcase name="testSetContent" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\QuestionTest.php" line="25" class="TestBusinessClass\QuestionTest" classname="TestBusinessClass.QuestionTest" assertions="1" time="0.000050"/>
</testsuite>
<testsuite name="TestBusinessClass\ResponseTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\ResponseTest.php" tests="2" assertions="7" errors="0" failures="0" skipped="0" time="0.000415">
<testcase name="testGetters" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\ResponseTest.php" line="18" class="TestBusinessClass\ResponseTest" classname="TestBusinessClass.ResponseTest" assertions="4" time="0.000356"/>
<testcase name="testSetters" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\ResponseTest.php" line="28" class="TestBusinessClass\ResponseTest" classname="TestBusinessClass.ResponseTest" assertions="3" time="0.000059"/>
</testsuite>
<testsuite name="TestBusinessClass\TextQuestionTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\TextQuestionTest.php" tests="1" assertions="1" errors="0" failures="0" skipped="0" time="0.000304">
<testcase name="testPrintStrategy" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestBusinessClass\TextQuestionTest.php" line="10" class="TestBusinessClass\TextQuestionTest" classname="TestBusinessClass.TextQuestionTest" assertions="1" time="0.000304"/>
</testsuite>
<testsuite name="TestConfig\AltoRouterTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\AltoRouterTest.php" tests="7" assertions="7" errors="0" failures="0" skipped="0" time="0.002022">
<testcase name="testAddRoutesThrowsExceptionForInvalidInput" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\AltoRouterTest.php" line="23" class="TestConfig\AltoRouterTest" classname="TestConfig.AltoRouterTest" assertions="1" time="0.000912"/>
<testcase name="testGetRoutesReturnsArrayOfRoutes" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\AltoRouterTest.php" line="29" class="TestConfig\AltoRouterTest" classname="TestConfig.AltoRouterTest" assertions="1" time="0.000390"/>
<testcase name="testSetBasePathSetsBasePath" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\AltoRouterTest.php" line="34" class="TestConfig\AltoRouterTest" classname="TestConfig.AltoRouterTest" assertions="1" time="0.000077"/>
<testcase name="testAddMatchTypesAddsMatchTypes" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\AltoRouterTest.php" line="40" class="TestConfig\AltoRouterTest" classname="TestConfig.AltoRouterTest" assertions="1" time="0.000442"/>
<testcase name="testMapAddsRouteToRoutesArray" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\AltoRouterTest.php" line="49" class="TestConfig\AltoRouterTest" classname="TestConfig.AltoRouterTest" assertions="1" time="0.000070"/>
<testcase name="testMapAddsNamedRouteToNamedRoutesArray" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\AltoRouterTest.php" line="58" class="TestConfig\AltoRouterTest" classname="TestConfig.AltoRouterTest" assertions="1" time="0.000062"/>
<testcase name="testMapThrowsExceptionForDuplicateNamedRoutes" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\AltoRouterTest.php" line="67" class="TestConfig\AltoRouterTest" classname="TestConfig.AltoRouterTest" assertions="1" time="0.000069"/>
</testsuite>
<testsuite name="TestConfig\AutoloadTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\AutoloadTest.php" tests="2" assertions="3" errors="0" failures="0" skipped="0" time="0.000847">
<testcase name="testCharger" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\AutoloadTest.php" line="11" class="TestConfig\AutoloadTest" classname="TestConfig.AutoloadTest" assertions="2" time="0.000598"/>
<testcase name="testShutDown" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\AutoloadTest.php" line="20" class="TestConfig\AutoloadTest" classname="TestConfig.AutoloadTest" assertions="1" time="0.000249"/>
</testsuite>
<testsuite name="TestConfig\CleanTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\CleanTest.php" tests="3" assertions="6" errors="0" failures="0" skipped="0" time="0.000955">
<testcase name="testSimpleString" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\CleanTest.php" line="10" class="TestConfig\CleanTest" classname="TestConfig.CleanTest" assertions="2" time="0.000297"/>
<testcase name="testEmail" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\CleanTest.php" line="23" class="TestConfig\CleanTest" classname="TestConfig.CleanTest" assertions="2" time="0.000591"/>
<testcase name="testInt" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\CleanTest.php" line="35" class="TestConfig\CleanTest" classname="TestConfig.CleanTest" assertions="2" time="0.000067"/>
</testsuite>
<testsuite name="TestConfig\ValidateTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\ValidateTest.php" tests="8" assertions="28" errors="0" failures="0" skipped="0" time="0.001397">
<testcase name="testEmail" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\ValidateTest.php" line="11" class="TestConfig\ValidateTest" classname="TestConfig.ValidateTest" assertions="3" time="0.001018"/>
<testcase name="testLogin" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\ValidateTest.php" line="18" class="TestConfig\ValidateTest" classname="TestConfig.ValidateTest" assertions="4" time="0.000057"/>
<testcase name="testPassword" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\ValidateTest.php" line="26" class="TestConfig\ValidateTest" classname="TestConfig.ValidateTest" assertions="5" time="0.000080"/>
<testcase name="testKeyWord" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\ValidateTest.php" line="35" class="TestConfig\ValidateTest" classname="TestConfig.ValidateTest" assertions="3" time="0.000048"/>
<testcase name="testTitle" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\ValidateTest.php" line="42" class="TestConfig\ValidateTest" classname="TestConfig.ValidateTest" assertions="3" time="0.000046"/>
<testcase name="testType" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\ValidateTest.php" line="49" class="TestConfig\ValidateTest" classname="TestConfig.ValidateTest" assertions="3" time="0.000050"/>
<testcase name="testResponse" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\ValidateTest.php" line="56" class="TestConfig\ValidateTest" classname="TestConfig.ValidateTest" assertions="3" time="0.000048"/>
<testcase name="testUsername" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\TestConfig\ValidateTest.php" line="63" class="TestConfig\ValidateTest" classname="TestConfig.ValidateTest" assertions="4" time="0.000050"/>
</testsuite>
</testsuite>
</testsuites>

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="FormTest" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\FormTest.php" tests="7" assertions="7" errors="0" failures="0" skipped="0" time="0.005547">
<testcase name="testGetTitleReturnsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\FormTest.php" line="8" class="FormTest" classname="FormTest" assertions="1" time="0.005191"/>
<testcase name="testSetTitleSetsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\FormTest.php" line="14" class="FormTest" classname="FormTest" assertions="1" time="0.000063"/>
<testcase name="testGetDescriptionReturnsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\FormTest.php" line="21" class="FormTest" classname="FormTest" assertions="1" time="0.000062"/>
<testcase name="testSetDescriptionSetsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\FormTest.php" line="27" class="FormTest" classname="FormTest" assertions="1" time="0.000055"/>
<testcase name="testGetQuestionsReturnsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\FormTest.php" line="34" class="FormTest" classname="FormTest" assertions="1" time="0.000064"/>
<testcase name="testSetQuestionsSetsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\FormTest.php" line="46" class="FormTest" classname="FormTest" assertions="1" time="0.000058"/>
<testcase name="testGetIdReturnsCorrectValue" file="F:\Documents\SAE4.01_FORMULAIRE\Source\Tests\FormTest.php" line="59" class="FormTest" classname="FormTest" assertions="1" time="0.000054"/>
</testsuite>
</testsuites>
Loading…
Cancel
Save