17 import(
'lib.pkp.tests.DatabaseTestCase');
18 import(
'lib.pkp.classes.submission.SubmissionFileDAO');
19 import(
'lib.pkp.classes.submission.SubmissionArtworkFileDAODelegate');
20 import(
'lib.pkp.classes.submission.SubmissionFile');
21 import(
'lib.pkp.classes.submission.SubmissionArtworkFile');
22 import(
'classes.submission.SubmissionDAO');
23 import(
'lib.pkp.classes.submission.Genre');
24 import(
'lib.pkp.classes.submission.reviewRound.ReviewRound');
25 import(
'lib.pkp.classes.db.DBResultRange');
26 import(
'lib.pkp.classes.core.PKPRouter');
27 import(
'lib.pkp.classes.core.PKPRequest');
30 define(
'SUBMISSION_FILE_DAO_TEST_PRESS_ID', 999);
31 define(
'SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID', 9999);
32 define(
'SUBMISSION_FILE_DAO_TEST_DOC_GENRE_ID', 1);
33 define(
'SUBMISSION_FILE_DAO_TEST_ART_GENRE_ID', 2);
37 define(
'TMP_FILES',
'/tmp');
42 protected function setUp() : void {
44 $this->testFile = tempnam(TMP_FILES,
'SubmissionFile');
47 import(
'classes.press.Press');
49 $press->setPrimaryLocale(
'en_US');
50 $press->setPath(
'press-path');
51 $press->setId(SUBMISSION_FILE_DAO_TEST_PRESS_ID);
54 $mockRequest = $this->getMockBuilder(PKPRequest::class)
55 ->setMethods(array(
'getContext'))
57 $mockRequest->expects($this->any())
58 ->method(
'getContext')
59 ->will($this->returnValue($press));
63 $submissionDao = $this->getMockBuilder(SubmissionDAO::class)
64 ->setMethods(array(
'getById'))
67 $monograph->setId(SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID);
68 $monograph->setPressId(SUBMISSION_FILE_DAO_TEST_PRESS_ID);
69 $monograph->setLocale(
'en_US');
70 $submissionDao->expects($this->any())
72 ->will($this->returnValue($monograph));
76 $genreDao = $this->getMockBuilder(GenreDAO::class)
77 ->setMethods(array(
'getById'))
80 $genreDao->expects($this->any())
82 ->will($this->returnCallback(array($this,
'getTestGenre')));
87 if (is_null($request->getRouter())) {
89 $request->setRouter($router);
94 if (file_exists($this->testFile)) unlink($this->testFile);
111 $submission = $submissionDao->newDataObject();
112 $submission->setPressId(SUBMISSION_FILE_DAO_TEST_PRESS_ID);
113 $submission->setLocale(
'en_US');
114 $submissionId = $submissionDao->insertObject($submission);
117 $publication = $publicationDao->newDataObject();
118 $publication->setData(
'submissionId', $submissionId);
119 $publication->setData(
'locale',
'en_US');
120 $publicationDao->insertObject($publication);
122 $submission->setData(
'currentPublicationId', $publication->getId());
123 $submissionDao->updateObject($submission);
125 $submissionDao = $this->getMockBuilder(SubmissionDAO::class)
126 ->setMethods(array(
'getById'))
129 $monograph->setId($submissionId);
130 $monograph->setPressId(SUBMISSION_FILE_DAO_TEST_PRESS_ID);
131 $monograph->setLocale(
'en_US');
132 $submissionDao->expects($this->any())
134 ->will($this->returnValue($monograph));
139 $file1Rev1->setSubmissionLocale(
'en_US');
140 $file1Rev1->setUploaderUserId(1);
141 $file1Rev1->setCaption(
'test-caption');
142 $file1Rev1->setFileStage(SUBMISSION_FILE_PROOF);
143 $file1Rev1->setSubmissionId($submissionId);
144 $file1Rev1->setFileType(
'image/jpeg');
145 $file1Rev1->setFileSize(512);
146 $file1Rev1->setDateUploaded(
'2011-12-04 00:00:00');
147 $file1Rev1->setDateModified(
'2011-12-04 00:00:00');
148 $file1Rev1->setAssocType(ASSOC_TYPE_REVIEW_ASSIGNMENT);
149 $file1Rev1->setAssocId(5);
152 $file2Rev1->setSubmissionLocale(
'en_US');
153 $file2Rev1->setUploaderUserId(1);
154 $file2Rev1->setFileStage(SUBMISSION_FILE_PROOF);
155 $file2Rev1->setSubmissionId($submissionId);
156 $file2Rev1->setFileType(
'application/pdf');
157 $file2Rev1->setFileSize(256);
158 $file2Rev1->setDateUploaded(
'2011-12-05 00:00:00');
159 $file2Rev1->setDateModified(
'2011-12-05 00:00:00');
166 $this->_insertFile($file1Rev1,
'test artwork', SUBMISSION_FILE_DAO_TEST_ART_GENRE_ID);
167 self::assertTrue(is_a($file1Rev1,
'SubmissionArtworkFile'));
168 $this->_insertFile($file2Rev1,
'test monograph', SUBMISSION_FILE_DAO_TEST_DOC_GENRE_ID);
169 self::assertTrue(is_a($file2Rev1,
'SubmissionFile'));
173 $downcastFile = clone($file1Rev1);
174 $downcastFile->setRevision(2);
175 $downcastFile->setDateUploaded(
'2011-12-05 00:00:00');
176 $downcastFile->setDateModified(
'2011-12-05 00:00:00');
177 $file1Rev2 = $this->_insertFile($downcastFile,
'test downcast', SUBMISSION_FILE_DAO_TEST_DOC_GENRE_ID);
180 self::assertTrue(is_a($file1Rev2,
'SubmissionFile'));
186 $upcastFile = clone($file2Rev1);
187 $upcastFile->setRevision(2);
188 $file2Rev2 = $this->_insertFile($upcastFile,
'test upcast', SUBMISSION_FILE_DAO_TEST_ART_GENRE_ID);
191 self::assertTrue(is_a($file2Rev2,
'SubmissionArtworkFile'));
196 self::assertNull($file2Rev2->getCaption());
204 self::assertNull($submissionFileDao->getRevision(
null, $file1Rev1->getRevision()));
205 self::assertNull($submissionFileDao->getRevision($file1Rev1->getFileId(),
null));
206 self::assertEquals($file1Rev1, $submissionFileDao->getRevision($file1Rev1->getFileId(), $file1Rev1->getRevision()));
207 self::assertEquals($file1Rev1, $submissionFileDao->getRevision($file1Rev1->getFileId(), $file1Rev1->getRevision(), $file1Rev1->getFileStage()));
208 self::assertEquals($file1Rev1, $submissionFileDao->getRevision($file1Rev1->getFileId(), $file1Rev1->getRevision(), $file1Rev1->getFileStage(), $submissionId));
209 self::assertNull($submissionFileDao->getRevision($file1Rev1->getFileId(), $file1Rev1->getRevision(), SUBMISSION_FILE_PROOF+1));
210 self::assertNull($submissionFileDao->getRevision($file1Rev1->getFileId(), $file1Rev1->getRevision(),
null, $submissionId+1));
217 $file1Rev1->setOriginalFileName(
'updated-file-name');
218 $file1Rev1->setCaption(
'test-caption');
219 $updatedFile = $submissionFileDao->updateObject($file1Rev1);
223 $previousFilePath = $file1Rev1->getFilePath();
224 $file1Rev1->setGenreId(SUBMISSION_FILE_DAO_TEST_DOC_GENRE_ID);
225 $updatedFile = $submissionFileDao->updateObject($file1Rev1);
228 self::assertTrue(is_a($updatedFile,
'SubmissionFile'));
233 $newFilePath = $updatedFile->getFilePath();
234 self::assertNotEquals($previousFilePath, $newFilePath);
235 self::assertFileNotExists($previousFilePath);
236 self::assertFileExists($newFilePath);
240 $updatedFile->setGenreId(SUBMISSION_FILE_DAO_TEST_ART_GENRE_ID);
241 $updatedFile = $submissionFileDao->updateObject($updatedFile);
244 self::assertTrue(is_a($updatedFile,
'SubmissionArtworkFile'));
247 $file1Rev1 = $updatedFile;
254 $file1Rev2->setData(
'caption',
null);
255 self::assertNull($submissionFileDao->getLatestRevision(
null));
256 self::assertEquals($file1Rev2, $submissionFileDao->getLatestRevision($file1Rev1->getFileId()));
257 self::assertEquals($file1Rev2, $submissionFileDao->getLatestRevision($file1Rev1->getFileId(), $file1Rev1->getFileStage()));
258 self::assertEquals($file1Rev2, $submissionFileDao->getLatestRevision($file1Rev1->getFileId(), $file1Rev1->getFileStage(), $submissionId));
259 self::assertNull($submissionFileDao->getLatestRevision($file1Rev1->getFileId(), SUBMISSION_FILE_PROOF+1));
260 self::assertNull($submissionFileDao->getLatestRevision($file1Rev1->getFileId(),
null, $submissionId+1));
267 $uniqueId1_1 = $file1Rev1->getFileIdAndRevision();
268 $uniqueId1_2 = $file1Rev2->getFileIdAndRevision();
269 $uniqueId2_1 = $file2Rev1->getFileIdAndRevision();
270 $uniqueId2_2 = $file2Rev2->getFileIdAndRevision();
273 self::assertNull($submissionFileDao->getLatestRevisions(
null));
274 self::assertEquals(array($uniqueId1_2 => $file1Rev2, $uniqueId2_2 => $file2Rev2),
275 $submissionFileDao->getLatestRevisions($submissionId));
276 self::assertEquals(array($uniqueId1_2 => $file1Rev2, $uniqueId2_2 => $file2Rev2),
277 $submissionFileDao->getLatestRevisions($submissionId, SUBMISSION_FILE_PROOF));
278 self::assertEquals(array(),
279 $submissionFileDao->getLatestRevisions($submissionId+1));
280 self::assertEquals(array(),
281 $submissionFileDao->getLatestRevisions($submissionId, SUBMISSION_FILE_PROOF+1));
285 self::assertEquals(array($uniqueId1_2 => $file1Rev2, $uniqueId2_2 => $file2Rev2),
286 $submissionFileDao->getLatestRevisions($submissionId,
null, $rangeInfo));
288 self::assertEquals(array($uniqueId1_2 => $file1Rev2),
289 $submissionFileDao->getLatestRevisions($submissionId,
null, $rangeInfo));
291 self::assertEquals(array($uniqueId2_2 => $file2Rev2),
292 $submissionFileDao->getLatestRevisions($submissionId,
null, $rangeInfo));
299 self::assertNull($submissionFileDao->getAllRevisions(
null));
300 self::assertEquals(array($uniqueId1_2 => $file1Rev2, $uniqueId1_1 => $file1Rev1),
301 $submissionFileDao->getAllRevisions($file1Rev1->getFileId(), SUBMISSION_FILE_PROOF));
302 self::assertEquals(array($uniqueId1_2 => $file1Rev2, $uniqueId1_1 => $file1Rev1),
303 $submissionFileDao->getAllRevisions($file1Rev1->getFileId(), SUBMISSION_FILE_PROOF, $submissionId));
304 self::assertEquals(array(),
305 $submissionFileDao->getAllRevisions($file1Rev1->getFileId(),
null, $submissionId+1));
306 self::assertEquals(array(),
307 $submissionFileDao->getAllRevisions($file1Rev1->getFileId(), SUBMISSION_FILE_PROOF+1,
null));
314 self::assertNull($submissionFileDao->getLatestRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT,
null));
315 self::assertNull($submissionFileDao->getLatestRevisionsByAssocId(
null, 5));
316 self::assertEquals(array($uniqueId1_2 => $file1Rev2),
317 $submissionFileDao->getLatestRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5));
318 self::assertEquals(array($uniqueId1_2 => $file1Rev2),
319 $submissionFileDao->getLatestRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5,
null, SUBMISSION_FILE_PROOF));
320 self::assertEquals(array(),
321 $submissionFileDao->getLatestRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5,
null, SUBMISSION_FILE_PROOF+1));
324 self::assertNull($submissionFileDao->getAllRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT,
null));
325 self::assertNull($submissionFileDao->getAllRevisionsByAssocId(
null, 5));
326 self::assertEquals(array($uniqueId1_2 => $file1Rev2, $uniqueId1_1 => $file1Rev1),
327 $submissionFileDao->getAllRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5));
328 self::assertEquals(array($uniqueId1_2 => $file1Rev2, $uniqueId1_1 => $file1Rev1),
329 $submissionFileDao->getAllRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5, SUBMISSION_FILE_PROOF));
330 self::assertEquals(array(), $submissionFileDao->getAllRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5, SUBMISSION_FILE_PROOF+1));
337 $file1Rev3 = clone($file1Rev2);
338 $file1Rev3->setRevision(3);
339 self::assertEquals($file1Rev3, $submissionFileDao->insertObject($file1Rev3, $this->testFile));
340 $uniqueId1_3 = $file1Rev3->getFileIdAndRevision();
344 $reviewRound = $reviewRoundDao->build($submissionId, WORKFLOW_STAGE_ID_INTERNAL_REVIEW, 1);
345 $submissionFileDao->assignRevisionToReviewRound($file1Rev1->getFileId(), $file1Rev1->getRevision(), $reviewRound);
346 $submissionFileDao->assignRevisionToReviewRound($file2Rev2->getFileId(), $file2Rev2->getRevision(), $reviewRound);
353 self::assertEquals(array($uniqueId1_1 => $file1Rev1, $uniqueId2_2 => $file2Rev2),
354 $submissionFileDao->getRevisionsByReviewRound($reviewRound));
361 self::assertEquals(array($uniqueId1_3 => $file1Rev3, $uniqueId2_2 => $file2Rev2),
362 $submissionFileDao->getLatestRevisionsByReviewRound($reviewRound,
null));
368 $submissionFileDao->deleteAllRevisionsByReviewRound($reviewRound->getId());
369 self::assertEquals(array(),
370 $submissionFileDao->getRevisionsByReviewRound($reviewRound));
378 self::assertEquals(1, $submissionFileDao->deleteRevision($file1Rev1));
379 self::assertNull($submissionFileDao->getRevision($file1Rev1->getFileId(), $file1Rev1->getRevision()));
381 self::assertEquals($file1Rev1, $submissionFileDao->insertObject($file1Rev1, $this->testFile));
388 self::assertEquals(1, $submissionFileDao->deleteLatestRevisionById($file1Rev1->getFileId()));
389 self::assertTrue(is_a($submissionFileDao->getRevision($file1Rev1->getFileId(), $file1Rev1->getRevision()),
'SubmissionArtworkFile'));
390 self::assertNull($submissionFileDao->getRevision($file1Rev3->getFileId(), $file1Rev3->getRevision()));
397 self::assertEquals(2, $submissionFileDao->deleteAllRevisionsById($file1Rev1->getFileId()));
398 self::assertTrue(is_a($submissionFileDao->getRevision($file2Rev1->getFileId(), $file2Rev1->getRevision()),
'SubmissionFile'));
399 self::assertNull($submissionFileDao->getRevision($file1Rev1->getFileId(), $file1Rev1->getRevision()));
400 self::assertNull($submissionFileDao->getRevision($file1Rev2->getFileId(), $file1Rev2->getRevision()));
402 self::assertEquals($file1Rev1, $submissionFileDao->insertObject($file1Rev1, $this->testFile));
403 self::assertEquals($file1Rev2, $submissionFileDao->insertObject($file1Rev2, $this->testFile));
410 self::assertEquals(2, $submissionFileDao->deleteAllRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5));
411 self::assertTrue(is_a($submissionFileDao->getRevision($file2Rev1->getFileId(), $file2Rev1->getRevision()),
'SubmissionFile'));
412 self::assertNull($submissionFileDao->getRevision($file1Rev1->getFileId(), $file1Rev1->getRevision()));
413 self::assertNull($submissionFileDao->getRevision($file1Rev2->getFileId(), $file1Rev2->getRevision()));
415 self::assertEquals($file1Rev1, $submissionFileDao->insertObject($file1Rev1, $this->testFile));
416 self::assertEquals($file1Rev2, $submissionFileDao->insertObject($file1Rev2, $this->testFile));
423 self::assertEquals(4, $submissionFileDao->deleteAllRevisionsBySubmissionId($submissionId));
424 self::assertNull($submissionFileDao->getRevision($file2Rev1->getFileId(), $file2Rev1->getRevision()));
425 self::assertNull($submissionFileDao->getRevision($file1Rev1->getFileId(), $file1Rev1->getRevision()));
426 self::assertNull($submissionFileDao->getRevision($file1Rev2->getFileId(), $file1Rev2->getRevision()));
434 $file1Rev1->setFileId(
null);
435 $file1Rev1->setRevision(
null);
436 $file1Rev1 = $submissionFileDao->insertObject($file1Rev1, $this->testFile);
438 $file1Rev2->setFileId(
null);
439 $file1Rev2->setRevision(
null);
440 $file1Rev2->setGenreId(SUBMISSION_FILE_DAO_TEST_DOC_GENRE_ID);
441 $file1Rev2 = $submissionFileDao->insertObject($file1Rev2, $this->testFile);
444 self::assertNotEquals($file1Rev1->getFileId(), $file1Rev2->getFileId());
445 self::assertNotEquals($file1Rev1->getGenreId(), $file1Rev2->getGenreId());
446 self::assertEquals(1, $submissionFileDao->getLatestRevisionNumber($file1Rev1->getFileId()));
447 self::assertEquals(1, $submissionFileDao->getLatestRevisionNumber($file1Rev2->getFileId()));
454 $file1Rev2 = $submissionFileDao->setAsLatestRevision($file1Rev1->getFileId(), $file1Rev2->getFileId(),
455 $file1Rev1->getSubmissionId(), $file1Rev1->getFileStage());
458 self::assertEquals($file1Rev1->getFileId(), $file1Rev2->getFileId());
459 self::assertEquals($file1Rev1->getGenreId(), $file1Rev2->getGenreId());
460 self::assertEquals(1, $file1Rev1->getRevision());
461 self::assertEquals(2, $submissionFileDao->getLatestRevisionNumber($file1Rev1->getFileId()));
462 $submissionFiles = $submissionFileDao->getAllRevisions($file1Rev1->getFileId());
463 self::assertEquals(2, count($submissionFiles));
464 foreach($submissionFiles as $submissionFile) {
465 self::assertTrue(is_a($submissionFile,
'SubmissionArtworkFile'));
468 $this->_cleanFiles($submissionId);
472 $submissionDao->deleteById($submissionId);
480 $fileObject = $submissionFileDao->newDataObjectByGenreId(SUBMISSION_FILE_DAO_TEST_DOC_GENRE_ID);
481 self::assertTrue(is_a($fileObject,
'SubmissionFile'));
484 $fileObject = $submissionFileDao->newDataObjectByGenreId(SUBMISSION_FILE_DAO_TEST_ART_GENRE_ID);
485 self::assertTrue(is_a($fileObject,
'SubmissionArtworkFile'));
499 case SUBMISSION_FILE_DAO_TEST_DOC_GENRE_ID:
500 $category = GENRE_CATEGORY_DOCUMENT;
501 $name =
'Document Genre';
504 case SUBMISSION_FILE_DAO_TEST_ART_GENRE_ID:
505 $category = GENRE_CATEGORY_ARTWORK;
506 $name =
'Artwork Genre';
512 $genre =
new Genre();
514 $press = $request->getContext();
515 $genre->setContextId($press->getId());
516 $genre->setId($genreId);
517 $genre->setName($name,
'en_US');
518 $genre->setCategory($category);
534 self::assertEquals($sourceFile->getFileStage(), $targetFile->getFileStage());
535 self::assertEquals($sourceFile->getSubmissionId(), $targetFile->getSubmissionId());
536 self::assertEquals($sourceFile->getFileType(), $targetFile->getFileType());
537 self::assertEquals($sourceFile->getFileSize(), $targetFile->getFileSize());
538 self::assertEquals($sourceFile->getDateUploaded(), $targetFile->getDateUploaded());
539 self::assertEquals($sourceFile->getDateModified(), $targetFile->getDateModified());
540 self::assertEquals($sourceFile->getAssocType(), $targetFile->getAssocType());
541 self::assertEquals($sourceFile->getAssocId(), $targetFile->getAssocId());
551 private function _insertFile($file, $testContent, $genreId) {
553 file_put_contents($this->testFile, $testContent);
554 $file->setGenreId($genreId);
558 $file = $submissionFileDao->insertObject($file, $this->testFile);
561 self::assertFileExists($file->getFilePath());
562 self::assertEquals($testContent, file_get_contents($file->getFilePath()));
570 private function _cleanFiles($submissionId =
null) {
573 if (!$submissionId) $submissionId = SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID;
574 $submissionFileDao->deleteAllRevisionsBySubmissionId($submissionId);