1<?php 2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project 3// 4// All Rights Reserved. See copyright.txt for details and a complete list of authors. 5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. 6// $Id$ 7 8/** 9 * @group unit 10 * 11 */ 12 13use Tiki\FileGallery\File; 14use Tiki\FileGallery\FileDraft; 15use Tiki\FileGallery\SaveHandler; 16 17class Tiki_FileGallery_Manipulator_SaveHandlerTest extends TikiTestCase 18{ 19 function setUp() { 20 global $prefs; 21 $this->oldPrefs = $prefs; 22 $prefs['fgal_use_db'] = 'y'; 23 $prefs['feature_file_galleries_save_draft'] = 'n'; 24 $prefs['fgal_keep_fileId'] = 'y'; 25 parent::setUp(); 26 $this->cleanup(); 27 } 28 29 function tearDown() { 30 global $prefs; 31 $prefs = $this->oldPrefs; 32 $this->cleanup(); 33 } 34 35 function testFileCreation() 36 { 37 $file = new File(['filename' => 'test.zip', 'data' => 'test123', 'galleryId' => 222]); 38 $filegallib = TikiLib::lib('filegal'); 39 40 $filesTable = $filegallib->table('tiki_files'); 41 $this->assertFalse($filesTable->fetchOne('fileId', ['filename' => $file->filename])); 42 43 $saveHandler = new SaveHandler($file); 44 $fileId = $saveHandler->save(); 45 46 $this->assertNotEmpty($fileId); 47 $this->assertEquals($fileId, $filesTable->fetchOne('fileId', ['filename' => $file->filename])); 48 $this->assertEquals($file->data, $filesTable->fetchOne('data', ['filename' => $file->filename])); 49 } 50 51 function testFileUpdatePlain() { 52 global $prefs; 53 54 $prefs['feature_file_galleries_save_draft'] = 'n'; 55 56 $filegallib = TikiLib::lib('filegal'); 57 $filesTable = $filegallib->table('tiki_files'); 58 59 $fileId = $this->createGalleryAndFile(['archives' => -1]); 60 $file = File::id($fileId); 61 62 $file->setParam('data', 'changed'); 63 $file->setParam('filename', 'test.txt'); 64 65 $saveHandler = new SaveHandler($file); 66 $fileId = $saveHandler->save(); 67 68 $this->assertEquals('test.txt', $filesTable->fetchOne('filename', ['fileId' => $fileId])); 69 $this->assertEquals('changed', $filesTable->fetchOne('data', ['fileId' => $fileId])); 70 } 71 72 function testFileArchiveNewId() { 73 global $prefs; 74 75 $prefs['feature_file_galleries_save_draft'] = 'n'; 76 $prefs['fgal_keep_fileId'] = 'n'; 77 78 $filegallib = TikiLib::lib('filegal'); 79 $filesTable = $filegallib->table('tiki_files'); 80 81 $origFileId = $this->createGalleryAndFile(['archives' => 0]); 82 $file = File::id($origFileId); 83 84 $file->setParam('data', 'changed'); 85 86 $saveHandler = new SaveHandler($file); 87 $fileId = $saveHandler->save(); 88 89 $this->assertEquals('test123', $filesTable->fetchOne('data', ['fileId' => $origFileId])); 90 $this->assertEquals('changed', $filesTable->fetchOne('data', ['fileId' => $fileId])); 91 $this->assertNotEquals($fileId, $origFileId); 92 } 93 94 function testFileArchiveKeepId() { 95 global $prefs; 96 97 $prefs['feature_file_galleries_save_draft'] = 'n'; 98 $prefs['fgal_keep_fileId'] = 'y'; 99 100 $filegallib = TikiLib::lib('filegal'); 101 $filesTable = $filegallib->table('tiki_files'); 102 103 $origFileId = $this->createGalleryAndFile(['archives' => 0]); 104 $file = File::id($origFileId); 105 106 $file->setParam('data', 'changed'); 107 108 $saveHandler = new SaveHandler($file); 109 $fileId = $saveHandler->save(); 110 111 $this->assertEquals('changed', $filesTable->fetchOne('data', ['fileId' => $origFileId])); 112 $this->assertEquals('test123', $filesTable->fetchOne('data', ['archiveId' => $fileId])); 113 } 114 115 function testFileDraftAndValidation() { 116 global $prefs; 117 118 $prefs['feature_file_galleries_save_draft'] = 'y'; 119 120 $filegallib = TikiLib::lib('filegal'); 121 $filesTable = $filegallib->table('tiki_files'); 122 $draftsTable = $filegallib->table('tiki_file_drafts'); 123 124 $fileId = $this->createGalleryAndFile(['archives' => 0]); 125 $file = File::id($fileId); 126 127 $this->assertEmpty($draftsTable->fetchOne('data', ['fileId' => $fileId])); 128 129 $file->setParam('data', 'changed'); 130 131 $saveHandler = new SaveHandler($file); 132 $saveHandler->save(); 133 134 $this->assertEquals('changed', $draftsTable->fetchOne('data', ['fileId' => $fileId])); 135 $this->assertEquals('test123', $filesTable->fetchOne('data', ['fileId' => $fileId])); 136 137 $filegallib->validate_draft($fileId); 138 139 $this->assertEquals('changed', $filesTable->fetchOne('data', ['fileId' => $fileId])); 140 $this->assertEmpty($draftsTable->fetchOne('data', ['fileId' => $fileId])); 141 } 142 143 private function createGalleryAndFile($params) { 144 global $user; 145 146 $galleryId = TikiLib::lib('filegal')->table('tiki_file_galleries')->insert( 147 array_merge([ 148 'name' => 'Test Gallery', 149 'type' => 'default' 150 ], $params) 151 ); 152 $fileId = TikiLib::lib('filegal')->table('tiki_files')->insert([ 153 'filename' => 'test.zip', 154 'data' => 'test123', 155 'galleryId' => $galleryId, 156 'created' => time(), 157 'user' => $user 158 ]); 159 160 return $fileId; 161 } 162 163 private function cleanup() { 164 $filegallib = TikiLib::lib('filegal'); 165 $filegallib->table('tiki_files')->deleteMultiple([]); 166 $filegallib->table('tiki_file_drafts')->deleteMultiple([]); 167 $filegallib->table('tiki_file_galleries')->deleteMultiple( 168 ['parentId' => $filegallib->table('tiki_file_galleries')->greaterThan(0)] 169 ); 170 $filegallib->clearLoadedGalleryDefinitions(); 171 } 172} 173