From 89fa0608a2e20e4914f6d2f3d1a156c580abbbda Mon Sep 17 00:00:00 2001
From: Laurent Pierron <Laurent.Pierron@inria.fr>
Date: Tue, 7 Feb 2023 11:21:44 +0100
Subject: [PATCH] adding TP codeception

---
 codeception.md | 142 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 142 insertions(+)
 create mode 100644 codeception.md

diff --git a/codeception.md b/codeception.md
new file mode 100644
index 0000000..660d4de
--- /dev/null
+++ b/codeception.md
@@ -0,0 +1,142 @@
+---
+marp: true
+style: |
+  .columns {
+    display: grid;
+    grid-template:
+        "a b b";
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+    gap: 1rem;
+  }
+  .columns-left {
+    background: green;
+  }
+  .columns-right {
+    background: beige;
+  }
+---
+
+# TP CodeCeption
+
+**Source** : https://codeception.com/docs/GettingStarted
+
+(Codeception](https://codeception.com) est un framework de tests pour envirnonnements de dévloppements PHP : Symfony, Laravel, etc.
+
+Il fournit les outils pour développer des tests : unitaires, fonctionnels, d'intégration et d'acceptation (définis par le client dans le cahier des charges).
+
+## Trois types de tests
+- Unit : teste une classe PHP
+- Functional : teste un ensemble de classes PHP
+- Acceptance : teste l'application Web finale comme un utilisateur
+
+---
+
+# Prérequis projet `PasteBin`
+
+1. Installer le logiciel [PrivateBin](https://github.com/PrivateBin/PrivateBin) with `git clone git clone https://github.com/PrivateBin/PrivateBin`
+1. Installation des dépendances : `composer update`
+1. Démarrer le serveur : `php -S localhost:8000`
+1. Tester en ouvrant la page : http://localhost:80001.
+1. Retirer `phpunit` à cause d'un conflit : `composer remove 'phpunit/phpunit'` 
+
+---
+
+# Installation de codeception
+
+Source : https://codeception.com/quickstart
+
+1. `composer require "codeception/codeception" --dev`
+1. `php vendor/bin/codecept bootstrap`
+
+Vous pouvez également installer l'extension `Codeception` pour votre IDE si elle existe.
+
+---
+
+# Création du premier test
+
+Un premier test d'acceptation, créé automatqiuement dans `tests/Acceptance/SigninCest.php`
+
+1. `php vendor/bin/codecept generate:cest Acceptance Signin` 
+
+---
+
+# Modification du premier test
+
+<div class="columns">
+<div class="columns-left">
+
+## Test en *Langage Laturel*
+
+```
+I amOnPage '/login'
+I fillField 'email','john_doe@gmail.com''
+I fillField 'password','123456'
+I click 'Login'
+```
+
+</div>
+<div class="columns-right">
+
+## Test en *Codeception PHP*
+
+```PHP
+namespace Tests\Acceptance;
+
+use \Tests\Support\AcceptanceTester;
+
+class SigninCest
+{
+    public function signInSuccessfully(AcceptanceTester $I)
+    {
+        $I->amOnPage('/login');
+        $I->fillField('email', 'john_doe@gmail.com');
+        $I->fillField('password', '123456');
+        $I->click('Login');
+    }
+}
+```
+
+</div>
+</div>
+
+----
+
+# Lancement du test
+
+Configurer le lancement des tests d'acceptation, en indiquant l'URL de votre application : `tests/Acceptance.suite.yml`
+```
+actor: AcceptanceTester
+modules:
+    enabled:
+        - PhpBrowser:
+            url: http://localhost:8000/
+```
+
+Lancer le test avec la commande `run`: `php vendor/bin/codecept run --steps`
+
+Modifier le test pour valider le lancement de `PasteBin`.
+
+----
+
+Suite sur Codeception  :
+- Développemnt guidé par le *comportement* : https://codeception.com/docs/BDD
+- Tests avec des objets *bidons* : https://codeception.com/docs/UnitTests#Mocks
+- Tests d'intégration : https://codeception.com/docs/UnitTests#Integration-Tests
+- Tests de base de données : https://codeception.com/docs/UnitTests#Testing-Database
+
+----
+
+# Mise en oeuvre sur un autre exemple
+
+Source : https://github.com/Codeception/laravel-module-tests
+
+```
+git clone https://github.com/Codeception/laravel-module-tests.git goodcode
+cd goodcode
+composer update
+cp .env.testing .env
+touch database/database.sqlite
+php artisan migrate --seed
+vendor/bin/codecept run Functional
+php artisan serve
+``` 
-- 
GitLab