init_data_test(); // Instanciation de la classe *om_application* $this->f = $this->get_inst_om_application("admin", "admin"); // Instanciation de la classe à tester $this->inst = new import_specific(); } /** * Méthode lancée en fin de traitement */ public function common_tearDown() { parent::common_tearDown(); // $this->clean_session(); } /** * Jeu de données : deux tableaux pour chaque test : * colonnes et valeurs. * * Les colonnes sont commentées par un exemple du CSV comme suit : * COL (débute à 0) - Libellé header */ function init_data_test() { // check_required() $this->required_column = array( // COL 0 - Type "type" => array( "require" => true, "header" => "Type", ), // COL 1 - Numéro "numero" => array( "require" => true, "header" => "Numero", ), // COL 5 - INSEE "insee" => array( "require" => false, "header" => "INSEE", ), ); $this->required_row_data = array( "type" => "", "numero" => "10", "insee" => "", ); // check_type() $this->type_column = array( // COL 38 - Date envoi demande de pièces 0 => array( "type" => "date", "header" => "Date envoi demande de pieces", ), 1 => array( "type" => "date", "header" => "Date envoi demande de pieces", ), // COL 8 - Projet 2 => array( "type" => "string", "header" => "Projet", ), 3 => array( "type" => "string", "header" => "Projet", ), // COL 10 - Nb logements 4 => array( "type" => "integer", "header" => "Nb logements", ), 5 => array( "type" => "integer", "header" => "Nb logements", ), 6 => array( "type" => "integer", "header" => "Nb logements", ), // COL 11 - Surface terrain 7 => array( "type" => "float", "header" => "Surface terrain", ), 8 => array( "type" => "float", "header" => "Surface terrain", ), // COL 24 - Lotissement 9 => array( "type" => "boolean", "header" => "Lotissement", ), 10 => array( "type" => "boolean", "header" => "Lotissement", ), ); $this->type_row_data = array( 0 => "10/10/2015", 1 => "101/5/2015", 2 => "chaîne valide", 4 => "50", 5 => "50a", 6 => "50,5", 7 => "50,5", 8 => "50a", 9 => "Oui", 10 => "true", ); $this->type_return_expected = array( // Cas 1 : date valide 0 =>true, // Cas 2 : date invalide 1 =>false, // Cas 3 : chaîne de caractères valide 2 =>true, // Cas 5 : nombre entier valide 4 =>true, // Cas 6 : nombre entier invalide 5 =>false, // Cas 7 : nombre entier invalide 6 =>false, // Cas 8 : nombre décimal valide 7 =>true, // Cas 9 : nombre décimal invalide 8 =>false, // Cas 10 : booléen valide 9 =>true, // Cas 11 : booléen invalide 10 =>false ); // check_foreign_key() $this->fk_column = array( // COL 0 - Type 0 => array( "foreign_key" => array( "sql"=>"SELECT dossier_autorisation_type_detaille FROM openads.dossier_autorisation_type_detaille WHERE code =''", "table" => "dossier_autorisation_type_detaille", "field" => "code", ), "header" => "Type", ), 1 => array( "foreign_key" => array( "sql"=>"SELECT dossier_autorisation_type_detaille FROM openads.dossier_autorisation_type_detaille WHERE code =''", "table" => "dossier_autorisation_type_detaille", "field" => "code", ), "header" => "Type", ), ); $this->fk_row_data = array( 0 => "PCI", 1 => "lambda", ); // set_linked_value() $this->linked_values_column = array( // COL 0 - Type 0 => array( "link" => array( "PC MI" => "PI", ), "header" => "Type", ), 1 => array( "link" => array( "PC MI" => "PI", ), "header" => "Type", ), ); $this->linked_values_row_data = array( 0 => "PCI", 1 => "PC MI", ); } /** * Teste la méthode check_required() de la classe import_specific. * Est-ce qu'il y a une valeur si champ obligatoire ? * * @param $key [integer] colonne du fichier CSV * @param $value [string] valeur à tester * @return [string] message d'erreur ou chaîne vide si succès */ public function test_check_required() { // Message d'erreur $error = _("La colonne %s est obligatoire"); // Utilisation du jeu de données $this->inst->column = $this->required_column; $this->inst->line = $this->required_row_data; // Cas 1 : champ requis vide $ret = $this->inst->check_required("type"); $this->assertEquals($ret, false); // Cas 2 : champ requis renseigné $ret = $this->inst->check_required("numero"); $this->assertEquals($ret, true); // Cas 3 : champ non requis vide $ret = $this->inst->check_required("insee"); $this->assertEquals($ret, true); } /** * Teste la méthode check_type() de la classe import_specific. * Est-ce que la valeur est valide pour le type attendu ? * * @param $key [integer] colonne du fichier CSV * @param $value [string] valeur à tester * @return [string] message d'erreur ou chaîne vide si succès */ public function test_check_type() { // Utilisation du jeu de données $this->inst->column = $this->type_column; $this->inst->line = $this->type_row_data; // Définition des résultats attendus $this->type_return_expected; // Pour chaque colonne testée foreach ($this->inst->line as $key => $value) { // Vérification du retour de la méthode $this->assertEquals( $this->inst->check_type($key), $this->type_return_expected[$key] ); } } /** * Teste la méthode get_foreign_key_id() de la classe import_specific. * Est-ce que la clé étrangère existe ? * * @param $key [integer] colonne du fichier CSV * @return [string] message d'erreur ou chaîne vide si succès */ public function test_get_foreign_key_id() { // Utilisation du jeu de données $this->inst->column = $this->fk_column; $this->inst->line = $this->fk_row_data; // Cas 1 : clé étrangère valide $ret = $this->inst->get_foreign_key_id(0); $this->assertEquals($ret, true); // Cas 2 : clé étrangère invalide $ret = $this->inst->get_foreign_key_id(1); $this->assertEquals($ret, false); } /** * Teste la méthode explode_address() de la classe import_specific. * Doit retourner un tableau d'éléments composant l'adresse fournie. * * @param $value [string] adresse complète * @return [array] tableau (numéro, rue, CP, ville, ...) */ public function test_explode_address() { // Cas 1 : adresse 'normale' à transformer $adresse_complete1 = "27 bis Avenue Jules Cantini 13008 Marseille France"; // Récupération de la transformation $adresse_triee1 = $this->inst->explode_address($adresse_complete1); // Vérification des éléments $this->assertEquals($adresse_triee1['numero'], '27'); $this->assertEquals($adresse_triee1['voie'], 'bis Avenue Jules Cantini'); $this->assertEquals($adresse_triee1['complement1'], ''); $this->assertEquals($adresse_triee1['complement2'], ''); $this->assertEquals($adresse_triee1['cp'], '13008'); $this->assertEquals($adresse_triee1['ville'], 'Marseille'); // Cas 2 : adresse longue (libellée voie supérieur à 30 caractères) $adresse_complete2 = "27 bis Avenue Jules Cantini Boulevard de la Blancarde 06001 Nice"; // Récupération de la transformation $adresse_triee2 = $this->inst->explode_address($adresse_complete2); // Vérification des éléments $this->assertEquals($adresse_triee2['numero'], '27'); $this->assertEquals($adresse_triee2['voie'], 'bis Avenue Jules Cantini'); $this->assertEquals($adresse_triee2['complement1'], 'Boulevard de la Blancarde'); $this->assertEquals($adresse_triee2['complement2'], ''); $this->assertEquals($adresse_triee2['cp'], '06001'); $this->assertEquals($adresse_triee2['ville'], 'Nice'); // Cas 3 : adresse très longue (libellée voie supérieur à 60 caractères) // Numéro composé suivi d'une virgule $adresse_complete3 = "11-12, Place des grands hommes Boulevard du Panthéon Route de Paris 13380 Plan de Cuques"; // Récupération de la transformation $adresse_triee3 = $this->inst->explode_address($adresse_complete3); // Vérification des éléments $this->assertEquals($adresse_triee3['numero'], '11-12'); $this->assertEquals($adresse_triee3['voie'], 'Place des grands hommes'); $this->assertEquals($adresse_triee3['complement1'], 'Boulevard du Panthéon Route'); $this->assertEquals($adresse_triee3['complement2'], 'de Paris'); $this->assertEquals($adresse_triee3['cp'], '13380'); $this->assertEquals($adresse_triee3['ville'], 'Plan de Cuques'); } /** * Teste la méthode set_linked_value() qui subsitue les valeurs du CSV * par le paramétrage. * * @param $key [integer] colonne du fichier CSV * @return [void] */ function test_set_linked_value(){ // Utilisation du jeu de données $this->inst->column = $this->linked_values_column; $this->inst->line = $this->linked_values_row_data; // Cas 1 : aucune correspondance // PCI reste PCI $this->inst->set_linked_value(0); $this->assertEquals($this->inst->line[0], "PCI"); // Cas 2 : existance d'une correspondance // PC MI devient PI $this->inst->set_linked_value(1); $this->assertEquals($this->inst->line[1], "PI"); } }