1 |
<?php |
2 |
/** |
3 |
* Ce fichier regroupe les tests unitaire sur la classe DigitalizedDocument |
4 |
* |
5 |
* @package openads |
6 |
* @version SVN : $Id$ |
7 |
*/ |
8 |
|
9 |
require_once('../obj/digitalizedDocument.class.php'); |
10 |
// |
11 |
require_once "../obj/utils.class.php"; |
12 |
|
13 |
/** |
14 |
* Cette classe permet de faire des tests unitaires sur la classe DigitalizedDocument |
15 |
* |
16 |
* La constante DEBUG doit être définis sur DEGUG_MODE ou PRODUCTION_MODE |
17 |
* |
18 |
* Lors de l'envoi de la commande ajouter --bootstrap bootstrap.php |
19 |
* |
20 |
* Jeu de données utilisé : |
21 |
* Le dossier d'instruction PC0130551200001P0 présent dans la bdd, |
22 |
* les dossiers et document présent dans binary_files/test_digitalizedDocument |
23 |
*/ |
24 |
class DigitalizedDocumentTest extends PHPUnit_Framework_TestCase { |
25 |
|
26 |
var $digitalizedDocument = NULL; |
27 |
|
28 |
/** |
29 |
* Fonction lancée en début de classe |
30 |
*/ |
31 |
public static function setUpBeforeClass() { |
32 |
// Création des dossiers PC0130551200001.P0 et PC0130551200002 dans le |
33 |
// dossier de numérisation |
34 |
mkdir('../trs/numerisation/Todo/PC0130551200001.P0/'); |
35 |
chmod('../trs/numerisation/Todo/PC0130551200001.P0/', 0777); |
36 |
mkdir('../trs/numerisation/Todo/PC0130551200002.P0/'); |
37 |
chmod('../trs/numerisation/Todo/PC0130551200002.P0/', 0777); |
38 |
// Récupération du document |
39 |
copy('binary_files/20091106AUTPCP.pdf', '../trs/numerisation/Todo/PC0130551200001.P0/20091106AUTPCP.pdf'); |
40 |
copy('binary_files/20091106AUTPCP-1.pdf', '../trs/numerisation/Todo/PC0130551200001.P0/20091106AUTPCP-1.pdf'); |
41 |
|
42 |
} |
43 |
|
44 |
/** |
45 |
* Fonction lancée en fin de classe |
46 |
*/ |
47 |
public static function tearDownAfterClass() { |
48 |
// Suppression du document 20091106AUTPCP.pdf |
49 |
unlink('../trs/numerisation/Todo/PC0130551200001.P0/20091106AUTPCP.pdf'); |
50 |
unlink('../trs/numerisation/Todo/PC0130551200001.P0/20091106AUTPCP-1.pdf'); |
51 |
// Suppression des dossiers PC0130551200001.P0 et PC0130551200002.P0 |
52 |
if(file_exists('../trs/numerisation/Todo/PC0130551200001.P0')) { |
53 |
rmdir('../trs/numerisation/Todo/PC0130551200001.P0'); |
54 |
} |
55 |
if(file_exists('../trs/numerisation/Todo/PC0130551200002.P0')) { |
56 |
rmdir('../trs/numerisation/Todo/PC0130551200002.P0'); |
57 |
} |
58 |
} |
59 |
|
60 |
/** |
61 |
* Fonction lancée en debut de chaque test |
62 |
*/ |
63 |
public function setUp() { |
64 |
// Instancie la timezone |
65 |
date_default_timezone_set('Europe/Paris'); |
66 |
// Setter les variables de $_SESSION pour la connexion avec BD |
67 |
$_SESSION['collectivite'] = 1; |
68 |
// login doit etre mis a une valeur qui n'est pas une chaine vide, et |
69 |
// le $_SESSION['justlogin'] NE DOIT PAS ETRE set pour que l'execution |
70 |
// ne s'arrete pas dans la fonction isAuthenticated() de l'om_application |
71 |
$_SESSION['login'] = "admin"; |
72 |
// Genere une connexion a la base de donnees |
73 |
$f = new utils("nohtml"); |
74 |
//On instancie la classe DigitalizedDocument |
75 |
$_SERVER['REQUEST_URI'] = ""; |
76 |
$this->digitalizedDocument = new DigitalizedDocument($f); |
77 |
} |
78 |
|
79 |
/** |
80 |
* Fonction lancée en fin de chaque test |
81 |
*/ |
82 |
public function tearDown() { |
83 |
//On détruit l'instance de la classe DigitalizedDocument |
84 |
$this->digitalizedDocument->__destruct(); |
85 |
} |
86 |
|
87 |
/** |
88 |
* Fonction permettant de verifier l'ajout dans la base de données |
89 |
*/ |
90 |
private function checkLinkFile($uid) { |
91 |
|
92 |
//Requête qui vérifie dans la bdd si le lien existe |
93 |
$sql = "SELECT document_numerise |
94 |
FROM ".DB_PREFIXE."document_numerise |
95 |
WHERE uid = '".$uid."'"; |
96 |
$document_numerise = $this->digitalizedDocument->f->db->getOne($sql); |
97 |
$this->digitalizedDocument->f->addToLog("tests/testDigitalizedDocument.php : db->getOne(".$sql.")", VERBOSE_MODE); |
98 |
$this->digitalizedDocument->f->isDatabaseError($document_numerise); |
99 |
|
100 |
//Si le lien a été trouvé on retourne vrai |
101 |
if ($document_numerise) { |
102 |
|
103 |
return true; |
104 |
|
105 |
} |
106 |
|
107 |
//sinon on retourne false |
108 |
return false; |
109 |
} |
110 |
|
111 |
/** |
112 |
* Recupère uid par rapport à l'identifiant |
113 |
*/ |
114 |
private function get_uid_by_id($document_numerise) { |
115 |
|
116 |
//Requête qui vérifie dans la bdd si le lien existe |
117 |
$sql = "SELECT uid |
118 |
FROM ".DB_PREFIXE."document_numerise |
119 |
WHERE document_numerise = '".$document_numerise."'"; |
120 |
$uid = $this->digitalizedDocument->f->db->getOne($sql); |
121 |
$this->digitalizedDocument->f->addToLog("tests/testDigitalizedDocument.php : db->getOne(".$sql.")", VERBOSE_MODE); |
122 |
$this->digitalizedDocument->f->isDatabaseError($uid); |
123 |
|
124 |
// |
125 |
return $uid; |
126 |
|
127 |
} |
128 |
|
129 |
/** |
130 |
* Test la fonction listFiles |
131 |
*/ |
132 |
public function testListFiles() { |
133 |
|
134 |
//Nom possible de dossier |
135 |
$path = "../trs/numerisation/Todo/PC0130551200001.P0"; |
136 |
//Retour de la fonction listFiles |
137 |
$listFiles = $this->digitalizedDocument->listFiles($path); |
138 |
//On vérifie les documents retourné |
139 |
$this->assertContains("20091106AUTPCP-1.pdf", $listFiles); |
140 |
$this->assertContains("20091106AUTPCP.pdf", $listFiles); |
141 |
|
142 |
//Nom de dossier vide |
143 |
$path = "../trs/numerisation/Todo/PC0130551200002.P0"; |
144 |
//Retour de la fontion listFiles |
145 |
$listFiles = $this->digitalizedDocument->listFiles($path); |
146 |
//On vérifie que le tableau retourné est vide |
147 |
$this->assertEquals($listFiles, null); |
148 |
} |
149 |
|
150 |
/* |
151 |
* Test la fonction extractMetadataFromFilename |
152 |
*/ |
153 |
public function testExtractMetadataFromFilename() { |
154 |
|
155 |
//Nom possible de document |
156 |
$filename = "20091106AUTPCP.pdf"; |
157 |
//Retour de la fonction extractMetadataFromFilename |
158 |
$extractMetadataFromFilename = $this->digitalizedDocument->extractMetadataFromFilename($filename); |
159 |
//On vérifie les données retournées |
160 |
$this->assertEquals($extractMetadataFromFilename["title"], "AUTPCP"); |
161 |
$this->assertEquals($extractMetadataFromFilename["dateEvenementDocument"], "06/11/2009"); |
162 |
|
163 |
//Nom possible de document avec version |
164 |
$filename = "20130420ART-1.pdf"; |
165 |
//Retour de la fonction extractMetadataFromFilename |
166 |
$extractMetadataFromFilename = $this->digitalizedDocument->extractMetadataFromFilename($filename); |
167 |
//On vérifie les données retournées |
168 |
$this->assertEquals($extractMetadataFromFilename["title"], "ART"); |
169 |
$this->assertEquals($extractMetadataFromFilename["dateEvenementDocument"], "20/04/2013"); |
170 |
|
171 |
//Nom erroné de document |
172 |
$filename = "20591212.pdf"; |
173 |
//Retour de la fonction extractMetadataFromFilename |
174 |
$extractMetadataFromFilename = $this->digitalizedDocument->extractMetadataFromFilename($filename); |
175 |
//On vérifie que le tableau retourné est vide |
176 |
$this->assertEquals($extractMetadataFromFilename, null); |
177 |
|
178 |
} |
179 |
|
180 |
/** |
181 |
* Test la fonction extractMetadataToFilestorage |
182 |
*/ |
183 |
public function testExtractMetadataToFilestorage() { |
184 |
|
185 |
//Nom possible de dossier |
186 |
$path = "../trs/numerisation/Todo/PC0130551200001.P0"; |
187 |
//Nom possible de document |
188 |
$filename = "20091106AUTPCP.pdf"; |
189 |
//Retour de la fonction extractMetadataToFilestorage |
190 |
$extractMetadataToFilestorage = $this->digitalizedDocument->extractMetadataToFilestorage($path, $filename); |
191 |
//On vérifie les données retournées |
192 |
$this->assertEquals($extractMetadataToFilestorage['filename'], '20091106AUTPCP.pdf'); |
193 |
$this->assertEquals($extractMetadataToFilestorage['size'], '17435'); |
194 |
$this->assertEquals($extractMetadataToFilestorage['mimetype'], 'application/pdf'); |
195 |
|
196 |
//Chemin document erroné |
197 |
$path = ""; |
198 |
//Nom possible de document |
199 |
$filename = "20091106AUTPCP.pdf"; |
200 |
//Retour de la fonction extractMetadataToFilestorage |
201 |
$extractMetadataToFilestorage = $this->digitalizedDocument->extractMetadataToFilestorage($path, $filename); |
202 |
//On vérifie que le retour est null |
203 |
$this->assertEquals($extractMetadataToFilestorage, null); |
204 |
|
205 |
} |
206 |
|
207 |
/** |
208 |
* Test la fonction createFileTemporary |
209 |
*/ |
210 |
public function testCreateFileTemporary() { |
211 |
|
212 |
//Nom possible d'un répertoire |
213 |
$foldername = "PC0130551200001.P0"; |
214 |
//Nom possible de dossier |
215 |
$path = "../trs/numerisation/Todo/PC0130551200001.P0"; |
216 |
//Nom possible de document |
217 |
$filename = "20091106AUTPCP.pdf"; |
218 |
//Construit les métadonnées |
219 |
$metadata = array(); |
220 |
//Données récupérées pour le filestorage |
221 |
$metadata = $this->digitalizedDocument->extractMetadataToFilestorage($path, $filename); |
222 |
//Recupère le contenu du fichier |
223 |
$file_content = file_get_contents($path.'/'.$filename); |
224 |
|
225 |
//Retour de la fonction createFile |
226 |
$createFile = $this->digitalizedDocument->createFileTemporary($file_content, $metadata); |
227 |
//On vérifie que l'action s'est bien déroulée |
228 |
$file_exists_filestorage = $this->digitalizedDocument->filestorage->get_temporary($createFile); |
229 |
$this->assertTrue($file_exists_filestorage != null); |
230 |
|
231 |
} |
232 |
|
233 |
/** |
234 |
* Test la fonction createDocumentNumerise |
235 |
*/ |
236 |
public function testCreateDocumentNumerise() { |
237 |
|
238 |
//Nom possible d'un répertoire |
239 |
$foldername = "PC0130551200001.P0"; |
240 |
//Identifiant du dossier |
241 |
$dossier = "PC0130551200001P0"; |
242 |
//Nom possible de dossier |
243 |
$path = "../trs/numerisation/Todo/PC0130551200001.P0"; |
244 |
//Nom du document |
245 |
$filename = "20091106AUTPCP.pdf"; |
246 |
//Création du fichier |
247 |
$newfile = "20091106RIPC05.pdf"; |
248 |
copy($path.'/'.$filename, $path.'/'.$newfile); |
249 |
|
250 |
//Instance document_numerise |
251 |
require_once "../obj/document_numerise.class.php"; |
252 |
$document_numerise = new document_numerise("]", $this->digitalizedDocument->f->db, NULL); |
253 |
|
254 |
//Construit les métadonnées |
255 |
$metadata = array(); |
256 |
//Données récupérées pour le filestorage |
257 |
$metadata = $this->digitalizedDocument->extractMetadataToFilestorage($path, $newfile); |
258 |
|
259 |
//Recupère le contenu du fichier |
260 |
$file_content = file_get_contents($path.'/'.$newfile); |
261 |
|
262 |
//Créer le fichier temporaire |
263 |
$uid = $this->digitalizedDocument->createFileTemporary($file_content, $metadata); |
264 |
|
265 |
//Retour de la fonction createFileStorage |
266 |
$createDocumentNumerise = $this->digitalizedDocument->createDocumentNumerise($document_numerise, $uid, $dossier, $newfile, $this->digitalizedDocument->f->db, NULL); |
267 |
|
268 |
//Supprime le fichier laissé dans le dossier Todo |
269 |
unlink($path.'/'.$newfile); |
270 |
|
271 |
//On vérifie que le fichier a bien été créé dans le filestorage |
272 |
$uid = $this->get_uid_by_id($createDocumentNumerise); |
273 |
$file_exists_filestorage = $this->digitalizedDocument->filestorage->get($uid); |
274 |
$this->assertTrue($file_exists_filestorage != null); |
275 |
|
276 |
//Uid pas présent dans la bdd |
277 |
$uid = uniqid(); |
278 |
//On vérifie que false est bien retourné |
279 |
$this->assertEquals($this->checkLinkFile($uid), false); |
280 |
|
281 |
} |
282 |
|
283 |
/** |
284 |
* Test la fonction moveDocumentNumerise |
285 |
*/ |
286 |
public function testMoveDocumentNumerise() { |
287 |
|
288 |
//Dossier source |
289 |
$pathSrc = "../trs/numerisation/Todo/PC0130551200001.P0"; |
290 |
//Dossier de destination |
291 |
$pathDes = "../trs/numerisation/Done/PC0130551200001.P0"; |
292 |
//Nom du fichier |
293 |
$filename = "20091106AUTPCP.pdf"; |
294 |
//Retour de la fonction moveDocumentNumerise |
295 |
$moveFile = $this->digitalizedDocument->moveDocumentNumerise($pathSrc, $pathDes, $filename); |
296 |
//On vérifie que l'action s'est bien déroulée |
297 |
//Le document doit être présent dans la destination |
298 |
$file_exists_destination = file_exists($pathDes.'/'.$filename); |
299 |
$this->assertEquals($file_exists_destination, true); |
300 |
//Le document ne doit plus être présent dans la source |
301 |
$file_exists_source = file_exists($pathSrc.'/'.$filename); |
302 |
$this->assertEquals($file_exists_source, false); |
303 |
|
304 |
//Remet le fichier dans todo pour les autres tests |
305 |
rename($pathDes.'/'.$filename, $pathSrc.'/'.$filename); |
306 |
|
307 |
} |
308 |
|
309 |
/** |
310 |
* Test la fonction purgeFiles |
311 |
*/ |
312 |
public function testPurgeFiles() { |
313 |
|
314 |
//Dossier source |
315 |
$pathSrc = "../trs/numerisation/Todo/PC0130551200001.P0"; |
316 |
//Dossier de destination |
317 |
$pathDes = "../trs/numerisation/Done/PC0130551200001.P0"; |
318 |
//Création dossier |
319 |
if (!file_exists($pathDes)) { |
320 |
mkdir("../trs/numerisation/Done/PC0130551200001.P0"); |
321 |
} |
322 |
//Nom du fichier |
323 |
$filename = "20091106AUTPCP.pdf"; |
324 |
//Met le fichier dans Done |
325 |
copy($pathSrc.'/'.$filename, $pathDes.'/'.$filename); |
326 |
|
327 |
//fichier |
328 |
$file = $pathDes.'/'.$filename; |
329 |
//Date de l'import du document |
330 |
$dateImport = "2012-01-01"; |
331 |
//Nombre jour |
332 |
$nbDay = 60; |
333 |
//Retour de la fonction purge |
334 |
$purgeFiles = $this->digitalizedDocument->purgeFiles($file, $dateImport, $nbDay); |
335 |
//On vérifie que l'action s'est bien déroulée |
336 |
$this->assertEquals($purgeFiles, true); |
337 |
|
338 |
//Création du fichier |
339 |
$newfile = "20091106RIPC05.pdf"; |
340 |
copy($pathSrc.'/'.$filename, $pathDes.'/'.$newfile); |
341 |
//fichier |
342 |
$file = $pathDes.'/'.$newfile; |
343 |
//Retour de la fonction purge sans les paramètres de date |
344 |
$purgeFiles = $this->digitalizedDocument->purgeFiles($file); |
345 |
//On vérifie que l'action s'est bien déroulée |
346 |
$this->assertEquals($purgeFiles, true); |
347 |
|
348 |
//Création du fichier |
349 |
$newfile = "20091106DGPC03.pdf"; |
350 |
copy($pathSrc.'/'.$filename, $pathDes.'/'.$newfile); |
351 |
//fichier |
352 |
$file = $pathDes.'/'.$newfile; |
353 |
//Date de l'import du document |
354 |
$dateImport = date('d-m-Y'); |
355 |
//Nombre jour |
356 |
$nbDay = 60; |
357 |
//Retour de la fonction purge |
358 |
$purgeFiles = $this->digitalizedDocument->purgeFiles($file, $dateImport, $nbDay); |
359 |
//On vérifie que l'action s'est bien déroulée |
360 |
$this->assertEquals($purgeFiles, false); |
361 |
|
362 |
//Supprime le fichier laissé dans le dossier Done |
363 |
unlink($pathDes.'/'.$newfile); |
364 |
|
365 |
} |
366 |
|
367 |
/** |
368 |
* Test la fonction run_import |
369 |
*/ |
370 |
public function test_run_import() { |
371 |
|
372 |
//Nom de dossier |
373 |
$pathSrc = "../trs/numerisation/Todo/PC0130551200001.P0"; |
374 |
//Nom dossier destination |
375 |
$pathDes = "../trs/numerisation/Done/PC0130551200001.P0"; |
376 |
//Renomme le fichier pdf |
377 |
$path = "../trs/numerisation/Todo/PC0130551200001.P0"; |
378 |
$listFiles = $this->digitalizedDocument->listFiles($pathSrc); |
379 |
//On vérifie les documents retourné |
380 |
rename($pathSrc.'/'."20091106AUTPCP.pdf", $pathSrc.'/'."20091106NDL.pdf"); |
381 |
rename($pathSrc.'/'."20091106AUTPCP-1.pdf", $pathSrc.'/'."20091106NDL-1.pdf"); |
382 |
|
383 |
//Déclarations paramètre |
384 |
$db = $this->digitalizedDocument->f->db; |
385 |
$DEBUG = NULL; |
386 |
//Retour de la fonction run_import |
387 |
$run_import = $this->digitalizedDocument->run_import($pathSrc, $pathDes, $db, $DEBUG); |
388 |
//On vérifie que l'action s'est bien déroulée |
389 |
$this->assertEquals($run_import, true); |
390 |
$this->assertEquals(count($this->digitalizedDocument->filenameError), 0); |
391 |
|
392 |
//Replace les fichiers dans le fichier source |
393 |
copy($pathDes.'/'."20091106NDL.pdf", $pathSrc.'/'."20091106AUTPCP.pdf"); |
394 |
copy($pathDes.'/'."20091106NDL-1.pdf", $pathSrc.'/'."20091106AUTPCP-1.pdf"); |
395 |
} |
396 |
|
397 |
/** |
398 |
* Test la fonction run_purge |
399 |
*/ |
400 |
public function test_run_purge() { |
401 |
|
402 |
//Dossier source |
403 |
$pathSrc = "../trs/numerisation/Todo/PC0130551200001.P0"; |
404 |
//Dossier de destination |
405 |
$pathDes = "../trs/numerisation/Done/PC0130551200001.P0"; |
406 |
//Création dossier |
407 |
if (!file_exists($pathDes)) { |
408 |
mkdir("../trs/numerisation/Done/PC0130551200001.P0"); |
409 |
} |
410 |
//Nom du fichier |
411 |
$filename = "20091106AUTPCP.pdf"; |
412 |
//Met le fichier 20091106AUTPCP dans Done |
413 |
copy($pathSrc.'/'.$filename, $pathDes.'/'.$filename); |
414 |
//Création du fichier 20091106RIPC05 |
415 |
$newfile = "20091106RIPC05.pdf"; |
416 |
copy($pathSrc.'/'.$filename, $pathDes.'/'.$newfile); |
417 |
//Création du fichier 20091106DGPC03 |
418 |
$newfile = "20091106DGPC03.pdf"; |
419 |
copy($pathSrc.'/'.$filename, $pathDes.'/'.$newfile); |
420 |
|
421 |
//Retour de la fonction run_purge sans date |
422 |
$run_purge = $this->digitalizedDocument->run_purge($pathDes); |
423 |
//On vérifie que l'action s'est bien déroulée |
424 |
$this->assertEquals($run_purge, true); |
425 |
|
426 |
} |
427 |
|
428 |
} |
429 |
|
430 |
?> |