Skip to content
Snippets Groups Projects
Commit da01149c authored by Patrick Barroca's avatar Patrick Barroca :grin:
Browse files

update contrib.fr

parent 759784fa
Branches
Tags
No related merge requests found
Pipeline #11139 passed with stage
in 45 minutes and 18 seconds
......@@ -173,4 +173,218 @@ Tous les fichiers de vue du répertoire **application/modules/opac/views/scripts
* **banniere.phtml** pour l'en-tête
* **skin_head.phtml** pour rajouter des éléments dans la balise **head** du site
* **accueil.phtml** pour la page d'accueil
* **contenu.phtml** pour les autres pages
\ No newline at end of file
* **contenu.phtml** pour les autres pages
## Créer un nouvel écran Front dans Bokeh
Toute fonctionnalité Bokeh est développée en suivant la méthodologie [Test Driven Development](https://fr.wikipedia.org/wiki/Test_driven_development).
Ce qui veut dire qu'il faut toujours commencer par écrire un test.
L'équipe Bokeh privilégie actuellement l'approche dite du scénario qui consiste à créer un répertoire sous tests/scenarios/ qui contiendra tous les tests de la nouvelle fonctionnalité.
Le premier test à écrire concernera l'accès à l'url qui affichera le nouvel écran.
Bokeh utilisant l'architecture [MVC](https://fr.wikipedia.org/wiki/Mod%C3%A8le-vue-contr%C3%B4leur) de ZendFramework (library/storm/zf/documentation/manual/core/en/index.html), il s'agira du test d'une action d'un controller.
Bokeh fourni un objet de base pour les tests de controller AbstractControllerTestCase dans tests/application/modules/AbstractControllerTestCase.php
Par exemple, partons du principe que nous souhaitons fournir la possibilité de gérer des listes de choses à faire.
Nous commençons par créer un répertoire tests/scenarios/TodoList et dans ce répertoire un fichier TodoListTest.php
```php
<?php
class TodoListTest extends AbstractControllerTestCase {
/** @test */
public function pageShouldContainsH1ChosesAFaire() {
}
}
```
Remarquez que la fonction de test a la forme "contextShouldExpectation", vous trouverez cette forme très souvent dans les tests de Bokeh.
Pour lancer ce test en particulier en ligne de commande, placer vous dans le répertoire de votre Bokeh puis exécutez:
```bash
phpunit -c tests/phpunit.xml --filter pageShouldContainsH1ChosesAFaire TodoListTest tests/scenarios/TodoList/TodoListTest.php
```
Vous devriez voir:
```
OK (1 test, 0 assertions)
```
Nous pouvons simuler l'accès à une url avec la fonction AbstractControllerTestCase::dispatch($url = null, $throw_exceptions = true, $headers = [])
```php
<?php
class TodoListTest extends AbstractControllerTestCase {
/** @test */
public function pageShouldContainsH1ChosesAFaire() {
$this->dispatch('/todo');
}
}
```
Avec ce dispatch nous venons de décider que l'url d'accès de la fonctionnalité sera /todo.
Si vous relancez les tests vous devriez voir:
```
There was 1 error:
1) TodoListTest::pageShouldContainsH1ChosesAFaire
Zend_Controller_Dispatcher_Exception: Invalid controller specified (todo)
library/storm/zf/library/Zend/Controller/Dispatcher/Standard.php:240
library/ZendAfi/Controller/Dispatcher/Standard.php:29
library/storm/zf/library/Zend/Controller/Front.php:934
tests/application/modules/AbstractControllerTestCase.php:295
tests/scenarios/TodoList/TodoListTest.php:5
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
```
ZendFramework nous informe que nous lui avons demandé un controller qui n'existe pas (todo), nous allons donc le créér.
Bokeh suit une architecture modulaire dans laquelle:
* application/modules contient des modules (opac, admin, ...)
* application/modules/[nom du module]/controllers contient des fichier XxxxxxxController.php (AbonneController.php, RechercheController.php, ...)
* chaque fichier controller contient au moins une fonction xxxxAction() (pretsAction, reservationsAction, ...)
Bokeh fournit un objet de base pour tous les controllers, ZendAfi_Controller_Action.
Créons un fichier application/modules/opac/controllers/TodoController.php:
```php
<?php
class TodoController extends ZendAfi_Controller_Action {
}
```
Si vous relancez les tests vous devriez avoir:
```
There was 1 error:
1) TodoListTest::pageShouldContainsH1ChosesAFaire
Error: Call to a member function index() on null
library/ZendAfi/Controller/Action.php:153
library/storm/zf/library/Zend/Controller/Action.php:494
library/storm/zf/library/Zend/Controller/Dispatcher/Standard.php:284
library/ZendAfi/Controller/Dispatcher/Standard.php:29
library/storm/zf/library/Zend/Controller/Front.php:934
tests/application/modules/AbstractControllerTestCase.php:295
tests/scenarios/TodoList/TodoListTest.php:5
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
```
ZendFramework nous informe que nous lui avons demandé une action qui n'existe pas (index).
Bokeh utilise la notion de routage des urls avec pour motif [module]/[controller]/[action].
Par exemple opac/recherche/simple équivaut à module opac, controller RechercheController.php, action simpleAction().
Chacune des parties de l'url est optionelle:
* lorsque l'action n'est pas donnée on considère qu'il s'agit de indexAction()
* lorsque le controller n'est pas donné on considère qu'il s'agit de IndexController.php
* lorsque le module n'est pas donné on considère qu'il s'agit d'opac
Autrement dit l'url par défaut / correspond à /opac/index/index.
Créons une action indexAction()
```php
<?php
class TodoController extends ZendAfi_Controller_Action {
public function indexAction() {
}
}
```
Si vous relancez les tests vous devriez avoir:
```
There was 1 error:
1) TodoListTest::pageShouldContainsH1ChosesAFaire
Zend_View_Exception: script 'todo/index.phtml' not found in path (application/modules/opac/views/scripts/)
library/storm/zf/library/Zend/View/Abstract.php:875
library/storm/zf/library/Zend/View/Abstract.php:783
library/templates/Historic/Template.php:40
library/ZendAfi/View/Helper/Layout/Opac.php:26
library/storm/zf/library/Zend/View/Abstract.php:317
application/modules/opac/views/scripts/module.phtml:2
library/storm/zf/library/Zend/View.php:107
library/storm/zf/library/Zend/View/Abstract.php:787
library/ZendAfi/Controller/Action/Helper/ViewRenderer.php:131
library/storm/zf/library/Zend/Controller/Action/Helper/ViewRenderer.php:923
library/storm/zf/library/Zend/Controller/Action/Helper/ViewRenderer.php:962
library/storm/zf/library/Zend/Controller/Action/HelperBroker.php:166
library/storm/zf/library/Zend/Controller/Action.php:504
library/storm/zf/library/Zend/Controller/Dispatcher/Standard.php:284
library/ZendAfi/Controller/Dispatcher/Standard.php:29
library/storm/zf/library/Zend/Controller/Front.php:934
tests/application/modules/AbstractControllerTestCase.php:295
tests/scenarios/TodoList/TodoListTest.php:5
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
```
ZendFramework nous informe que le rendu de cette action n'existe pas (todo/index.phtml).
Bokeh utilise une fonction du ZendFramework qui effectue automatiquement le rendu de l'action courante en cherchant un fichier dans le répertoire views/scripts/ du module courant, dans un sous-répertoire du nom du controller courant (todo) ayant comme nom de fichier le nom de l'action courante plus l'extension .phtml.
Dans notre cas, cela correspond à views/scripts/todo/index.phtml
Créons ce fichier vide.
```bash
touch application/modules/opac/views/scripts/todo/index.phtml
```
Si vous relancez les tests vous devriez avoir:
```
OK (1 test, 0 assertions)
```
L'accès à l'url s'est bien passé, l'action a été exécutée et rendue en html, mais notre test n'a rien vérifié pour l'instant (0 assertions).
Ajoutons une vérification:
```php
<?php
class TodoListTest extends AbstractControllerTestCase {
/** @test */
public function pageShouldContainsH1ChosesAFaire() {
$this->dispatch('/todo');
$this->assertContains('<h1>Choses à faire</h1>', $this->_response->getBody());
}
}
```
Si vous relancez les tests vous devriez avoir:
```
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
```
Le test nous informe qu'il n'y a aucune balise h1 contenant "Choses à faire" dans le rendu de l'action.
Ajoutons simplement cette balise dans le fichier todo/index.phtml
```html
<h1>Choses à faire</h1>
```
Si vous relancez les tests vous devriez avoir:
```
OK (1 test, 1 assertion)
```
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment