Open Monograph Press  3.3.0
SubmissionFileDAOTest.php
1 <?php
2 
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');
28 
29 // Define test ids.
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);
34 
35 
36 // Define a temp file location for testing.
37 define('TMP_FILES', '/tmp');
38 
40  private $testFile;
41 
42  protected function setUp() : void {
43  // Create a test file on the file system.
44  $this->testFile = tempnam(TMP_FILES, 'SubmissionFile');
45 
46  // Mock a press
47  import('classes.press.Press');
48  $press = new Press();
49  $press->setPrimaryLocale('en_US');
50  $press->setPath('press-path');
51  $press->setId(SUBMISSION_FILE_DAO_TEST_PRESS_ID);
52 
53  // Mock a request
54  $mockRequest = $this->getMockBuilder(PKPRequest::class)
55  ->setMethods(array('getContext'))
56  ->getMock();
57  $mockRequest->expects($this->any())
58  ->method('getContext')
59  ->will($this->returnValue($press));
60  Registry::get('request', true, $mockRequest);
61 
62  // Register a mock monograph DAO.
63  $submissionDao = $this->getMockBuilder(SubmissionDAO::class)
64  ->setMethods(array('getById'))
65  ->getMock();
66  $monograph = new Submission();
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())
71  ->method('getById')
72  ->will($this->returnValue($monograph));
73  DAORegistry::registerDAO('SubmissionDAO', $submissionDao);
74 
75  // Register a mock genre DAO.
76  $genreDao = $this->getMockBuilder(GenreDAO::class)
77  ->setMethods(array('getById'))
78  ->getMock();
79  DAORegistry::registerDAO('GenreDAO', $genreDao);
80  $genreDao->expects($this->any())
81  ->method('getById')
82  ->will($this->returnCallback(array($this, 'getTestGenre')));
83 
84  $this->_cleanFiles();
85 
86  $request = Application::get()->getRequest();
87  if (is_null($request->getRouter())) {
88  $router = new PKPRouter();
89  $request->setRouter($router);
90  }
91  }
92 
93  protected function tearDown() : void {
94  if (file_exists($this->testFile)) unlink($this->testFile);
95  $this->_cleanFiles();
96  }
97 
105  public function testSubmissionFileCrud() {
106  //
107  // Create test data.
108  //
109  // Create a submission
110  $submissionDao = DAORegistry::getDAO('SubmissionDAO');
111  $submission = $submissionDao->newDataObject();
112  $submission->setPressId(SUBMISSION_FILE_DAO_TEST_PRESS_ID);
113  $submission->setLocale('en_US');
114  $submissionId = $submissionDao->insertObject($submission);
115 
116  $publicationDao = DAORegistry::getDAO('PublicationDAO');
117  $publication = $publicationDao->newDataObject();
118  $publication->setData('submissionId', $submissionId);
119  $publication->setData('locale', 'en_US');
120  $publicationDao->insertObject($publication);
121 
122  $submission->setData('currentPublicationId', $publication->getId());
123  $submissionDao->updateObject($submission);
124 
125  $submissionDao = $this->getMockBuilder(SubmissionDAO::class)
126  ->setMethods(array('getById'))
127  ->getMock();
128  $monograph = new Submission();
129  $monograph->setId($submissionId);
130  $monograph->setPressId(SUBMISSION_FILE_DAO_TEST_PRESS_ID);
131  $monograph->setLocale('en_US');
132  $submissionDao->expects($this->any())
133  ->method('getById')
134  ->will($this->returnValue($monograph));
135  DAORegistry::registerDAO('SubmissionDAO', $submissionDao);
136 
137  // Create two test files, one monograph file one artwork file.
138  $file1Rev1 = new SubmissionArtworkFile();
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);
150 
151  $file2Rev1 = new SubmissionFile();
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');
160 
161 
162  //
163  // insertObject()
164  //
165  // Persist the two test files.
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'));
170 
171  // Persist a second revision of the artwork file but this time with a
172  // document genre so that it needs to be downcast for insert.
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);
178 
179  // Test whether the target type is correct.
180  self::assertTrue(is_a($file1Rev2, 'SubmissionFile'));
181  // Test that no data on the target interface has been lost.
182  $this->_compareFiles($downcastFile, $file1Rev2);
183 
184  // Persist a second revision of the monograph file but this time with an
185  // artwork genre so that it needs to be upcast for insert.
186  $upcastFile = clone($file2Rev1);
187  $upcastFile->setRevision(2);
188  $file2Rev2 = $this->_insertFile($upcastFile, 'test upcast', SUBMISSION_FILE_DAO_TEST_ART_GENRE_ID);
189 
190  // Test whether the target type is correct.
191  self::assertTrue(is_a($file2Rev2, 'SubmissionArtworkFile'));
192  // Test that no data on the target interface has been lost.
193  $this->_compareFiles($upcastFile, $file2Rev2);
194  // Make sure that other fields contain default values as
195  // they are empty on upcast.
196  self::assertNull($file2Rev2->getCaption());
197 
198 
199  //
200  // getRevision()
201  //
202  // Retrieve the first revision of the artwork file.
203  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
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));
211 
212 
213  //
214  // updateObject()
215  //
216  // Update the artwork file.
217  $file1Rev1->setOriginalFileName('updated-file-name');
218  $file1Rev1->setCaption('test-caption');
219  $updatedFile = $submissionFileDao->updateObject($file1Rev1);
220 
221  // Now change the genre so that the canonical file name
222  // and the file implementation will have to change.
223  $previousFilePath = $file1Rev1->getFilePath();
224  $file1Rev1->setGenreId(SUBMISSION_FILE_DAO_TEST_DOC_GENRE_ID);
225  $updatedFile = $submissionFileDao->updateObject($file1Rev1);
226 
227  // Test whether the target type is correct.
228  self::assertTrue(is_a($updatedFile, 'SubmissionFile'));
229  // Test that no data on the target interface has been lost.
230  $this->_compareFiles($file1Rev1, $updatedFile);
231 
232  // Test the new file path and files.
233  $newFilePath = $updatedFile->getFilePath();
234  self::assertNotEquals($previousFilePath, $newFilePath);
235  self::assertFileNotExists($previousFilePath);
236  self::assertFileExists($newFilePath);
237 
238  // Now change the genre back so that we can test casting
239  // in the other direction.
240  $updatedFile->setGenreId(SUBMISSION_FILE_DAO_TEST_ART_GENRE_ID);
241  $updatedFile = $submissionFileDao->updateObject($updatedFile);
242 
243  // Test whether the target type is correct.
244  self::assertTrue(is_a($updatedFile, 'SubmissionArtworkFile'));
245  // Test that no data on the target interface has been lost.
246  $this->_compareFiles($file1Rev1, $updatedFile);
247  $file1Rev1 = $updatedFile;
248 
249 
250  //
251  // getLatestRevision()
252  //
253  // Retrieve the latest revision of file 1.
254  $file1Rev2->setData('caption', null); // Clear out caption for comparison
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));
261 
262 
263  //
264  // getLatestRevisions()
265  //
266  // Calculate the unique ids of the test files.
267  $uniqueId1_1 = $file1Rev1->getFileIdAndRevision();
268  $uniqueId1_2 = $file1Rev2->getFileIdAndRevision();
269  $uniqueId2_1 = $file2Rev1->getFileIdAndRevision();
270  $uniqueId2_2 = $file2Rev2->getFileIdAndRevision();
271 
272  // Retrieve the latest revisions of both files.
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));
282 
283  // Test paging.
284  $rangeInfo = new DBResultRange(2, 1);
285  self::assertEquals(array($uniqueId1_2 => $file1Rev2, $uniqueId2_2 => $file2Rev2),
286  $submissionFileDao->getLatestRevisions($submissionId, null, $rangeInfo));
287  $rangeInfo = new DBResultRange(1, 1);
288  self::assertEquals(array($uniqueId1_2 => $file1Rev2),
289  $submissionFileDao->getLatestRevisions($submissionId, null, $rangeInfo));
290  $rangeInfo = new DBResultRange(1, 2);
291  self::assertEquals(array($uniqueId2_2 => $file2Rev2),
292  $submissionFileDao->getLatestRevisions($submissionId, null, $rangeInfo));
293 
294 
295  //
296  // getAllRevisions()
297  //
298  // Retrieve all revisions of file 1.
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));
308 
309 
310  //
311  // getLatestRevisionsByAssocId()
312  //
313  // Retrieve the latest revisions by association.
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));
322 
323  // Retrieve all revisions by association.
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));
331 
332 
333  //
334  // assignRevisionToReviewRound()
335  //
336  // Insert one more revision to test review round file assignments.
337  $file1Rev3 = clone($file1Rev2);
338  $file1Rev3->setRevision(3);
339  self::assertEquals($file1Rev3, $submissionFileDao->insertObject($file1Rev3, $this->testFile));
340  $uniqueId1_3 = $file1Rev3->getFileIdAndRevision();
341 
342  // Insert review round file assignments.
343  $reviewRoundDao = DAORegistry::getDAO('ReviewRoundDAO');
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);
347 
348 
349  //
350  // getRevisionsByReviewRound()
351  //
352  // Retrieve assigned review round files by review stage id and round.
353  self::assertEquals(array($uniqueId1_1 => $file1Rev1, $uniqueId2_2 => $file2Rev2),
354  $submissionFileDao->getRevisionsByReviewRound($reviewRound));
355 
356 
357  //
358  // getLatestRevisionsByReviewRound()
359  //
360  // Retrieve latest revisions of review round files
361  self::assertEquals(array($uniqueId1_3 => $file1Rev3, $uniqueId2_2 => $file2Rev2),
362  $submissionFileDao->getLatestRevisionsByReviewRound($reviewRound, null));
363 
364 
365  //
366  // deleteAllRevisionsByReviewRound()
367  //
368  $submissionFileDao->deleteAllRevisionsByReviewRound($reviewRound->getId());
369  self::assertEquals(array(),
370  $submissionFileDao->getRevisionsByReviewRound($reviewRound));
371 
372 
373  //
374  // deleteRevision() and deleteRevisionById()
375  //
376  // Delete the first revision of file1.
377  // NB: This implicitly tests deletion by ID.
378  self::assertEquals(1, $submissionFileDao->deleteRevision($file1Rev1));
379  self::assertNull($submissionFileDao->getRevision($file1Rev1->getFileId(), $file1Rev1->getRevision()));
380  // Re-insert the file for the next test.
381  self::assertEquals($file1Rev1, $submissionFileDao->insertObject($file1Rev1, $this->testFile));
382 
383 
384  //
385  // deleteLatestRevisionById()
386  //
387  // Delete the latest revision of file1.
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()));
391 
392 
393  //
394  // deleteAllRevisionsById()
395  //
396  // Delete all revisions of file1.
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()));
401  // Re-insert the files for the next test.
402  self::assertEquals($file1Rev1, $submissionFileDao->insertObject($file1Rev1, $this->testFile));
403  self::assertEquals($file1Rev2, $submissionFileDao->insertObject($file1Rev2, $this->testFile));
404 
405 
406  //
407  // deleteAllRevisionsByAssocId()
408  //
409  // Delete all revisions by assoc id.
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()));
414  // Re-insert the files for the next test.
415  self::assertEquals($file1Rev1, $submissionFileDao->insertObject($file1Rev1, $this->testFile));
416  self::assertEquals($file1Rev2, $submissionFileDao->insertObject($file1Rev2, $this->testFile));
417 
418 
419  //
420  // deleteAllRevisionsBySubmissionId()
421  //
422  // Delete all revisions by submission id.
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()));
427 
428 
429  //
430  // insertObject() for new revisions
431  //
432  // Test insertion of new revisions.
433  // Create two files with different file ids.
434  $file1Rev1->setFileId(null);
435  $file1Rev1->setRevision(null);
436  $file1Rev1 = $submissionFileDao->insertObject($file1Rev1, $this->testFile);
437 
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);
442 
443  // Test the file ids, revisions and identifying fields.
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()));
448 
449 
450  //
451  // setAsLatestRevision()
452  //
453  // Now make the second file a revision of the first.
454  $file1Rev2 = $submissionFileDao->setAsLatestRevision($file1Rev1->getFileId(), $file1Rev2->getFileId(),
455  $file1Rev1->getSubmissionId(), $file1Rev1->getFileStage());
456 
457  // And test the file ids, revisions, identifying fields and types again.
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'));
466  }
467 
468  $this->_cleanFiles($submissionId);
469 
470  // Delete the test submission
471  $submissionDao = DAORegistry::getDAO('SubmissionDAO');
472  $submissionDao->deleteById($submissionId);
473  }
474 
476  // Instantiate the SUT.
477  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
478 
479  // Test whether the newDataObjectByGenreId method will return a monograph file.
480  $fileObject = $submissionFileDao->newDataObjectByGenreId(SUBMISSION_FILE_DAO_TEST_DOC_GENRE_ID);
481  self::assertTrue(is_a($fileObject, 'SubmissionFile'));
482 
483  // Now set an artwork genre and try again.
484  $fileObject = $submissionFileDao->newDataObjectByGenreId(SUBMISSION_FILE_DAO_TEST_ART_GENRE_ID);
485  self::assertTrue(is_a($fileObject, 'SubmissionArtworkFile'));
486  }
487 
488  //
489  // Public helper methods
490  //
496  public function getTestGenre($genreId) {
497  // Create a test genre.
498  switch($genreId) {
499  case SUBMISSION_FILE_DAO_TEST_DOC_GENRE_ID:
500  $category = GENRE_CATEGORY_DOCUMENT;
501  $name = 'Document Genre';
502  break;
503 
504  case SUBMISSION_FILE_DAO_TEST_ART_GENRE_ID:
505  $category = GENRE_CATEGORY_ARTWORK;
506  $name = 'Artwork Genre';
507  break;
508 
509  default:
510  self::fail();
511  }
512  $genre = new Genre();
513  $request = Application::get()->getRequest();
514  $press = $request->getContext();
515  $genre->setContextId($press->getId());
516  $genre->setId($genreId);
517  $genre->setName($name, 'en_US');
518  $genre->setCategory($category);
519  return $genre;
520  }
521 
522 
523  //
524  // Private helper methods
525  //
533  function _compareFiles($sourceFile, $targetFile) {
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());
542  }
543 
551  private function _insertFile($file, $testContent, $genreId) {
552  // Prepare the test.
553  file_put_contents($this->testFile, $testContent);
554  $file->setGenreId($genreId);
555 
556  // Insert the file.
557  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */
558  $file = $submissionFileDao->insertObject($file, $this->testFile);
559 
560  // Test the outcome.
561  self::assertFileExists($file->getFilePath());
562  self::assertEquals($testContent, file_get_contents($file->getFilePath()));
563 
564  return $file;
565  }
566 
570  private function _cleanFiles($submissionId = null) {
571  // Delete the test submission's files.
572  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */
573  if (!$submissionId) $submissionId = SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID;
574  $submissionFileDao->deleteAllRevisionsBySubmissionId($submissionId);
575  }
576 }
577 
SubmissionFileDAOTest\testSubmissionFileCrud
testSubmissionFileCrud()
Definition: SubmissionFileDAOTest.php:105
DBResultRange
Container class for range information when retrieving a result set.
Definition: DBResultRange.inc.php:17
SubmissionFileDAOTest\getTestGenre
getTestGenre($genreId)
Definition: SubmissionFileDAOTest.php:496
Submission
Class for a Submission.
Definition: Submission.inc.php:27
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
SubmissionFile
Submission file class.
Definition: SubmissionFile.inc.php:35
Genre
Basic class describing a genre.
Definition: Genre.inc.php:21
SubmissionFileDAOTest\tearDown
tearDown()
Definition: SubmissionFileDAOTest.php:93
SubmissionFileDAOTest\testNewDataObjectByGenreId
testNewDataObjectByGenreId()
Definition: SubmissionFileDAOTest.php:475
SubmissionArtworkFile
Artwork file class.
Definition: SubmissionArtworkFile.inc.php:19
Registry\get
static & get($key, $createIfEmpty=false, $createWithDefault=null)
Definition: Registry.inc.php:35
DAORegistry\registerDAO
static registerDAO($name, $dao)
Definition: DAORegistry.inc.php:40
SubmissionFileDAOTest\_compareFiles
_compareFiles($sourceFile, $targetFile)
Definition: SubmissionFileDAOTest.php:533
PKPRouter
Basic router class that has functionality common to all routers.
Definition: PKPRouter.inc.php:57
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
Press
Basic class describing a press.
Definition: Press.inc.php:23
SubmissionFileDAOTest\setUp
setUp()
Definition: SubmissionFileDAOTest.php:42
DatabaseTestCase
Base class for unit tests that require database support. The schema TestName.setUp....
Definition: DatabaseTestCase.inc.php:23
SubmissionFileDAOTest
Test class for SubmissionFileDAO.
Definition: SubmissionFileDAOTest.php:39