From 6146bc13cbdcab8e489562cb96ea8b68cdbe79e4 Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Tue, 22 Jan 2019 16:58:42 +0100 Subject: [PATCH] IMPORTANTE MISE A JOUR --- README.md | 41 +++++++++++++++++++++++++---------------- TESTS.sh | 4 ++++ config/bootstrap.php | 35 +++++++++++++++++++++++++++++------ config/bootstrap.php.NEW.cakephp37.php | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ config/bootstrap_cli.php.NEW.cakephp37.php | 28 ++++++++++++++++++++++++++++ config/requirements.php.NEW.cakephp37.php | 39 +++++++++++++++++++++++++++++++++++++++ src/Application.php.NEW.cakephp37.php | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Controller/MaterielsController.php | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------- src/Model/Table/LdapConnectionsTable.php | 5 +++++ tests/Fixture/FournisseursFixture.php | 4 ++-- tests/Fixture/MaterielsFixture.php | 8 ++++---- tests/TestCase/Controller/MaterielsControllerTest.php | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------- webroot/index.php.NEW.cakephp37.php | 40 ++++++++++++++++++++++++++++++++++++++++ 13 files changed, 655 insertions(+), 134 deletions(-) create mode 100644 config/bootstrap.php.NEW.cakephp37.php create mode 100644 config/bootstrap_cli.php.NEW.cakephp37.php create mode 100644 config/requirements.php.NEW.cakephp37.php create mode 100644 src/Application.php.NEW.cakephp37.php create mode 100644 webroot/index.php.NEW.cakephp37.php diff --git a/README.md b/README.md index eda01cb..0fbc39c 100644 --- a/README.md +++ b/README.md @@ -53,17 +53,21 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 21/01/2019 -Version: 2.10.2 +Date: 22/01/2019 +Version: 2.10.3 Author: EP - Mise à jour framework cakephp et amélioration recherche matériel: - - Mise à jour du framework cakephp à la version courante : passage de v3.5 à v3.7 - ($ php composer.phar require --update-with-dependencies "cakephp/cakephp:3.7.*") - - Bugfixes et améliorations recherche matériel : - - ajout du fournisseur dans la recherche globale - - bugfix désignation (si elle contient plusieurs mots) - - refactorisation et optimisation du code (bcp plus court...) + IMPORTANTE MISE A JOUR + - Recherche Matériels : Bugfixes et améliorations + - Bugfix Recherche générale sur plusieurs mots : fait un AND de ces mots et non pas un OR !!! + - Bugfix Recherche générale d'une date + - Ajout recherche générale d'une catégorie + - Bugfix recherche sur un montant à virgule... + - Complète refactorisation de MaterielsController::find(), y avait besoin ! + - Ajout de tests - ... + - LDAP authentified bugfix + - Adaptations pour cakephp 3.7 + Version majeure en cours : 2.10 (https://projects.irap.omp.eu/versions/207) @@ -84,16 +88,21 @@ CHANGEMENTS IMPORTANTS (MILESTONES) Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/commits/master ----------------------------------------------------------------------------------------------------------- -17/01/2019 Version: 2.10.1 (EP) - Mise à jour framework cakephp et amélioration recherche matériel: +17/01/2019 Version: 2.10.1, 2, et 3 (EP) + Mise à jour framework cakephp et amélioration recherche matériel et bugfix ldap: - Mise à jour du framework cakephp à la version courante : passage de v3.5 à v3.7 ($ php composer.phar require --update-with-dependencies "cakephp/cakephp:3.7.*") - - Bugfixes et améliorations recherche matériel : - - ajout du fournisseur dans la recherche globale - - bugfix désignation (si elle contient plusieurs mots) - - optimisation du code (bcp plus court...) + - Adaptations pour cakephp 3.7 + - Recherche Matériels : Bugfixes et améliorations + - Bugfix Recherche générale sur plusieurs mots : fait un AND de ces mots et non pas un OR !!! + - Bugfix Recherche générale d'une date + - Ajout recherche générale d'une catégorie + - Bugfix recherche sur un montant à virgule... + - Complète refactorisation de MaterielsController::find(), y avait besoin ! + - Ajout de tests - ... - + - LDAP authentified bugfix + 15/01/2019 Version: 2.9.2 (EP) Nouveau script "install/update.sh" pour mettre à jour automatiquement le logiciel (git pull) ET la BD (si besoin) diff --git a/TESTS.sh b/TESTS.sh index db273e4..dca44c6 100755 --- a/TESTS.sh +++ b/TESTS.sh @@ -2,6 +2,10 @@ sudo chmod o+w tmp/cache/persistent/myapp_cake_core_translations_* vendor/bin/phpunit +# Plus de details: +#vendor/bin/phpunit --debug +#vendor/bin/phpunit --verbose --log-tap tap.log +#vendor/bin/phpunit --testdox # Si ca ne marche pas, essayer plutot: #vendor/phpunit/phpunit/phpunit diff --git a/config/bootstrap.php b/config/bootstrap.php index 117c3b8..945e524 100755 --- a/config/bootstrap.php +++ b/config/bootstrap.php @@ -59,7 +59,14 @@ use Cake\Datasource\ConnectionManager; use Cake\Error\ErrorHandler; use Cake\Log\Log; use Cake\Mailer\Email; -use Cake\Network\Request; + +//(EP added) +use Cake\Mailer\TransportFactory; + +//(EP) +//use Cake\Network\Request; +use Cake\Http\ServerRequest; + use Cake\Routing\DispatcherFactory; use Cake\Utility\Inflector; use Cake\Utility\Security; @@ -143,17 +150,24 @@ if (!Configure::read('App.fullBaseUrl')) { unset($httpHost, $s); } -//EP 16/1/19 for 3.6 +//(EP) 16/1/19 for 3.7 + //Cache::config(Configure::consume('Cache')); Cache::setConfig(Configure::consume('Cache')); + //ConnectionManager::config(Configure::consume('Datasources')); ConnectionManager::setConfig(Configure::consume('Datasources')); + //Email::configTransport(Configure::consume('EmailTransport')); -Email::setConfigTransport(Configure::consume('EmailTransport')); +//Email::setConfigTransport(Configure::consume('EmailTransport')); +TransportFactory::setConfig(Configure::consume('EmailTransport')); + //Email::config(Configure::consume('Email')); Email::setConfig(Configure::consume('Email')); + //Log::config(Configure::consume('Log')); Log::setConfig(Configure::consume('Log')); + //Security::salt(Configure::consume('Security.salt')); Security::setSalt(Configure::consume('Security.salt')); @@ -167,11 +181,15 @@ Security::setSalt(Configure::consume('Security.salt')); /** * Setup detectors for mobile and tablet. */ -Request::addDetector('mobile', function ($request) { +//(EP) +//Request::addDetector('mobile', function ($request) { +ServerRequest::addDetector('mobile', function ($request) { $detector = new \Detection\MobileDetect(); return $detector->isMobile(); }); -Request::addDetector('tablet', function ($request) { +//(EP) +//Request::addDetector('tablet', function ($request) { +ServerRequest::addDetector('tablet', function ($request) { $detector = new \Detection\MobileDetect(); return $detector->isTablet(); }); @@ -197,14 +215,19 @@ Request::addDetector('tablet', function ($request) { * */ +/* (EP) + * TODO: + * Depuis cakephp3.7 les plugins sont à mettre dans src/Application.php + * cf https://book.cakephp.org/3.0/en/migrations.html + */ Plugin::load('Migrations'); - // Only try to load DebugKit in development mode // Debug Kit should not be installed on a production system if (Configure::read('debug')) { Plugin::load('DebugKit', ['bootstrap' => true]); } + /** * Connect middleware/dispatcher filters. */ diff --git a/config/bootstrap.php.NEW.cakephp37.php b/config/bootstrap.php.NEW.cakephp37.php new file mode 100644 index 0000000..26faf8c --- /dev/null +++ b/config/bootstrap.php.NEW.cakephp37.php @@ -0,0 +1,206 @@ +parse() +// ->putenv() +// ->toEnv() +// ->toServer(); +// } + +/* + * Read configuration file and inject configuration into various + * CakePHP classes. + * + * By default there is only one configuration file. It is often a good + * idea to create multiple configuration files, and separate the configuration + * that changes from configuration that does not. This makes deployment simpler. + */ +try { + Configure::config('default', new PhpConfig()); + Configure::load('app', 'default', false); +} catch (\Exception $e) { + exit($e->getMessage() . "\n"); +} + +/* + * Load an environment local configuration file. + * You can use a file like app_local.php to provide local overrides to your + * shared configuration. + */ +//Configure::load('app_local', 'default'); + +/* + * When debug = true the metadata cache should only last + * for a short time. + */ +if (Configure::read('debug')) { + Configure::write('Cache._cake_model_.duration', '+2 minutes'); + Configure::write('Cache._cake_core_.duration', '+2 minutes'); + // disable router cache during development + Configure::write('Cache._cake_routes_.duration', '+2 seconds'); +} + +/* + * Set the default server timezone. Using UTC makes time calculations / conversions easier. + * Check http://php.net/manual/en/timezones.php for list of valid timezone strings. + */ +date_default_timezone_set(Configure::read('App.defaultTimezone')); + +/* + * Configure the mbstring extension to use the correct encoding. + */ +mb_internal_encoding(Configure::read('App.encoding')); + +/* + * Set the default locale. This controls how dates, number and currency is + * formatted and sets the default language to use for translations. + */ +ini_set('intl.default_locale', Configure::read('App.defaultLocale')); + +/* + * Register application error and exception handlers. + */ +$isCli = PHP_SAPI === 'cli'; +if ($isCli) { + (new ConsoleErrorHandler(Configure::read('Error')))->register(); +} else { + (new ErrorHandler(Configure::read('Error')))->register(); +} + +/* + * Include the CLI bootstrap overrides. + */ +if ($isCli) { + require __DIR__ . '/bootstrap_cli.php'; +} + +/* + * Set the full base URL. + * This URL is used as the base of all absolute links. + * + * If you define fullBaseUrl in your config file you can remove this. + */ +if (!Configure::read('App.fullBaseUrl')) { + $s = null; + if (env('HTTPS')) { + $s = 's'; + } + + $httpHost = env('HTTP_HOST'); + if (isset($httpHost)) { + Configure::write('App.fullBaseUrl', 'http' . $s . '://' . $httpHost); + } + unset($httpHost, $s); +} + +Cache::setConfig(Configure::consume('Cache')); +ConnectionManager::setConfig(Configure::consume('Datasources')); +TransportFactory::setConfig(Configure::consume('EmailTransport')); +Email::setConfig(Configure::consume('Email')); +Log::setConfig(Configure::consume('Log')); +Security::setSalt(Configure::consume('Security.salt')); + +/* + * The default crypto extension in 3.0 is OpenSSL. + * If you are migrating from 2.x uncomment this code to + * use a more compatible Mcrypt based implementation + */ +//Security::engine(new \Cake\Utility\Crypto\Mcrypt()); + +/* + * Setup detectors for mobile and tablet. + */ +ServerRequest::addDetector('mobile', function ($request) { + $detector = new \Detection\MobileDetect(); + + return $detector->isMobile(); +}); +ServerRequest::addDetector('tablet', function ($request) { + $detector = new \Detection\MobileDetect(); + + return $detector->isTablet(); +}); + +/* + * Enable immutable time objects in the ORM. + * + * You can enable default locale format parsing by adding calls + * to `useLocaleParser()`. This enables the automatic conversion of + * locale specific date formats. For details see + * @link https://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#parsing-localized-datetime-data + */ +Type::build('time') + ->useImmutable(); +Type::build('date') + ->useImmutable(); +Type::build('datetime') + ->useImmutable(); +Type::build('timestamp') + ->useImmutable(); + +/* + * Custom Inflector rules, can be set to correctly pluralize or singularize + * table, model, controller names or whatever other string is passed to the + * inflection functions. + */ +//Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']); +//Inflector::rules('irregular', ['red' => 'redlings']); +//Inflector::rules('uninflected', ['dontinflectme']); +//Inflector::rules('transliteration', ['/å/' => 'aa']); diff --git a/config/bootstrap_cli.php.NEW.cakephp37.php b/config/bootstrap_cli.php.NEW.cakephp37.php new file mode 100644 index 0000000..d3679d7 --- /dev/null +++ b/config/bootstrap_cli.php.NEW.cakephp37.php @@ -0,0 +1,28 @@ +addPlugin('Bake'); + } catch (MissingPluginException $e) { + // Do not halt if the plugin is missing + } + + $this->addPlugin('Migrations'); + } + + /* + * Only try to load DebugKit in development mode + * Debug Kit should not be installed on a production system + */ + if (Configure::read('debug')) { + $this->addPlugin(\DebugKit\Plugin::class); + } + + } + + /** + * Setup the middleware queue your application will use. + * + * @param \Cake\Http\MiddlewareQueue $middlewareQueue The middleware queue to setup. + * @return \Cake\Http\MiddlewareQueue The updated middleware queue. + */ + public function middleware($middlewareQueue) + { + $middlewareQueue + // Catch any exceptions in the lower layers, + // and make an error page/response + ->add(new ErrorHandlerMiddleware(null, Configure::read('Error'))) + + // Handle plugin/theme assets like CakePHP normally does. + ->add(new AssetMiddleware([ + 'cacheTime' => Configure::read('Asset.cacheTime') + ])) + + // Add routing middleware. + // Routes collection cache enabled by default, to disable route caching + // pass null as cacheConfig, example: `new RoutingMiddleware($this)` + // you might want to disable this cache in case your routing is extremely simple + ->add(new RoutingMiddleware($this, '_cake_routes_')); + + return $middlewareQueue; + } +} diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 2dd5c62..d4e8d08 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -1329,10 +1329,7 @@ class MaterielsController extends AppController { $searchFieldName = 's_' . $fieldName; //if ($this->request->getData($searchFieldName) !== null && ($this->request->getData($searchFieldName) != '')) - if ($this->request->getData($searchFieldName)) - return [ - "Materiels.$fieldName LIKE" => '%' . $this->request->getData($searchFieldName) . '%' - ]; + if ($this->request->getData($searchFieldName)) return [ "Materiels.$fieldName LIKE" => '%' . $this->request->getData($searchFieldName) . '%' ]; return NULL; } @@ -1345,29 +1342,29 @@ class MaterielsController extends AppController private function getConditionForFieldNumber($fieldName) { $searchFieldName = 's_' . $fieldName; - if ($this->request->getData($searchFieldName) !== null && ($this->request->getData($searchFieldName) != '')) - return [ - "Materiels.$fieldName =" => $this->request->getData($searchFieldName) - ]; + //if ($this->request->getData($searchFieldName) !== null && ($this->request->getData($searchFieldName) != '')) + //if ($this->request->getData($searchFieldName)) return [ "Materiels.$fieldName =" => $this->request->getData($searchFieldName) ]; + if ($this->request->getData($searchFieldName)) return [ "Materiels.$fieldName LIKE" => $this->request->getData($searchFieldName) ]; return NULL; } + /* + * @param string $general_search_field_name : 's_all' or 's_all2' + */ private function find_general($general_search_field_name) { - // $general_search_field_name equals 's_all' or 's_all2' + $all = $this->request->getData($general_search_field_name); // 's_all' or 's_all2' //$generalFieldConditions = NULL; - $all = $this->request->getData($general_search_field_name); - //debug($all); exit; // Check for a date - foreach ([ - "/", - "-" - ] as $symb) { - $pos1 = strpos($all, $symb); // Première occurence - $pos2 = strrchr($all, $symb); // Dernière occurence - if ($pos1 !== false && $pos2 !== false && $pos1 != $pos2) { + foreach ( [ "/", "-" ] as $symb) { + $nbocc = substr_count($all, $symb); + //$pos1 = strpos($all, $symb); // Première occurence + //$pos2 = strripos($all, $symb); // Dernière occurence + //debug($nbocc); debug($symb); + //if ($pos1 !== false && $pos2 !== false && $pos2 != $pos1) { + if ($nbocc == 2) { list ($dd, $mm, $yyyy) = explode($symb, $all); if (checkdate((int) $mm, (int) $dd, (int) $yyyy)) { $all = "$yyyy-$mm-$dd"; @@ -1377,65 +1374,73 @@ class MaterielsController extends AppController } // End datecheck + // Si $all = "dell pallier", ça va chercher les lignes de la table matériel qui contiennent "dell" ET "pallier" dans n'importe quelle colonne $tabSearch = explode(' ', $all); - $merge = []; foreach ($tabSearch as $word) { - $FieldConditions = [ - // Utilisation de array() pour pouvoir mettre plusieurs fois la meme clé. - // Exemple : la clé "Materiels.designation LIKE" pourra apparaître plusieurs fois si on fait une recherche de "mac pc" - // On aura : "Materiels.designation LIKE" => '%mac%' et "Materiels.designation LIKE" => '%pc%' - // Sinon on aurait uniquement eu : "Materiels.designation LIKE" => '%pc%' - array( - 'Materiels.designation LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.numero_laboratoire LIKE' => '%' . $word . '%' - ), - array( + $field_conditions = [ + /* (EP) : + * Utilisation de array() [] pour pouvoir mettre plusieurs fois la meme clé. + * Exemple : la clé "Materiels.designation LIKE" pourra apparaître plusieurs fois si on fait une recherche de "mac pc" + * On aura : "Materiels.designation LIKE" => '%mac%' et "Materiels.designation LIKE" => '%pc%' + * Sinon on aurait uniquement eu : "Materiels.designation LIKE" => '%pc%' + */ + + // 1) Materiels table direct (straight) columns + [ 'Materiels.designation LIKE' => '%' . $word . '%' ], + [ 'Materiels.numero_laboratoire LIKE' => '%' . $word . '%' ], + [ 'Materiels.numero_inventaire_organisme LIKE' => '%' . $word . '%' - ), - array( + ], + [ 'Materiels.numero_inventaire_old LIKE' => '%' . $word . '%' - ), - array( + ], + [ 'Materiels.numero_commande LIKE' => '%' . $word . '%' - ), - array( + ], + [ 'Materiels.description LIKE' => '%' . $word . '%' - ), - /*TODO: comment gérer fournisseur ???*/ - array( - //'Materiels.fournisseur_id LIKE' => '%' . $word . '%' - //'Materiels.fournisseur_id =' => $word - 'Fournisseurs.nom LIKE' => '%' . $word . '%' - ), - array( + ], + [ 'Materiels.nom_responsable LIKE' => '%' . $word . '%' - ), - array( + ], + [ 'Materiels.email_responsable LIKE' => '%' . $word . '%' - ), - array( + ], + [ 'Materiels.code_comptable LIKE' => '%' . $word . '%' - ), - array( + ], + [ 'Materiels.numero_serie LIKE' => '%' . $word . '%' - ), - array( + ], + [ 'Materiels.date_acquisition LIKE' => '%' . $word . '%' - ), - array( + ], + [ 'Materiels.lieu_detail LIKE' => '%' . $word . '%' - ) + ], + + // 2) Materiels table foreign keys + [ 'Fournisseurs.nom LIKE' => '%' . $word . '%' ], + [ 'Categories.nom LIKE' => '%' . $word . '%' ], + ]; - $merge = array_merge($merge, $FieldConditions); + + /* (EP) + * For N words in $tabSearch, this will return $merge1 AND $merge2 AND ... $mergeN + * (each merge being a list of OR conditions) + * Ex: + * Si $tabSearch = "dell pallier", ça va chercher les lignes de la table matériel qui contiennent "dell" ET "pallier" dans n'importe quelle colonne + * + * Utilisation de array() [] pour pouvoir mettre plusieurs fois la meme clé "AND". + */ + $merge = array_merge($merge, [[ 'AND' => ['OR' => $field_conditions] ]] ); + //$merge = array_merge($merge, $field_conditions); } - $generalFieldConditions = [ - 'OR' => $merge - ]; - - return $generalFieldConditions; + + //debug($merge); + return $merge; + //return [ 'OR' => $merge ]; } @@ -1542,6 +1547,7 @@ class MaterielsController extends AppController $matostypeRequest, $this->getConditionForField('status'), ]; + //debug($specificFieldsConditions); return $specificFieldsConditions; diff --git a/src/Model/Table/LdapConnectionsTable.php b/src/Model/Table/LdapConnectionsTable.php index dc9d69e..bfc95d9 100755 --- a/src/Model/Table/LdapConnectionsTable.php +++ b/src/Model/Table/LdapConnectionsTable.php @@ -182,6 +182,10 @@ class LdapConnectionsTable extends AppTable $ldapConnection = ldap_connect($this->host, $this->port); ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3); + // Binding optionnel + if ($this->ldap_authentified) $ldapbind = ldap_bind($ldapConnection, $this->bindDn, $this->bindPass) + or die("Could not bind to LDAP server.". ldap_error($ldapConnection) ); + $results = ldap_search($ldapConnection, $this->baseDn, $this->filter); $res = ldap_get_entries($ldapConnection, $results); @@ -397,6 +401,7 @@ class LdapConnectionsTable extends AppTable // Binding optionnel if ($this->ldap_authentified) $ldapbind = ldap_bind($ldapConnection, $this->bindDn, $this->bindPass) or die("Could not bind to LDAP server.". ldap_error($ldapConnection) ); + $search = $this->getUserAttributes($user_login, $ldapConnection, $filter, $just_these); if ($search === false) die("Could not get user attributes from LDAP server, response was: " . ldap_error($ldapConnection) ); return $search[0]; diff --git a/tests/Fixture/FournisseursFixture.php b/tests/Fixture/FournisseursFixture.php index 32975dc..6a78a6b 100644 --- a/tests/Fixture/FournisseursFixture.php +++ b/tests/Fixture/FournisseursFixture.php @@ -37,11 +37,11 @@ class FournisseursFixture extends TestFixture public $records = [ [ 'id' => 1, - 'nom' => 'Premier Fournisseur' + 'nom' => 'Fournisseur1' ], [ 'id' => 2, - 'nom' => 'Deuxieme Fournisseur' + 'nom' => 'Fournisseur2' ], ]; } diff --git a/tests/Fixture/MaterielsFixture.php b/tests/Fixture/MaterielsFixture.php index d31d914..a7c6385 100755 --- a/tests/Fixture/MaterielsFixture.php +++ b/tests/Fixture/MaterielsFixture.php @@ -637,7 +637,7 @@ class MaterielsFixture extends TestFixture { 'organisme_id' => 1, 'site_id' => 1, 'metrologie' => 0, - 'fournisseur_id' => 1 + 'fournisseur_id' => 2 ], [ 'id' => 2, @@ -673,7 +673,7 @@ class MaterielsFixture extends TestFixture { 'organisme_id' => 1, 'site_id' => 1, 'metrologie' => 0, - 'fournisseur_id' => 1 + 'fournisseur_id' => 2 ], [ 'id' => 3, @@ -709,7 +709,7 @@ class MaterielsFixture extends TestFixture { 'organisme_id' => 1, 'site_id' => 1, 'metrologie' => 0, - 'fournisseur_id' => 1 + 'fournisseur_id' => 2 ], [ 'id' => 11, @@ -830,7 +830,7 @@ class MaterielsFixture extends TestFixture { 'materiel_administratif' => 1, 'materiel_technique' => 1, 'status' => 'ARCHIVED', - 'date_acquisition' => '2016-05-11', + 'date_acquisition' => '2016-05-10', 'prix_ht' => 75, 'eotp' => 'Lorem ipsum dolor sit amet', 'numero_commande' => 'Lorem ipsum dolor sit amet', diff --git a/tests/TestCase/Controller/MaterielsControllerTest.php b/tests/TestCase/Controller/MaterielsControllerTest.php index 9fb92e9..5939254 100755 --- a/tests/TestCase/Controller/MaterielsControllerTest.php +++ b/tests/TestCase/Controller/MaterielsControllerTest.php @@ -760,11 +760,10 @@ class MaterielsControllerTest extends General { * * @return void */ - public function testFind() { - $this->authSuperAdmin(); - - $dataSearch = [ - 's_designation' => 'Test', + private function get_specific_fields() { + return [ + //'s_designation' => 'Test', + 's_designation' => '', 's_matostype' => '', 's_sur_categorie_id' => '', 's_categorie_id' => '', @@ -787,87 +786,163 @@ class MaterielsControllerTest extends General { 's_fournisseur_id' => '', 's_salle' => '' ]; + + } + public function testFind() { + $this->authSuperAdmin(); + + $dataSearch = $this->get_specific_fields(); - // Test sans aucun champ + /* + * 1. Test sans aucun champ + */ $this->get('/materiels/find'); $this->assertResponseContains("Aucun résultats pour cette recherche.", "Le contenu de la recherche devrait être vide."); - // Test champ générale formulaire - $this->post('/materiels/find', [ - 's_all' => 'TEST-2016-0002' - ]); + + /* + * 2. Test champ global "s_all_2" dans le menu latéral de gauche + */ + $this->post('/materiels/find', + ['s_all_2' => 'TEST-2016-0002'] + ); + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche général du menu latéral est incorrecte."); + + + /* + * 3. Test champ général "s_all" en haut du formulaire + */ + $this->post( '/materiels/find', ['s_all' => 'TEST-2016-0002'] ); $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte."); - // Test champ générale menu latéral - $this->post('/materiels/find', [ - 's_all_2' => 'TEST-2016-0002' - ]); - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche général du menu latéral est incorrecte."); + $this->post( '/materiels/find', ['s_all' => 'Fournisseur'] ); + $this->assertResponseContains("Résultats (7)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte."); + + $this->post( '/materiels/find', ['s_all' => 'Fournisseur1'] ); + $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte."); + $this->post( '/materiels/find', ['s_all' => 'Fournisseur2'] ); + $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte."); - // Test champ designation + $this->post( '/materiels/find', ['s_all' => 'Fournisseur Test'] ); + $this->assertResponseContains("Résultats (7)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte."); + + // les matériels trouvés doivent contenir "Fournisseur" ET "Test" ET "(C)" + $this->post( '/materiels/find', ['s_all' => 'Fournisseur Test (C)'] ); + $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte."); + + + /* + * 4. Recherche dans les champs spécifiques du formulaire + */ + + // 4.1 Test champs individuels (un seul champ) + + // - Test champ designation + // -- un mot + $dataSearch['s_designation'] = 'Test'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par désignation est incorrecte."); - - // Test champ numero_laboratoire + // -- N mots + $dataSearch['s_designation'] = 'Test TBA'; // = contient "Test" ET "TBA" => devrait trouver "Test 13 (TBA)" + $this->post('/materiels/find', $dataSearch); + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par désignation est incorrecte."); + $dataSearch['s_designation'] = 'Test 13 TBA'; // = contient "Test" ET "TBA" => devrait trouver "Test 13 (TBA)" + $this->post('/materiels/find', $dataSearch); + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par désignation est incorrecte."); $dataSearch['s_designation'] = ''; + + // - Test champ numero_laboratoire $dataSearch['s_numero_laboratoire'] = 'TEST-2016-0003'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par numero de laboratoire est incorrecte."); - - // Test champ status $dataSearch['s_numero_laboratoire'] = ''; + + // - Test champ status $dataSearch['s_status'] = 'CREATED'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche par statut est incorrecte."); - - // Test champ date_acquisition $dataSearch['s_status'] = ''; + + // - Test champ date_acquisition $dataSearch['s_date_acquisition'] = '2016-05-11'; $this->post('/materiels/find', $dataSearch); - $this->assertResponseContains("Résultats (5)", "Le nb de materiels pour la recherche par date d'acquisition est incorrecte."); - /*TODO: - * //Test champ fournisseur_id - * $dataSearch['s_fournisseur_id'] = 1; - * $this->post('/materiels/find', $dataSearch); - * $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche par fournisseur_id est incorrecte."); - * //Test champ salle + $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche par date d'acquisition est incorrecte."); + $dataSearch['s_date_acquisition'] = ''; + + // - Test champ fournisseur_id + $dataSearch['s_fournisseur_id'] = 1; + $dataSearch['s_date_acquisition'] = '2016-05-11'; + $this->post('/materiels/find', $dataSearch); + $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche par fournisseur_id est incorrecte."); + $dataSearch['s_date_acquisition'] = ''; + $this->post('/materiels/find', $dataSearch); + $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche par fournisseur_id est incorrecte."); + $dataSearch['s_fournisseur_id'] = ''; + $dataSearch['s_date_acquisition'] = ''; + + //- Test champ salle + /* * $dataSearch['s_salle'] = 'I203'; * $this->post('/materiels/find', $dataSearch); * $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par detaille lieu est incorrecte."); */ - // Test champ periode_acquisition1 (debut) - $dataSearch['s_date_acquisition'] = ''; + + // - Test champ periode_acquisition1 (debut) $dataSearch['s_periode_acquisition1'] = '2015-01-01'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par debut de periode d'acquisition est incorrecte."); - - // Test champ periode_acquisition1 (debut) && champ periode_acquisition2 (fin) + // - Test champ periode_acquisition1 (debut) && champ periode_acquisition2 (fin) $dataSearch['s_periode_acquisition2'] = '2016-01-01'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par intervalle entre la periode d'acquisition (debut) et la periode d'acquisition (fin) est incorrecte."); - - // Test champ periode_acquisition2 (fin) + // - Test champ periode_acquisition2 (fin) $dataSearch['s_periode_acquisition1'] = ''; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par fin de periode d'acquisition est incorrecte."); - - // Test champ prix_ht $dataSearch['s_periode_acquisition2'] = ''; + + // - Test champ prix_ht $dataSearch['s_prix_ht'] = '50'; $this->post('/materiels/find', $dataSearch); - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht est incorrecte."); - - // Test champ prix_ht_sup + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht est incorrecte (v1)."); $dataSearch['s_prix_ht'] = ''; - $dataSearch['s_prix_ht_sup'] = '30'; + // - Meme test mais avec autres champs + $dataSearch['s_prix_ht_sup'] = '50'; // >= 50 + $dataSearch['s_prix_ht_inf'] = '50'; // <= 50 + $this->post('/materiels/find', $dataSearch); + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht est incorrecte (v2)."); + $dataSearch['s_prix_ht_inf'] = ''; + $dataSearch['s_prix_ht_sup'] = ''; + $dataSearch['s_prix_ht'] = '75'; + $this->post('/materiels/find', $dataSearch); + $this->assertResponseContains("Résultats (5)", "Le nb de materiels pour la recherche par prix ht est incorrecte (v1)."); + $dataSearch['s_prix_ht'] = ''; + + // - Test champ prix_ht_sup + $dataSearch['s_prix_ht_sup'] = '30'; // >= 30 $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par prix ht superieur est incorrecte."); - - // Test champ prix_ht_inf $dataSearch['s_prix_ht_sup'] = ''; - $dataSearch['s_prix_ht_inf'] = '70'; + // - Test champ prix_ht_inf + $dataSearch['s_prix_ht_inf'] = '70'; // <=70 $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par prix ht inferieur est incorrecte."); + $dataSearch['s_prix_ht_inf'] = ''; + // - Test champ prix_ht_inf et sup + $dataSearch['s_prix_ht_sup'] = '30'; // >= 30 + $dataSearch['s_prix_ht_inf'] = '70'; // <=70 + $this->post('/materiels/find', $dataSearch); + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht inf et sup est incorrecte."); + $dataSearch['s_prix_ht_sup'] = '25'; // >= 30 + $dataSearch['s_prix_ht_inf'] = '75'; // <=70 + $this->post('/materiels/find', $dataSearch); + $this->assertResponseContains("Résultats (7)", "Le nb de materiels pour la recherche par prix ht inf et sup est incorrecte."); + $dataSearch['s_prix_ht_inf'] = ''; + $dataSearch['s_prix_ht_sup'] = ''; + + // 4.2 Test champs multiples (plusieurs champs à la fois) + //$dataSearch = $this->get_specific_fields(); + } /** diff --git a/webroot/index.php.NEW.cakephp37.php b/webroot/index.php.NEW.cakephp37.php new file mode 100644 index 0000000..6bc06dc --- /dev/null +++ b/webroot/index.php.NEW.cakephp37.php @@ -0,0 +1,40 @@ +emit($server->run()); -- libgit2 0.21.2