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