3
* Gallery - a web based photo album viewer and editor
4
* Copyright (C) 2000-2007 Bharat Mediratta
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or (at
9
* your option) any later version.
11
* This program is distributed in the hope that it will be useful, but
12
* WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22
* AdminRewrite controller tests
26
* @author Douglas Cau <douglas@cau.se>
27
* @version $Revision: 15513 $
29
class AdminRewriteControllerTest extends GalleryControllerTestCase {
30
function AdminRewriteControllerTest($methodName) {
31
$this->GalleryControllerTestCase($methodName, 'rewrite.AdminRewrite');
38
$ret = $this->_markPluginParametersForCleanup('module', 'rewrite');
40
print $ret->getAsHtml();
41
return $this->failWithStatus($ret);
44
/* Set up our environment */
45
foreach (array('parserId' => 'adminrewritemock',
46
'shortUrls' => serialize(array()),
47
'activeRules' => serialize(array()),
48
'allowEmptyReferer' => '0')
50
$ret = GalleryCoreApi::setPluginParameter('module', 'rewrite', $key, $value);
52
print $ret->getAsHtml();
53
return $this->failWithStatus($ret);
57
/* Make sure we use the mock parser */
58
GalleryCoreApi::requireOnce('modules/rewrite/classes/RewriteHelper.class');
59
list ($ret, $parser) = RewriteHelper::getRewriteParser(true);
61
print $ret->getAsHtml();
62
return $this->failWithStatus($ret);
64
$this->assertEquals('adminrewritemock', $parser->getParserId(), 'parserId');
66
/* Set up our mock platform */
67
$this->_platform = new AdminRewriteMockPlatform();
68
$gallery->setPlatform($this->_platform);
70
/* Register a new module */
71
GalleryDataCache::reset();
72
list ($ret, $this->_module) = GalleryCoreApi::loadPlugin('module', 'adminrewritemock');
74
print $ret->getAsHtml();
75
return $this->failWithStatus($ret);
79
$ret = $this->_module->installOrUpgrade();
81
print $ret->getAsHtml();
82
return $this->failWithStatus($ret);
85
/* Activate the module */
86
list ($ret, $redirect) = $this->_module->activate(false);
88
print $ret->getAsHtml();
89
return $this->failWithStatus($ret);
94
list ($ret, $redirect) = $this->_module->deactivate(false);
96
$this->failWithStatus($ret);
99
$ret = GalleryCoreApi::removePlugin('module', 'adminrewritemock');
101
$this->failWithStatus($ret);
107
function testRefresh() {
108
GalleryUtilities::putRequestVariable('form[action][refresh]', 1);
110
$results = $this->handleRequest();
111
$this->assertEquals(array('redirect' => array('view' => 'core.SiteAdmin',
112
'subView' => 'rewrite.AdminRewrite',
115
'status' => array()),
116
$results, 'handleRequest');
119
function testSaveDefaultRules() {
120
GalleryUtilities::putRequestVariable('form[action][rules]', 1);
121
GalleryUtilities::putRequestVariable('form[rules][rewrite][0][active]', 1);
122
GalleryUtilities::putRequestVariable('form[rules][rewrite][0][pattern]', 'uv/%path%');
123
GalleryUtilities::putRequestVariable('form[rules][rewrite][1][active]', 1);
124
GalleryUtilities::putRequestVariable('form[rules][rewrite][1][pattern]',
125
'ud/%itemId%-%serialNumber%/%fileName%');
127
$results = $this->handleRequest();
128
$this->assertEquals(array('redirect' => array('view' => 'core.SiteAdmin',
129
'subView' => 'rewrite.AdminRewrite',
132
'status' => array('saved' => 1)),
133
$results, 'handleRequest');
135
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
138
return $this->failWithStatus($ret);
141
$expected['rewrite'][0] = array('pattern' => 'uv/%path%');
142
$expected['rewrite'][1] = array('pattern' => 'ud/%itemId%-%serialNumber%/%fileName%');
143
$this->assertEquals($expected, unserialize($value), 'activeRules');
145
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
148
return $this->failWithStatus($ret);
150
$expected = array(array('match' => array('view' => 'core.ShowItem'),
151
'pattern' => 'uv/%path%',
152
'functions' => array('path' => array('rewrite', 'RewriteSimpleHelper', 'parsePath'),
153
'page' => array('rewrite', 'RewriteSimpleHelper', 'parsePage'),
154
'language' => array('rewrite', 'RewriteSimpleHelper', 'parseLanguage')),
155
'onLoad' => array('rewrite', 'RewriteSimpleHelper', 'loadItemIdFromPath')),
156
array('match' => array('view' => 'core.DownloadItem'),
157
'pattern' => 'ud/%itemId%-%serialNumber%/%fileName%',
158
'functions' => array('fileName' => array('rewrite', 'RewriteSimpleHelper',
160
'serialNumber' => array('rewrite', 'RewriteSimpleHelper',
161
'parseSerialNumber'))));
162
$this->assertEquals($expected, unserialize($value), 'shortUrls');
165
function testSaveNoRules() {
166
GalleryUtilities::putRequestVariable('form[action][rules]', 1);
168
$results = $this->handleRequest();
169
$this->assertEquals(array('redirect' => array('view' => 'core.SiteAdmin',
170
'subView' => 'rewrite.AdminRewrite',
173
'status' => array('saved' => 1)),
174
$results, 'handleRequest');
176
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
179
return $this->failWithStatus($ret);
181
$this->assertEquals(array(), unserialize($value), 'activeRules');
183
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
186
return $this->failWithStatus($ret);
188
$this->assertEquals(array(), unserialize($value), 'shortUrls');
191
function testSaveDupeConditions() {
192
GalleryUtilities::putRequestVariable('form[action][rules]', true);
193
GalleryUtilities::putRequestVariable('form[rules][adminrewritemock][3][active]', true);
194
GalleryUtilities::putRequestVariable('form[rules][adminrewritemock][4][active]', true);
196
$results = $this->handleRequest();
197
$this->assertEquals(array('delegate' => array('view' => 'core.SiteAdmin',
198
'subView' => 'rewrite.AdminRewrite',
201
'form[error][conditions][dupe][adminrewritemock][3]',
202
'form[error][conditions][dupe][adminrewritemock][4]'),
203
'status' => array()), $results, 'handleRequest');
205
list ($ret, $value) = GalleryCoreApi::getPluginParameter(
206
'module', 'rewrite', 'activeRules');
208
return $this->failWithStatus($ret);
210
$this->assertEquals(array(), unserialize($value), 'activeRules');
212
list ($ret, $value) = GalleryCoreApi::getPluginParameter(
213
'module', 'rewrite', 'shortUrls');
215
return $this->failWithStatus($ret);
217
$this->assertEquals(array(), unserialize($value), 'shortUrls');
220
function testSaveEmptyPattern() {
221
GalleryUtilities::putRequestVariable('form[action][rules]', 1);
222
GalleryUtilities::putRequestVariable('form[rules][rewrite][0][active]', 1);
223
GalleryUtilities::putRequestVariable('form[rules][rewrite][0][pattern]', '');
225
$results = $this->handleRequest();
226
$this->assertEquals(array('delegate' => array('view' => 'core.SiteAdmin',
227
'subView' => 'rewrite.AdminRewrite',
229
'error' => array('form[error][pattern][empty][rewrite][0]'),
230
'status' => array()),
231
$results, 'handleRequest');
233
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
236
return $this->failWithStatus($ret);
238
$this->assertEquals(array(), unserialize($value), 'activeRules');
240
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
243
return $this->failWithStatus($ret);
245
$this->assertEquals(array(), unserialize($value), 'shortUrls');
248
function testSaveDupePattern() {
249
GalleryUtilities::putRequestVariable('form[action][rules]', 1);
250
GalleryUtilities::putRequestVariable('form[rules][rewrite][0][active]', 1);
251
GalleryUtilities::putRequestVariable('form[rules][rewrite][0][pattern]', 'dupe/');
252
GalleryUtilities::putRequestVariable('form[rules][rewrite][1][active]', 1);
253
GalleryUtilities::putRequestVariable('form[rules][rewrite][1][pattern]', 'dupe/');
255
$results = $this->handleRequest();
256
$this->assertEquals(array('delegate' => array('view' => 'core.SiteAdmin',
257
'subView' => 'rewrite.AdminRewrite',
259
'error' => array('form[error][pattern][dupe][rewrite][0]',
260
'form[error][pattern][dupe][rewrite][1]'),
261
'status' => array()), $results, 'handleRequest');
263
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
266
return $this->failWithStatus($ret);
268
$this->assertEquals(array(), unserialize($value), 'activeRules');
270
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
273
return $this->failWithStatus($ret);
275
$this->assertEquals(array(), unserialize($value), 'shortUrls');
278
function testSaveBadKeyword() {
279
GalleryUtilities::putRequestVariable('form[action][rules]', 1);
280
GalleryUtilities::putRequestVariable('form[rules][rewrite][0][active]', 1);
281
GalleryUtilities::putRequestVariable('form[rules][rewrite][0][pattern]', 'uv/%badKey%');
283
$results = $this->handleRequest();
284
$this->assertEquals(array('delegate' => array('view' => 'core.SiteAdmin',
285
'subView' => 'rewrite.AdminRewrite',
287
'error' => array('form[error][1][rewrite][0]'),
288
'status' => array()),
289
$results, 'handleRequest');
291
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
294
return $this->failWithStatus($ret);
296
$this->assertEquals(array(), unserialize($value), 'activeRules');
298
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
301
return $this->failWithStatus($ret);
303
$this->assertEquals(array(), unserialize($value), 'shortUrls');
306
function testSaveInvalidPattern() {
307
GalleryUtilities::putRequestVariable('form[action][rules]', 1);
308
GalleryUtilities::putRequestVariable('form[rules][adminrewritemock][2][active]', 1);
309
GalleryUtilities::putRequestVariable('form[rules][adminrewritemock][2][pattern]',
312
$results = $this->handleRequest();
313
$this->assertEquals(array('delegate' => array('view' => 'core.SiteAdmin',
314
'subView' => 'rewrite.AdminRewrite',
316
'error' => array('form[error][4][adminrewritemock][2]'),
317
'status' => array()),
318
$results, 'handleRequest');
320
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
323
return $this->failWithStatus($ret);
325
$this->assertEquals(array(), unserialize($value), 'activeRules');
327
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
330
return $this->failWithStatus($ret);
332
$this->assertEquals(array(), unserialize($value), 'shortUrls');
335
function testSaveDupeMatch() {
336
/* It might be desirable to activate two rules for one Gallery view */
337
GalleryUtilities::putRequestVariable('form[action][rules]', 1);
338
GalleryUtilities::putRequestVariable('form[rules][adminrewritemock][0][active]', 1);
339
GalleryUtilities::putRequestVariable('form[rules][adminrewritemock][0][pattern]',
341
GalleryUtilities::putRequestVariable('form[rules][adminrewritemock][1][active]', 1);
342
GalleryUtilities::putRequestVariable('form[rules][adminrewritemock][1][pattern]',
345
$results = $this->handleRequest();
346
$this->assertEquals(array('redirect' => array('view' => 'core.SiteAdmin',
347
'subView' => 'rewrite.AdminRewrite',
350
'status' => array('saved' => 1)), $results, 'handleRequest');
352
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
355
return $this->failWithStatus($ret);
357
$this->assertEquals(array('adminrewritemock' => array(array('pattern' => 'phpunit/0/'),
358
array('pattern' => 'phpunit/1/'))),
359
unserialize($value), 'activeRules');
361
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
364
return $this->failWithStatus($ret);
366
$this->assertEquals(array(array('match' => array('view' => 'phpunit.Test'),
367
'pattern' => 'phpunit/0/'),
368
array('match' => array('view' => 'phpunit.Test'),
369
'pattern' => 'phpunit/1/')), unserialize($value), 'shortUrls');
372
function testSaveAccessList1() {
373
GalleryUtilities::putRequestVariable('form[action][accessList]', 1);
374
GalleryUtilities::putRequestVariable('form[accessList][0]', 'unit1.test');
375
GalleryUtilities::putRequestVariable('form[accessList][1]', 'unit2.test');
377
$results = $this->handleRequest();
378
$this->assertEquals(array('redirect' => array('view' => 'core.SiteAdmin',
379
'subView' => 'rewrite.AdminRewrite',
382
'status' => array('saved' => 1)),
383
$results, 'handleRequest');
385
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
388
return $this->failWithStatus($ret);
390
$this->assertEquals(array('unit1.test', 'unit2.test'), unserialize($value), 'activeRules');
392
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
393
'allowEmptyReferer');
395
return $this->failWithStatus($ret);
397
$this->assertEquals('0', $value, 'activeRules');
400
function testSaveAccessList2() {
401
GalleryUtilities::putRequestVariable('form[action][accessList]', 1);
402
GalleryUtilities::putRequestVariable('form[accessList][0]', '');
403
GalleryUtilities::putRequestVariable('form[allowEmptyReferer]', 1);
405
$results = $this->handleRequest();
406
$this->assertEquals(array('redirect' => array('view' => 'core.SiteAdmin',
407
'subView' => 'rewrite.AdminRewrite',
409
'status' => array('saved' => 1),
411
$results, 'handleRequest');
413
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
416
return $this->failWithStatus($ret);
418
$this->assertEquals(array(), unserialize($value), 'activeRules');
420
list ($ret, $value) = GalleryCoreApi::getPluginParameter('module', 'rewrite',
421
'allowEmptyReferer');
423
return $this->failWithStatus($ret);
425
$this->assertEquals('1', $value, 'activeRules');
429
function testTestParser1() {
430
GalleryUtilities::putRequestVariable('form[action][testParser]', 1);
431
GalleryUtilities::putRequestVariable('form[phpunit]', 1);
433
$results = $this->handleRequest();
434
$this->assertEquals(array('redirect' => array('view' => 'core.SiteAdmin',
435
'subView' => 'rewrite.AdminRewrite',
438
'status' => array('testSaved' => 1)),
439
$results, 'handleRequest');
442
function testTestParser2() {
443
GalleryUtilities::putRequestVariable('form[action][testParser]', 1);
445
$results = $this->handleRequest();
446
$this->assertEquals(array('delegate' => array('view' => 'core.SiteAdmin',
447
'subView' => 'rewrite.AdminRewrite',
449
'error' => array('form[error][test]'),
450
'status' => array()),
451
$results, 'handleRequest');
454
function testAdminParser1() {
455
GalleryUtilities::putRequestVariable('form[action][adminParser]', 1);
456
GalleryUtilities::putRequestVariable('form[phpunit]', 1);
458
$results = $this->handleRequest();
459
$this->assertEquals(array('redirect' => array('view' => 'core.SiteAdmin',
460
'subView' => 'rewrite.AdminRewrite',
463
'status' => array('adminSaved' => 1)),
464
$results, 'handleRequest');
466
GalleryUtilities::removeRequestVariable('form[action][adminParser]');
467
GalleryUtilities::removeRequestVariable('form[phpunit]');
470
function testAdminParser2() {
471
GalleryUtilities::putRequestVariable('form[action][adminParser]', 1);
473
$results = $this->handleRequest();
474
$this->assertEquals(array('delegate' => array('view' => 'core.SiteAdmin',
475
'subView' => 'rewrite.AdminRewrite',
477
'error' => array('form[error][admin]'),
478
'status' => array()),
479
$results, 'handleRequest');
485
* Mock rewrite parser for this test
488
* @subpackage PHPUnit
490
GalleryCoreApi::requireOnce('modules/rewrite/classes/RewriteParser.class');
491
class AdminRewriteMockParser extends RewriteParser {
492
function AdminRewriteMockParser() {
493
$this->_setParserId('adminrewritemock');
494
$this->_setParserType('preGallery');
497
function isValidRule($rule, $pattern=null) {
498
$isValid = parent::isValidRule($rule, $pattern);
503
if (isset($rule['pattern']) && $rule['pattern'] == 'phpunit/invalid/') {
510
function handleTestResultsRequest($form) {
511
$error = $status = array();
513
if (isset($form['phpunit'])) {
514
$status['testSaved'] = 1;
516
$error[] = 'form[error][test]';
519
return array(null, $error, $status);
522
function handleAdminParserRequest($form) {
523
$error = $status = array();
525
if (isset($form['phpunit'])) {
526
$status['adminSaved'] = 1;
528
$error[] = 'form[error][admin]';
531
return array(null, $error, $status);
534
function saveActiveRules($activeRules=null, $rewriteModule=null) {
535
if (is_null($activeRules)) {
536
list ($ret, $activeRules) = GalleryCoreApi::getPluginParameter(
537
'module', 'rewrite', 'activeRules');
539
return array($ret, null, null);
541
$activeRules = unserialize($activeRules);
544
$regexRules = array();
545
$shortUrls = array();
546
if (!empty($activeRules)) {
547
list ($ret, $code, $regexRules, $shortUrls, $errorId) = RewriteHelper::parseActiveRules(
548
$activeRules, $this, $rewriteModule);
550
return array($ret, null, null);
552
if ($code != REWRITE_STATUS_OK) {
553
return array(null, $code, $errorId);
557
$ret = GalleryCoreApi::setPluginParameter(
558
'module', 'rewrite', 'shortUrls', serialize($shortUrls));
560
return array($ret, null, null);
563
$ret = GalleryCoreApi::setPluginParameter(
564
'module', 'rewrite', 'activeRules', serialize($activeRules));
566
return array($ret, null, null);
569
return array(null, REWRITE_STATUS_OK, null);
572
function saveAccessList($accessList, $allowEmptyReferer) {
573
$ret = GalleryCoreApi::setPluginParameter(
574
'module', 'rewrite', 'accessList', serialize($accessList));
576
return array($ret, null);
579
$ret = GalleryCoreApi::setPluginParameter('module', 'rewrite', 'allowEmptyReferer',
580
$allowEmptyReferer ? '1' : '0');
582
return array($ret, null);
585
return array(null, REWRITE_STATUS_OK);
590
* Mock module for this test
593
* @subpackage PHPUnit
595
class AdminRewriteMockModule extends GalleryModule {
596
function AdminRewriteMockModule() {
599
$this->setId('adminrewritemock');
600
$this->setName('AdminRewrite Test Module');
601
$this->setDescription('Unit test module');
602
$this->setVersion('1');
603
$this->setGroup('data', 'Gallery');
604
$this->setRequiredCoreApi(GalleryCoreApi::getApiVersion());
605
$this->setRequiredModuleApi(GalleryModule::getApiVersion());
608
function getRewriteRules() {
611
$rules[0] = array('pattern' => 'phpunit/dummy/%itemId%.htm',
612
'match' => array('view' => 'phpunit.Test'));
613
$rules[1] = array('pattern' => 'phpunit/conflict/',
614
'match' => array('view' => 'phpunit.Test'));
615
$rules[2] = array('pattern' => 'phpunit/invalid/');
617
/* Rule 3 and 4: Dupe conditions */
618
$rules[3] = array('conditions' => array(array('test' => 'REQUEST_METHOD',
619
'pattern' => 'FOO')));
620
$rules[4] = array('conditions' => array(array('test' => 'REQUEST_METHOD',
621
'pattern' => 'FOO')));
628
* Test platform for this test
631
* @subpackage PHPUnit
633
class AdminRewriteMockPlatform extends GalleryPlatform {
634
function file_exists($file) {
635
if (strpos($file, 'modules/adminrewritemock/module.inc') !== false) {
639
return parent::file_exists($file);
642
function opendir($path) {
643
if (strpos($path, '/modules/') !== false) {
644
$this->_list = array();
645
if ($dir = parent::opendir($path)) {
646
while (false !== ($file = parent::readdir($dir))) {
647
array_push($this->_list, $file);
650
array_push($this->_list, 'adminrewritemock');
651
return 'adminrewritemock';
654
return parent::opendir($path);
657
function is_dir($path) {
658
if (strpos($path, '/modules/adminrewritemock') !== false) {
662
return parent::is_dir($path);
665
function readdir($handle) {
666
if ($handle == 'adminrewritemock') {
667
return array_shift($this->_list);
670
return parent::readdir($handle);
673
function closedir($handle) {
674
if ($handle == 'adminrewritemock') {
679
return parent::closedir($handle);
682
function recursiveRmdir($path) {