Completed
Push — EZP-26146-location-swap-urlali... ( 03f4c9...c13c1a )
by
unknown
29:41
created

testLocationSwappedSiblingsSimple()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 68
Code Lines 46

Duplication

Lines 68
Ratio 100 %

Importance

Changes 0
Metric Value
nc 1
dl 68
loc 68
c 0
b 0
f 0
cc 1
eloc 46
nop 0
rs 9.2447

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/**
4
 * File contains: eZ\Publish\Core\Persistence\Legacy\Tests\Content\UrlAliasHandlerTest class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 *
9
 * @version //autogentag//
10
 */
11
namespace eZ\Publish\Core\Persistence\Legacy\Tests\Content;
12
13
use eZ\Publish\Core\Persistence\Legacy\Tests\TestCase;
14
use eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler;
15
use eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Mapper;
16
use eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Gateway\DoctrineDatabase;
17
use eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\SlugConverter;
18
use eZ\Publish\Core\Persistence\Legacy\Content\Location\Gateway\DoctrineDatabase as DoctrineDatabaseLocation;
19
use eZ\Publish\Core\Persistence\Legacy\Content\Language\Handler as LanguageHandler;
20
use eZ\Publish\Core\Persistence\Legacy\Content\Language\Gateway\DoctrineDatabase as LanguageGateway;
21
use eZ\Publish\Core\Persistence\Legacy\Content\Language\Mapper as LanguageMapper;
22
use eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator as LanguageMaskGenerator;
23
use eZ\Publish\Core\Persistence\TransformationProcessor\DefinitionBased;
24
use eZ\Publish\Core\Persistence\TransformationProcessor\DefinitionBased\Parser;
25
use eZ\Publish\Core\Persistence\TransformationProcessor\PcreCompiler;
26
use eZ\Publish\Core\Persistence\Utf8Converter;
27
use eZ\Publish\SPI\Persistence\Content\UrlAlias;
28
use eZ\Publish\Core\Base\Exceptions\NotFoundException;
29
30
/**
31
 * Test case for UrlAliasHandler.
32
 *
33
 * @group urlalias-handler
34
 */
35
class UrlAliasHandlerTest extends TestCase
36
{
37
    /**
38
     * Test for the lookup() method.
39
     *
40
     * Simple lookup case.
41
     *
42
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
43
     * @group location
44
     * @group virtual
45
     * @group resource
46
     * @group case-correction
47
     * @group multiple-languages
48
     */
49
    public function testLookup()
50
    {
51
        $handler = $this->getHandler();
52
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location.php');
53
54
        $urlAlias = $handler->lookup('jedan');
55
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
56
    }
57
58
    /**
59
     * Test for the lookup() method.
60
     *
61
     * Trying to lookup non existent URL alias throws NotFoundException.
62
     *
63
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
64
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
65
     * @group location
66
     * @group virtual
67
     * @group resource
68
     */
69
    public function testLookupThrowsNotFoundException()
70
    {
71
        $handler = $this->getHandler();
72
        $handler->lookup('wooden/iron');
73
    }
74
75
    public function providerForTestLookupLocationUrlAlias()
76
    {
77
        return array(
78
            array(
79
                'jedan',
80
                array(
81
                    array(
82
                        'always-available' => true,
83
                        'translations' => array(
84
                            'cro-HR' => 'jedan',
85
                        ),
86
                    ),
87
                ),
88
                array('cro-HR'),
89
                true,
90
                314,
91
                '0-6896260129051a949051c3847c34466f',
92
            ),
93
            array(
94
                'jedan/dva',
95
                array(
96
                    array(
97
                        'always-available' => true,
98
                        'translations' => array(
99
                            'cro-HR' => 'jedan',
100
                        ),
101
                    ),
102
                    array(
103
                        'always-available' => false,
104
                        'translations' => array(
105
                            'cro-HR' => 'dva',
106
                            'eng-GB' => 'two',
107
                        ),
108
                    ),
109
                ),
110
                array('cro-HR'),
111
                false,
112
                315,
113
                '2-c67ed9a09ab136fae610b6a087d82e21',
114
            ),
115
            array(
116
                'jedan/two',
117
                array(
118
                    array(
119
                        'always-available' => true,
120
                        'translations' => array(
121
                            'cro-HR' => 'jedan',
122
                        ),
123
                    ),
124
                    array(
125
                        'always-available' => false,
126
                        'translations' => array(
127
                            'cro-HR' => 'dva',
128
                            'eng-GB' => 'two',
129
                        ),
130
                    ),
131
                ),
132
                array('eng-GB'),
133
                false,
134
                315,
135
                '2-b8a9f715dbb64fd5c56e7783c6820a61',
136
            ),
137
            array(
138
                'jedan/dva/tri',
139
                array(
140
                    array(
141
                        'always-available' => true,
142
                        'translations' => array(
143
                            'cro-HR' => 'jedan',
144
                        ),
145
                    ),
146
                    array(
147
                        'always-available' => false,
148
                        'translations' => array(
149
                            'cro-HR' => 'dva',
150
                            'eng-GB' => 'two',
151
                        ),
152
                    ),
153
                    array(
154
                        'always-available' => false,
155
                        'translations' => array(
156
                            'cro-HR' => 'tri',
157
                            'eng-GB' => 'three',
158
                            'ger-DE' => 'drei',
159
                        ),
160
                    ),
161
                ),
162
                array('cro-HR'),
163
                false,
164
                316,
165
                '3-d2cfe69af2d64330670e08efb2c86df7',
166
            ),
167
            array(
168
                'jedan/two/three',
169
                array(
170
                    array(
171
                        'always-available' => true,
172
                        'translations' => array(
173
                            'cro-HR' => 'jedan',
174
                        ),
175
                    ),
176
                    array(
177
                        'always-available' => false,
178
                        'translations' => array(
179
                            'cro-HR' => 'dva',
180
                            'eng-GB' => 'two',
181
                        ),
182
                    ),
183
                    array(
184
                        'always-available' => false,
185
                        'translations' => array(
186
                            'cro-HR' => 'tri',
187
                            'eng-GB' => 'three',
188
                            'ger-DE' => 'drei',
189
                        ),
190
                    ),
191
                ),
192
                array('eng-GB'),
193
                false,
194
                316,
195
                '3-35d6d33467aae9a2e3dccb4b6b027878',
196
            ),
197
            array(
198
                'jedan/dva/three',
199
                array(
200
                    array(
201
                        'always-available' => true,
202
                        'translations' => array(
203
                            'cro-HR' => 'jedan',
204
                        ),
205
                    ),
206
                    array(
207
                        'always-available' => false,
208
                        'translations' => array(
209
                            'cro-HR' => 'dva',
210
                            'eng-GB' => 'two',
211
                        ),
212
                    ),
213
                    array(
214
                        'always-available' => false,
215
                        'translations' => array(
216
                            'cro-HR' => 'tri',
217
                            'eng-GB' => 'three',
218
                            'ger-DE' => 'drei',
219
                        ),
220
                    ),
221
                ),
222
                array('eng-GB'),
223
                false,
224
                316,
225
                '3-35d6d33467aae9a2e3dccb4b6b027878',
226
            ),
227
            array(
228
                'jedan/two/tri',
229
                array(
230
                    array(
231
                        'always-available' => true,
232
                        'translations' => array(
233
                            'cro-HR' => 'jedan',
234
                        ),
235
                    ),
236
                    array(
237
                        'always-available' => false,
238
                        'translations' => array(
239
                            'cro-HR' => 'dva',
240
                            'eng-GB' => 'two',
241
                        ),
242
                    ),
243
                    array(
244
                        'always-available' => false,
245
                        'translations' => array(
246
                            'cro-HR' => 'tri',
247
                            'eng-GB' => 'three',
248
                            'ger-DE' => 'drei',
249
                        ),
250
                    ),
251
                ),
252
                array('cro-HR'),
253
                false,
254
                316,
255
                '3-d2cfe69af2d64330670e08efb2c86df7',
256
            ),
257
            array(
258
                'jedan/dva/drei',
259
                array(
260
                    array(
261
                        'always-available' => true,
262
                        'translations' => array(
263
                            'cro-HR' => 'jedan',
264
                        ),
265
                    ),
266
                    array(
267
                        'always-available' => false,
268
                        'translations' => array(
269
                            'cro-HR' => 'dva',
270
                            'eng-GB' => 'two',
271
                        ),
272
                    ),
273
                    array(
274
                        'always-available' => false,
275
                        'translations' => array(
276
                            'cro-HR' => 'tri',
277
                            'eng-GB' => 'three',
278
                            'ger-DE' => 'drei',
279
                        ),
280
                    ),
281
                ),
282
                array('ger-DE'),
283
                false,
284
                316,
285
                '3-1d8d2fd0a99802b89eb356a86e029d25',
286
            ),
287
            array(
288
                'jedan/two/drei',
289
                array(
290
                    array(
291
                        'always-available' => true,
292
                        'translations' => array(
293
                            'cro-HR' => 'jedan',
294
                        ),
295
                    ),
296
                    array(
297
                        'always-available' => false,
298
                        'translations' => array(
299
                            'cro-HR' => 'dva',
300
                            'eng-GB' => 'two',
301
                        ),
302
                    ),
303
                    array(
304
                        'always-available' => false,
305
                        'translations' => array(
306
                            'cro-HR' => 'tri',
307
                            'eng-GB' => 'three',
308
                            'ger-DE' => 'drei',
309
                        ),
310
                    ),
311
                ),
312
                array('ger-DE'),
313
                false,
314
                316,
315
                '3-1d8d2fd0a99802b89eb356a86e029d25',
316
            ),
317
        );
318
    }
319
320
    /**
321
     * Test for the lookup() method.
322
     *
323
     * Testing that UrlAlias is found and has expected state.
324
     *
325
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
326
     * @dataProvider providerForTestLookupLocationUrlAlias
327
     * @depends testLookup
328
     * @group location
329
     */
330 View Code Duplication
    public function testLookupLocationUrlAlias(
331
        $url,
332
        array $pathData,
333
        array $languageCodes,
334
        $alwaysAvailable,
335
        $locationId,
336
        $id
337
    ) {
338
        $handler = $this->getHandler();
339
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location.php');
340
341
        $urlAlias = $handler->lookup($url);
342
343
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
344
        self::assertEquals(
345
            new UrlAlias(
346
                array(
347
                    'id' => $id,
348
                    'type' => UrlAlias::LOCATION,
349
                    'destination' => $locationId,
350
                    'languageCodes' => $languageCodes,
351
                    'pathData' => $pathData,
352
                    'alwaysAvailable' => $alwaysAvailable,
353
                    'isHistory' => false,
354
                    'isCustom' => false,
355
                    'forward' => false,
356
                )
357
            ),
358
            $urlAlias
359
        );
360
    }
361
362
    /**
363
     * Testing that looking up case incorrect URL results in redirection to case correct path.
364
     *
365
     * Note that case corrected path is not always equal to case corrected case incorrect path, eg. "JEDAN/TWO/THREE"
366
     * will not always redirect to "jedan/two/three".
367
     * In some cases, depending on list of prioritized languages and if Content available in the different language
368
     * higher in the list of prioritized languages, path showing to that Content will be used.
369
     * Example: "JEDAN/TWO/DREI" with "eng-GB" and "ger-DE" as prioritized languages will produce redirection
370
     * to the "jedan/two/three", as "eng-GB" is the most prioritized language and Content that URL alias is pointing
371
     * to is available in it.
372
     *
373
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
374
     * @dataProvider providerForTestLookupLocationUrlAlias
375
     * @depends testLookup
376
     * @group case-correction
377
     * @group location
378
     *
379
     * @todo refactor, only forward pertinent
380
     */
381 View Code Duplication
    public function testLookupLocationCaseCorrection(
382
        $url,
383
        array $pathData,
384
        array $languageCodes,
385
        $alwaysAvailable,
386
        $locationId,
387
        $id
388
    ) {
389
        $handler = $this->getHandler();
390
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location.php');
391
392
        $urlAlias = $handler->lookup(strtoupper($url));
393
394
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
395
        self::assertEquals(
396
            new UrlAlias(
397
                array(
398
                    'id' => $id,
399
                    'type' => UrlAlias::LOCATION,
400
                    'destination' => $locationId,
401
                    'languageCodes' => $languageCodes,
402
                    'pathData' => $pathData,
403
                    'alwaysAvailable' => $alwaysAvailable,
404
                    'isHistory' => false,
405
                    'isCustom' => false,
406
                    'forward' => false,
407
                )
408
            ),
409
            $urlAlias
410
        );
411
    }
412
413
    public function providerForTestLookupLocationMultipleLanguages()
414
    {
415
        return array(
416
            array(
417
                'jedan/dva',
418
                array(
419
                    array(
420
                        'always-available' => true,
421
                        'translations' => array(
422
                            'cro-HR' => 'jedan',
423
                        ),
424
                    ),
425
                    array(
426
                        'always-available' => false,
427
                        'translations' => array(
428
                            'cro-HR' => 'dva',
429
                            'eng-GB' => 'dva',
430
                        ),
431
                    ),
432
                ),
433
                array('cro-HR', 'eng-GB'),
434
                false,
435
                315,
436
                '2-c67ed9a09ab136fae610b6a087d82e21',
437
            ),
438
            array(
439
                'jedan/dva/tri',
440
                array(
441
                    array(
442
                        'always-available' => true,
443
                        'translations' => array(
444
                            'cro-HR' => 'jedan',
445
                        ),
446
                    ),
447
                    array(
448
                        'always-available' => false,
449
                        'translations' => array(
450
                            'cro-HR' => 'dva',
451
                            'eng-GB' => 'dva',
452
                        ),
453
                    ),
454
                    array(
455
                        'always-available' => false,
456
                        'translations' => array(
457
                            'cro-HR' => 'tri',
458
                            'eng-GB' => 'three',
459
                        ),
460
                    ),
461
                ),
462
                array('cro-HR'),
463
                false,
464
                316,
465
                '3-d2cfe69af2d64330670e08efb2c86df7',
466
            ),
467
            array(
468
                'jedan/dva/three',
469
                array(
470
                    array(
471
                        'always-available' => true,
472
                        'translations' => array(
473
                            'cro-HR' => 'jedan',
474
                        ),
475
                    ),
476
                    array(
477
                        'always-available' => false,
478
                        'translations' => array(
479
                            'cro-HR' => 'dva',
480
                            'eng-GB' => 'dva',
481
                        ),
482
                    ),
483
                    array(
484
                        'always-available' => false,
485
                        'translations' => array(
486
                            'cro-HR' => 'tri',
487
                            'eng-GB' => 'three',
488
                        ),
489
                    ),
490
                ),
491
                array('eng-GB'),
492
                false,
493
                316,
494
                '3-35d6d33467aae9a2e3dccb4b6b027878',
495
            ),
496
        );
497
    }
498
499
    /**
500
     * Test for the lookup() method.
501
     *
502
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
503
     * @dataProvider providerForTestLookupLocationMultipleLanguages
504
     * @depends testLookup
505
     * @group multiple-languages
506
     * @group location
507
     */
508 View Code Duplication
    public function testLookupLocationMultipleLanguages(
509
        $url,
510
        array $pathData,
511
        array $languageCodes,
512
        $alwaysAvailable,
513
        $locationId,
514
        $id
515
    ) {
516
        $handler = $this->getHandler();
517
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location_multilang.php');
518
519
        $urlAlias = $handler->lookup($url);
520
521
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
522
        self::assertEquals(
523
            new UrlAlias(
524
                array(
525
                    'id' => $id,
526
                    'type' => UrlAlias::LOCATION,
527
                    'destination' => $locationId,
528
                    'languageCodes' => $languageCodes,
529
                    'pathData' => $pathData,
530
                    'alwaysAvailable' => $alwaysAvailable,
531
                    'isHistory' => false,
532
                    'isCustom' => false,
533
                    'forward' => false,
534
                )
535
            ),
536
            $urlAlias
537
        );
538
    }
539
540
    /**
541
     * Test for the lookup() method.
542
     *
543
     * @todo document
544
     *
545
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
546
     * @depends testLookup
547
     * @group history
548
     * @group location
549
     */
550
    public function testLookupLocationHistoryUrlAlias()
551
    {
552
        $handler = $this->getHandler();
553
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location.php');
554
555
        $urlAlias = $handler->lookup('jedan/dva/tri-history');
556
557
        self::assertEquals(
558
            $this->getHistoryAlias(),
559
            $urlAlias
560
        );
561
    }
562
563
    public function providerForTestLookupCustomLocationUrlAlias()
564
    {
565
        return array(
566
            array(
567
                'autogenerated-hello/everybody',
568
                array(
569
                    array(
570
                        'always-available' => true,
571
                        'translations' => array(
572
                            'eng-GB' => 'autogenerated-hello',
573
                        ),
574
                    ),
575
                    array(
576
                        'always-available' => true,
577
                        'translations' => array(
578
                            'eng-GB' => 'everybody',
579
                        ),
580
                    ),
581
                ),
582
                array('eng-GB'),
583
                false,
584
                true,
585
                315,
586
                '2-88150d7d17390010ba6222de68bfafb5',
587
            ),
588
            array(
589
                'hello',
590
                array(
591
                    array(
592
                        'always-available' => false,
593
                        'translations' => array(
594
                            'eng-GB' => 'hello',
595
                        ),
596
                    ),
597
                ),
598
                array('eng-GB'),
599
                true,
600
                false,
601
                314,
602
                '0-5d41402abc4b2a76b9719d911017c592',
603
            ),
604
            array(
605
                'hello/and/goodbye',
606
                array(
607
                    array(
608
                        'always-available' => false,
609
                        'translations' => array(
610
                            'eng-GB' => 'hello',
611
                        ),
612
                    ),
613
                    array(
614
                        'always-available' => true,
615
                        'translations' => array(
616
                            'always-available' => 'and',
617
                        ),
618
                    ),
619
                    array(
620
                        'always-available' => false,
621
                        'translations' => array(
622
                            'eng-GB' => 'goodbye',
623
                        ),
624
                    ),
625
                ),
626
                array('eng-GB'),
627
                true,
628
                false,
629
                316,
630
                '8-69faab6268350295550de7d587bc323d',
631
            ),
632
            array(
633
                'hello/everyone',
634
                array(
635
                    array(
636
                        'always-available' => false,
637
                        'translations' => array(
638
                            'eng-GB' => 'hello',
639
                        ),
640
                    ),
641
                    array(
642
                        'always-available' => false,
643
                        'translations' => array(
644
                            'eng-GB' => 'everyone',
645
                        ),
646
                    ),
647
                ),
648
                array('eng-GB'),
649
                true,
650
                false,
651
                315,
652
                '6-ed881bac6397ede33c0a285c9f50bb83',
653
            ),
654
            array(
655
                'well/ha-ha-ha',
656
                array(
657
                    array(
658
                        'always-available' => true,
659
                        'translations' => array(
660
                            'always-available' => 'well',
661
                        ),
662
                    ),
663
                    array(
664
                        'always-available' => false,
665
                        'translations' => array(
666
                            'eng-GB' => 'ha-ha-ha',
667
                        ),
668
                    ),
669
                ),
670
                array('eng-GB'),
671
                false,
672
                false,
673
                317,
674
                '10-17a197f4bbe127c368b889a67effd1b3',
675
            ),
676
        );
677
    }
678
679
    /**
680
     * Test for the lookup() method.
681
     *
682
     * Testing that UrlAlias is found and has expected state.
683
     *
684
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
685
     * @dataProvider providerForTestLookupCustomLocationUrlAlias
686
     * @depends testLookup
687
     * @group location
688
     * @group custom
689
     */
690 View Code Duplication
    public function testLookupCustomLocationUrlAlias(
691
        $url,
692
        array $pathData,
693
        array $languageCodes,
694
        $forward,
695
        $alwaysAvailable,
696
        $destination,
697
        $id
698
    ) {
699
        $handler = $this->getHandler();
700
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location_custom.php');
701
702
        $urlAlias = $handler->lookup($url);
703
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
704
        self::assertEquals(
705
            new UrlAlias(
706
                array(
707
                    'id' => $id,
708
                    'type' => UrlAlias::LOCATION,
709
                    'destination' => $destination,
710
                    'languageCodes' => $languageCodes,
711
                    'pathData' => $pathData,
712
                    'alwaysAvailable' => $alwaysAvailable,
713
                    'isHistory' => false,
714
                    'isCustom' => true,
715
                    'forward' => $forward,
716
                )
717
            ),
718
            $urlAlias
719
        );
720
    }
721
722
    /**
723
     * Test for the lookup() method.
724
     *
725
     * Testing that UrlAlias is found and has expected state.
726
     *
727
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
728
     * @dataProvider providerForTestLookupCustomLocationUrlAlias
729
     * @depends testLookup
730
     * @group location
731
     * @group custom
732
     */
733 View Code Duplication
    public function testLookupCustomLocationUrlAliasCaseCorrection(
734
        $url,
735
        array $pathData,
736
        array $languageCodes,
737
        $forward,
738
        $alwaysAvailable,
739
        $destination,
740
        $id
741
    ) {
742
        $handler = $this->getHandler();
743
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location_custom.php');
744
745
        $urlAlias = $handler->lookup(strtoupper($url));
746
747
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
748
        self::assertEquals(
749
            new UrlAlias(
750
                array(
751
                    'id' => $id,
752
                    'type' => UrlAlias::LOCATION,
753
                    'destination' => $destination,
754
                    'languageCodes' => $languageCodes,
755
                    'pathData' => $pathData,
756
                    'alwaysAvailable' => $alwaysAvailable,
757
                    'isHistory' => false,
758
                    'isCustom' => true,
759
                    'forward' => $forward,
760
                )
761
            ),
762
            $urlAlias
763
        );
764
    }
765
766
    public function providerForTestLookupVirtualUrlAlias()
767
    {
768
        return array(
769
            array(
770
                'hello/and',
771
                '6-be5d5d37542d75f93a87094459f76678',
772
            ),
773
            array(
774
                'HELLO/AND',
775
                '6-be5d5d37542d75f93a87094459f76678',
776
            ),
777
        );
778
    }
779
780
    /**
781
     * Test for the lookup() method.
782
     *
783
     * Testing that NOP action redirects to site root.
784
     *
785
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
786
     * @dataProvider providerForTestLookupVirtualUrlAlias
787
     * @depends testLookup
788
     * @group virtual
789
     */
790 View Code Duplication
    public function testLookupVirtualUrlAlias($url, $id)
791
    {
792
        $handler = $this->getHandler();
793
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location_custom.php');
794
795
        $urlAlias = $handler->lookup($url);
796
797
        $this->assertVirtualUrlAliasValid($urlAlias, $id);
798
    }
799
800
    public function providerForTestLookupResourceUrlAlias()
801
    {
802
        return array(
803
            array(
804
                'is-alive',
805
                array(
806
                    array(
807
                        'always-available' => true,
808
                        'translations' => array(
809
                            'eng-GB' => 'is-alive',
810
                        ),
811
                    ),
812
                ),
813
                array('eng-GB'),
814
                true,
815
                true,
816
                'ezinfo/isalive',
817
                '0-d003895fa282a14c8ec3eddf23ca4ca2',
818
            ),
819
            array(
820
                'is-alive/then/search',
821
                array(
822
                    array(
823
                        'always-available' => true,
824
                        'translations' => array(
825
                            'eng-GB' => 'is-alive',
826
                        ),
827
                    ),
828
                    array(
829
                        'always-available' => true,
830
                        'translations' => array(
831
                            'always-available' => 'then',
832
                        ),
833
                    ),
834
                    array(
835
                        'always-available' => false,
836
                        'translations' => array(
837
                            'cro-HR' => 'search',
838
                        ),
839
                    ),
840
                ),
841
                array('cro-HR'),
842
                false,
843
                false,
844
                'content/search',
845
                '3-06a943c59f33a34bb5924aaf72cd2995',
846
            ),
847
        );
848
    }
849
850
    /**
851
     * Test for the lookup() method.
852
     *
853
     * Testing that UrlAlias is found and has expected state.
854
     *
855
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
856
     * @dataProvider providerForTestLookupResourceUrlAlias
857
     * @depends testLookup
858
     * @group resource
859
     */
860 View Code Duplication
    public function testLookupResourceUrlAlias(
861
        $url,
862
        $pathData,
863
        array $languageCodes,
864
        $forward,
865
        $alwaysAvailable,
866
        $destination,
867
        $id
868
    ) {
869
        $handler = $this->getHandler();
870
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_resource.php');
871
872
        $urlAlias = $handler->lookup($url);
873
874
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
875
        self::assertEquals(
876
            new UrlAlias(
877
                array(
878
                    'id' => $id,
879
                    'type' => UrlAlias::RESOURCE,
880
                    'destination' => $destination,
881
                    'languageCodes' => $languageCodes,
882
                    'pathData' => $pathData,
883
                    'alwaysAvailable' => $alwaysAvailable,
884
                    'isHistory' => false,
885
                    'isCustom' => true,
886
                    'forward' => $forward,
887
                )
888
            ),
889
            $urlAlias
890
        );
891
    }
892
893
    /**
894
     * Test for the lookup() method.
895
     *
896
     * Testing that UrlAlias is found and has expected state.
897
     *
898
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
899
     * @dataProvider providerForTestLookupResourceUrlAlias
900
     * @depends testLookup
901
     * @group resource
902
     */
903 View Code Duplication
    public function testLookupResourceUrlAliasCaseInsensitive(
904
        $url,
905
        $pathData,
906
        array $languageCodes,
907
        $forward,
908
        $alwaysAvailable,
909
        $destination,
910
        $id
911
    ) {
912
        $handler = $this->getHandler();
913
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_resource.php');
914
915
        $urlAlias = $handler->lookup(strtoupper($url));
916
917
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
918
        self::assertEquals(
919
            new UrlAlias(
920
                array(
921
                    'id' => $id,
922
                    'type' => UrlAlias::RESOURCE,
923
                    'destination' => $destination,
924
                    'languageCodes' => $languageCodes,
925
                    'pathData' => $pathData,
926
                    'alwaysAvailable' => $alwaysAvailable,
927
                    'isHistory' => false,
928
                    'isCustom' => true,
929
                    'forward' => $forward,
930
                )
931
            ),
932
            $urlAlias
933
        );
934
    }
935
936
    /**
937
     * Test for the lookup() method with uppercase utf8 characters.
938
     *
939
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::lookup
940
     * @depends testLookup
941
     */
942
    public function testLookupUppercaseIri()
943
    {
944
        $handler = $this->getHandler();
945
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location_iri.php');
946
947
        $urlAlias = $handler->lookup('΀');
948
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
949
    }
950
951
    protected function assertVirtualUrlAliasValid(UrlAlias $urlAlias, $id)
952
    {
953
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
954
        self::assertEquals($id, $urlAlias->id);
955
        self::assertEquals(UrlAlias::VIRTUAL, $urlAlias->type);
956
        /*self::assertEquals(
957
            new UrlAlias(
958
                array(
959
                    "id" => $id,
960
                    "type" => UrlAlias::VIRTUAL,
961
                    "destination" => null,
962
                    "languageCodes" => array(),
963
                    "pathData" => null,
964
                    "alwaysAvailable" => true,
965
                    "isHistory" => true,
966
                    "isCustom" => false,
967
                    "forward" => false
968
                )
969
            ),
970
            $urlAlias
971
        );*/
972
    }
973
974
    /**
975
     * Test for the listURLAliasesForLocation() method.
976
     *
977
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::listURLAliasesForLocation
978
     */
979
    public function testListURLAliasesForLocation()
980
    {
981
        $handler = $this->getHandler();
982
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location.php');
983
984
        $urlAliases = $handler->listURLAliasesForLocation(315);
985
986
        self::assertEquals(
987
            array(
988
                new UrlAlias(
989
                    array(
990
                        'id' => '2-b8a9f715dbb64fd5c56e7783c6820a61',
991
                        'type' => UrlAlias::LOCATION,
992
                        'destination' => 315,
993
                        'languageCodes' => array('eng-GB'),
994
                        'pathData' => array(
995
                            array(
996
                                'always-available' => true,
997
                                'translations' => array('cro-HR' => 'jedan'),
998
                            ),
999
                            array(
1000
                                'always-available' => false,
1001
                                'translations' => array(
1002
                                    'cro-HR' => 'dva',
1003
                                    'eng-GB' => 'two',
1004
                                ),
1005
                            ),
1006
                        ),
1007
                        'alwaysAvailable' => false,
1008
                        'isHistory' => false,
1009
                        'isCustom' => false,
1010
                        'forward' => false,
1011
                    )
1012
                ),
1013
                new UrlAlias(
1014
                    array(
1015
                        'id' => '2-c67ed9a09ab136fae610b6a087d82e21',
1016
                        'type' => UrlAlias::LOCATION,
1017
                        'destination' => 315,
1018
                        'languageCodes' => array('cro-HR'),
1019
                        'pathData' => array(
1020
                            array(
1021
                                'always-available' => true,
1022
                                'translations' => array('cro-HR' => 'jedan'),
1023
                            ),
1024
                            array(
1025
                                'always-available' => false,
1026
                                'translations' => array(
1027
                                    'cro-HR' => 'dva',
1028
                                    'eng-GB' => 'two',
1029
                                ),
1030
                            ),
1031
                        ),
1032
                        'alwaysAvailable' => false,
1033
                        'isHistory' => false,
1034
                        'isCustom' => false,
1035
                        'forward' => false,
1036
                    )
1037
                ),
1038
            ),
1039
            $urlAliases
1040
        );
1041
    }
1042
1043
    /**
1044
     * Test for the publishUrlAliasForLocation() method.
1045
     *
1046
     * @todo document
1047
     *
1048
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1049
     * @depends testLookupLocationUrlAlias
1050
     * @group publish
1051
     */
1052 View Code Duplication
    public function testPublishUrlAliasForLocation()
1053
    {
1054
        $handler = $this->getHandler();
1055
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
1056
1057
        $handler->publishUrlAliasForLocation(314, 2, 'simple', 'eng-GB', true);
1058
        $publishedUrlAlias = $handler->lookup('simple');
1059
1060
        self::assertEquals(4, $this->countRows());
1061
        self::assertEquals(
1062
            new UrlAlias(
1063
                array(
1064
                    'id' => '0-' . md5('simple'),
1065
                    'type' => UrlAlias::LOCATION,
1066
                    'destination' => 314,
1067
                    'languageCodes' => array('eng-GB'),
1068
                    'pathData' => array(
1069
                        array(
1070
                            'always-available' => true,
1071
                            'translations' => array(
1072
                                'eng-GB' => 'simple',
1073
                                'cro-HR' => 'path314',
1074
                            ),
1075
                        ),
1076
                    ),
1077
                    'alwaysAvailable' => true,
1078
                    'isHistory' => false,
1079
                    'isCustom' => false,
1080
                    'forward' => false,
1081
                )
1082
            ),
1083
            $publishedUrlAlias
1084
        );
1085
    }
1086
1087
    /**
1088
     * Test for the publishUrlAliasForLocation() method.
1089
     *
1090
     * @todo document
1091
     *
1092
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1093
     * @depends testPublishUrlAliasForLocation
1094
     * @group publish
1095
     */
1096
    public function testPublishUrlAliasForLocationRepublish()
1097
    {
1098
        $handler = $this->getHandler();
1099
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
1100
1101
        $handler->publishUrlAliasForLocation(314, 2, 'simple', 'eng-GB', true);
1102
        $publishedUrlAlias = $handler->lookup('simple');
1103
        $handler->publishUrlAliasForLocation(314, 2, 'simple', 'eng-GB', true);
1104
        $republishedUrlAlias = $handler->lookup('simple');
1105
1106
        self::assertEquals(4, $this->countRows());
1107
        self::assertEquals(
1108
            $publishedUrlAlias,
1109
            $republishedUrlAlias
1110
        );
1111
    }
1112
1113
    /**
1114
     * Test for the publishUrlAliasForLocation() method.
1115
     *
1116
     * @todo document
1117
     *
1118
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1119
     * @depends testPublishUrlAliasForLocation
1120
     * @group publish
1121
     */
1122 View Code Duplication
    public function testPublishUrlAliasCreatesUniqueAlias()
1123
    {
1124
        $handler = $this->getHandler();
1125
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
1126
1127
        $handler->publishUrlAliasForLocation(314, 2, 'simple', 'eng-GB', true);
1128
        $handler->publishUrlAliasForLocation(315, 2, 'simple', 'eng-GB', true);
1129
        self::assertEquals(5, $this->countRows());
1130
1131
        $urlAlias = $handler->lookup('simple2');
1132
        self::assertEquals(
1133
            new UrlAlias(
1134
                array(
1135
                    'id' => '0-' . md5('simple2'),
1136
                    'type' => UrlAlias::LOCATION,
1137
                    'destination' => 315,
1138
                    'languageCodes' => array('eng-GB'),
1139
                    'pathData' => array(
1140
                        array(
1141
                            'always-available' => true,
1142
                            'translations' => array(
1143
                                'eng-GB' => 'simple2',
1144
                            ),
1145
                        ),
1146
                    ),
1147
                    'alwaysAvailable' => true,
1148
                    'isHistory' => false,
1149
                    'isCustom' => false,
1150
                    'forward' => false,
1151
                )
1152
            ),
1153
            $urlAlias
1154
        );
1155
    }
1156
1157
    /**
1158
     * @return array
1159
     */
1160
    public function providerForTestPublishUrlAliasForLocationComplex()
1161
    {
1162
        return $this->providerForTestLookupLocationUrlAlias();
1163
    }
1164
1165
    /**
1166
     * Test for the publishUrlAliasForLocation() method.
1167
     *
1168
     * @todo document
1169
     *
1170
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1171
     * @dataProvider providerForTestPublishUrlAliasForLocationComplex
1172
     * @depends testPublishUrlAliasForLocation
1173
     * @group publish
1174
     */
1175
    public function testPublishUrlAliasForLocationComplex(
1176
        $url,
1177
        $pathData,
1178
        array $languageCodes,
1179
        $alwaysAvailable,
1180
        $locationId,
1181
        $id
1182
    ) {
1183
        $handler = $this->getHandler();
1184
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
1185
1186
        $handler->publishUrlAliasForLocation(314, 2, 'jedan', 'cro-HR', true);
1187
        $handler->publishUrlAliasForLocation(315, 314, 'dva', 'cro-HR', false);
1188
        $handler->publishUrlAliasForLocation(315, 314, 'two', 'eng-GB', false);
1189
        $handler->publishUrlAliasForLocation(316, 315, 'tri', 'cro-HR', false);
1190
        $handler->publishUrlAliasForLocation(316, 315, 'three', 'eng-GB', false);
1191
        $handler->publishUrlAliasForLocation(316, 315, 'drei', 'ger-DE', false);
1192
1193
        $urlAlias = $handler->lookup($url);
1194
1195
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
1196
        self::assertEquals(
1197
            new UrlAlias(
1198
                array(
1199
                    'id' => $id,
1200
                    'type' => UrlAlias::LOCATION,
1201
                    'destination' => $locationId,
1202
                    'languageCodes' => $languageCodes,
1203
                    'pathData' => $pathData,
1204
                    'alwaysAvailable' => $alwaysAvailable,
1205
                    'isHistory' => false,
1206
                    'isCustom' => false,
1207
                    'forward' => false,
1208
                )
1209
            ),
1210
            $urlAlias
1211
        );
1212
    }
1213
1214
    /**
1215
     * Test for the publishUrlAliasForLocation() method.
1216
     *
1217
     * @todo document
1218
     *
1219
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1220
     * @depends testPublishUrlAliasForLocation
1221
     * @group publish
1222
     */
1223
    public function testPublishUrlAliasForLocationSameAliasForMultipleLanguages()
1224
    {
1225
        $handler = $this->getHandler();
1226
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
1227
1228
        $handler->publishUrlAliasForLocation(314, 2, 'jedan', 'cro-HR', false);
1229
        $urlAlias1 = $handler->lookup('jedan');
1230
        $handler->publishUrlAliasForLocation(314, 2, 'jedan', 'eng-GB', false);
1231
        $urlAlias2 = $handler->lookup('jedan');
1232
1233
        self::assertEquals(4, $this->countRows());
1234
1235
        foreach ($urlAlias2 as $propertyName => $propertyValue) {
0 ignored issues
show
Bug introduced by
The expression $urlAlias2 of type object<eZ\Publish\SPI\Pe...tence\Content\UrlAlias> is not traversable.
Loading history...
1236
            if ($propertyName === 'languageCodes') {
1237
                self::assertEquals(
1238
                    array('cro-HR', 'eng-GB'),
1239
                    $urlAlias2->languageCodes
1240
                );
1241
            } elseif ($propertyName === 'pathData') {
1242
                self::assertEquals(
1243
                    array(
1244
                        array(
1245
                            'always-available' => false,
1246
                            'translations' => array(
1247
                                'cro-HR' => 'jedan',
1248
                                'eng-GB' => 'jedan',
1249
                            ),
1250
                        ),
1251
                    ),
1252
                    $urlAlias2->pathData
1253
                );
1254
            } else {
1255
                self::assertEquals(
1256
                    $urlAlias1->$propertyName,
1257
                    $urlAlias2->$propertyName
1258
                );
1259
            }
1260
        }
1261
    }
1262
1263
    /**
1264
     * Test for the publishUrlAliasForLocation() method.
1265
     *
1266
     * @todo document
1267
     *
1268
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1269
     * @depends testPublishUrlAliasForLocation
1270
     * @group publish
1271
     */
1272
    public function testPublishUrlAliasForLocationDowngradesOldEntryToHistory()
1273
    {
1274
        $handler = $this->getHandler();
1275
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
1276
1277
        $handler->publishUrlAliasForLocation(314, 2, 'jedan', 'cro-HR', false);
1278
        $handler->publishUrlAliasForLocation(314, 2, 'dva', 'cro-HR', true);
1279
1280
        self::assertEquals(5, $this->countRows());
1281
1282
        $newUrlAlias = $handler->lookup('dva');
1283
1284
        self::assertEquals(
1285
            new UrlAlias(
1286
                array(
1287
                    'id' => '0-c67ed9a09ab136fae610b6a087d82e21',
1288
                    'type' => 0,
1289
                    'destination' => 314,
1290
                    'languageCodes' => array('cro-HR'),
1291
                    'pathData' => array(
1292
                        array(
1293
                            'always-available' => true,
1294
                            'translations' => array(
1295
                                'cro-HR' => 'dva',
1296
                            ),
1297
                        ),
1298
                    ),
1299
                    'alwaysAvailable' => true,
1300
                    'isHistory' => false,
1301
                    'isCustom' => false,
1302
                    'forward' => false,
1303
                )
1304
            ),
1305
            $newUrlAlias
1306
        );
1307
1308
        $historyUrlAlias = $handler->lookup('jedan');
1309
1310
        self::assertEquals(
1311
            new UrlAlias(
1312
                array(
1313
                    'id' => '0-6896260129051a949051c3847c34466f',
1314
                    'type' => 0,
1315
                    'destination' => 314,
1316
                    'languageCodes' => array('cro-HR'),
1317
                    'pathData' => array(
1318
                        array(
1319
                            'always-available' => false,
1320
                            'translations' => array(
1321
                                'cro-HR' => 'jedan',
1322
                            ),
1323
                        ),
1324
                    ),
1325
                    'alwaysAvailable' => false,
1326
                    'isHistory' => true,
1327
                    'isCustom' => false,
1328
                    'forward' => false,
1329
                )
1330
            ),
1331
            $historyUrlAlias
1332
        );
1333
    }
1334
1335
    /**
1336
     * Test for the publishUrlAliasForLocation() method.
1337
     *
1338
     * @todo document
1339
     *
1340
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1341
     * @depends testPublishUrlAliasForLocation
1342
     * @depends testPublishUrlAliasForLocationSameAliasForMultipleLanguages
1343
     * @group publish
1344
     * @group downgrade
1345
     */
1346
    public function testPublishUrlAliasForLocationDowngradesOldEntryRemovesLanguage()
1347
    {
1348
        $handler = $this->getHandler();
1349
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
1350
1351
        $handler->publishUrlAliasForLocation(314, 2, 'jedan', 'cro-HR');
1352
        $handler->publishUrlAliasForLocation(314, 2, 'jedan', 'eng-GB');
1353
        $handler->publishUrlAliasForLocation(314, 2, 'dva', 'eng-GB');
1354
1355
        self::assertEquals(5, $this->countRows());
1356
1357
        $urlAlias = $handler->lookup('dva');
1358
        self::assertEquals(
1359
            new UrlAlias(
1360
                array(
1361
                    'id' => '0-c67ed9a09ab136fae610b6a087d82e21',
1362
                    'type' => UrlAlias::LOCATION,
1363
                    'destination' => 314,
1364
                    'languageCodes' => array('eng-GB'),
1365
                    'pathData' => array(
1366
                        array(
1367
                            'always-available' => false,
1368
                            'translations' => array(
1369
                                'cro-HR' => 'jedan',
1370
                                'eng-GB' => 'dva',
1371
                            ),
1372
                        ),
1373
                    ),
1374
                    'alwaysAvailable' => false,
1375
                    'isHistory' => false,
1376
                    'isCustom' => false,
1377
                    'forward' => false,
1378
                )
1379
            ),
1380
            $urlAlias
1381
        );
1382
1383
        $downgradedUrlAlias = $handler->lookup('jedan');
1384
        self::assertEquals(
1385
            new UrlAlias(
1386
                array(
1387
                    'id' => '0-6896260129051a949051c3847c34466f',
1388
                    'type' => UrlAlias::LOCATION,
1389
                    'destination' => 314,
1390
                    'languageCodes' => array('cro-HR'),
1391
                    'pathData' => array(
1392
                        array(
1393
                            'always-available' => false,
1394
                            'translations' => array(
1395
                                'cro-HR' => 'jedan',
1396
                                'eng-GB' => 'dva',
1397
                            ),
1398
                        ),
1399
                    ),
1400
                    'alwaysAvailable' => false,
1401
                    'isHistory' => false,
1402
                    'isCustom' => false,
1403
                    'forward' => false,
1404
                )
1405
            ),
1406
            $downgradedUrlAlias
1407
        );
1408
    }
1409
1410
    /**
1411
     * Test for the publishUrlAliasForLocation() method.
1412
     *
1413
     * @todo document
1414
     *
1415
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1416
     * @depends testPublishUrlAliasForLocation
1417
     * @depends testPublishUrlAliasForLocationDowngradesOldEntryToHistory
1418
     * @group publish
1419
     */
1420
    public function testPublishUrlAliasForLocationReusesHistory()
1421
    {
1422
        $handler = $this->getHandler();
1423
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
1424
1425
        $handler->publishUrlAliasForLocation(314, 2, 'jedan', 'cro-HR');
1426
        $urlAlias = $handler->lookup('jedan');
1427
        $handler->publishUrlAliasForLocation(314, 2, 'dva', 'cro-HR');
1428
        $countBeforeReusing = $this->countRows();
1429
        $handler->publishUrlAliasForLocation(314, 2, 'jedan', 'cro-HR');
1430
        $urlAliasReusesHistory = $handler->lookup('jedan');
1431
1432
        self::assertEquals(
1433
            $countBeforeReusing,
1434
            $this->countRows()
1435
        );
1436
1437
        self::assertEquals(
1438
            $urlAlias,
1439
            $urlAliasReusesHistory
1440
        );
1441
    }
1442
1443
    /**
1444
     * Test for the publishUrlAliasForLocation() method.
1445
     *
1446
     * @todo document
1447
     *
1448
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1449
     * @depends testPublishUrlAliasForLocation
1450
     * @depends testPublishUrlAliasForLocationDowngradesOldEntryToHistory
1451
     * @group publish
1452
     */
1453
    public function testPublishUrlAliasForLocationReusesHistoryOfDifferentLanguage()
1454
    {
1455
        $handler = $this->getHandler();
1456
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
1457
1458
        $handler->publishUrlAliasForLocation(314, 2, 'jedan', 'cro-HR');
1459
        $handler->publishUrlAliasForLocation(314, 2, 'one-history', 'eng-GB');
1460
        $handler->publishUrlAliasForLocation(314, 2, 'one-new', 'eng-GB');
1461
        $countBeforeReusing = $this->countRows();
1462
        $handler->publishUrlAliasForLocation(314, 2, 'one-history', 'cro-HR');
1463
        $urlAliasReusesHistory = $handler->lookup('one-history');
1464
1465
        self::assertEquals(
1466
            $countBeforeReusing,
1467
            $this->countRows()
1468
        );
1469
1470
        self::assertEquals(
1471
            new UrlAlias(
1472
                array(
1473
                    'id' => '0-' . md5('one-history'),
1474
                    'type' => UrlAlias::LOCATION,
1475
                    'destination' => 314,
1476
                    'languageCodes' => array('cro-HR'),
1477
                    'pathData' => array(
1478
                        array(
1479
                            'always-available' => false,
1480
                            'translations' => array(
1481
                                'cro-HR' => 'one-history',
1482
                                'eng-GB' => 'one-new',
1483
                            ),
1484
                        ),
1485
                    ),
1486
                    'alwaysAvailable' => false,
1487
                    'isHistory' => false,
1488
                    'isCustom' => false,
1489
                    'forward' => false,
1490
                )
1491
            ),
1492
            $urlAliasReusesHistory
1493
        );
1494
    }
1495
1496
    /**
1497
     * Test for the publishUrlAliasForLocation() method.
1498
     *
1499
     * @todo document
1500
     *
1501
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1502
     * @depends testPublishUrlAliasForLocation
1503
     * @group publish
1504
     */
1505 View Code Duplication
    public function testPublishUrlAliasForLocationReusesCustomAlias()
1506
    {
1507
        $handler = $this->getHandler();
1508
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_reusing.php');
1509
1510
        $countBeforeReusing = $this->countRows();
1511
        $handler->publishUrlAliasForLocation(314, 2, 'custom-hello', 'eng-GB', false);
1512
        $urlAlias = $handler->lookup('custom-hello');
1513
1514
        self::assertEquals(
1515
            $countBeforeReusing,
1516
            $this->countRows()
1517
        );
1518
        self::assertFalse($urlAlias->isCustom);
1519
    }
1520
1521
    /**
1522
     * Test for the publishUrlAliasForLocation() method.
1523
     *
1524
     * @todo document
1525
     *
1526
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1527
     * @depends testPublishUrlAliasForLocation
1528
     */
1529
    public function testPublishUrlAliasForLocationReusingNopElement()
1530
    {
1531
        $handler = $this->getHandler();
1532
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_reusing.php');
1533
1534
        $countBeforeReusing = $this->countRows();
1535
        $virtualUrlAlias = $handler->lookup('nop-element/search');
1536
        $handler->publishUrlAliasForLocation(315, 2, 'nop-element', 'eng-GB', false);
1537
        $publishedLocationUrlAlias = $handler->lookup('nop-element');
1538
1539
        self::assertEquals(
1540
            $countBeforeReusing,
1541
            $this->countRows()
1542
        );
1543
1544
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $publishedLocationUrlAlias);
1545
        self::assertEquals(
1546
            new UrlAlias(
1547
                array(
1548
                    'id' => '0-de55c2fff721217cc4cb67b58dc35f85',
1549
                    'type' => UrlAlias::LOCATION,
1550
                    'destination' => 315,
1551
                    'languageCodes' => array('eng-GB'),
1552
                    'pathData' => array(
1553
                        array(
1554
                            'always-available' => false,
1555
                            'translations' => array('eng-GB' => 'nop-element'),
1556
                        ),
1557
                    ),
1558
                    'alwaysAvailable' => false,
1559
                    'isHistory' => false,
1560
                    'isCustom' => false,
1561
                    'forward' => false,
1562
                )
1563
            ),
1564
            $publishedLocationUrlAlias
1565
        );
1566
1567
        $virtualUrlAliasReloaded = $handler->lookup('nop-element/search');
1568 View Code Duplication
        foreach ($virtualUrlAliasReloaded as $propertyName => $propertyValue) {
0 ignored issues
show
Bug introduced by
The expression $virtualUrlAliasReloaded of type object<eZ\Publish\SPI\Pe...tence\Content\UrlAlias> is not traversable.
Loading history...
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1569
            if ($propertyName === 'pathData') {
1570
                self::assertEquals(
1571
                    array(
1572
                        array(
1573
                            'always-available' => false,
1574
                            'translations' => array('eng-GB' => 'nop-element'),
1575
                        ),
1576
                        array(
1577
                            'always-available' => false,
1578
                            'translations' => array('eng-GB' => 'search'),
1579
                        ),
1580
                    ),
1581
                    $virtualUrlAliasReloaded->pathData
1582
                );
1583
            } else {
1584
                self::assertEquals(
1585
                    $virtualUrlAlias->$propertyName,
1586
                    $virtualUrlAliasReloaded->$propertyName
1587
                );
1588
            }
1589
        }
1590
    }
1591
1592
    /**
1593
     * Test for the publishUrlAliasForLocation() method.
1594
     *
1595
     * @todo document
1596
     *
1597
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1598
     * @depends testPublishUrlAliasForLocation
1599
     * @depends testPublishUrlAliasForLocationReusingNopElement
1600
     */
1601
    public function testPublishUrlAliasForLocationReusingNopElementChangesCustomPath()
1602
    {
1603
        $handler = $this->getHandler();
1604
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_reusing.php');
1605
1606
        $countBeforeReusing = $this->countRows();
1607
        $virtualUrlAlias = $handler->lookup('nop-element/search');
1608
        $handler->publishUrlAliasForLocation(315, 2, 'nop-element', 'eng-GB', false);
1609
        $handler->publishUrlAliasForLocation(315, 2, 'nop-element-renamed', 'eng-GB', false);
1610
        $virtualUrlAliasChanged = $handler->lookup('nop-element-renamed/search');
1611
1612
        self::assertEquals(
1613
            $countBeforeReusing + 1,
1614
            $this->countRows()
1615
        );
1616
1617 View Code Duplication
        foreach ($virtualUrlAliasChanged as $propertyName => $propertyValue) {
0 ignored issues
show
Bug introduced by
The expression $virtualUrlAliasChanged of type object<eZ\Publish\SPI\Pe...tence\Content\UrlAlias> is not traversable.
Loading history...
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1618
            if ($propertyName === 'pathData') {
1619
                self::assertEquals(
1620
                    array(
1621
                        array(
1622
                            'always-available' => false,
1623
                            'translations' => array('eng-GB' => 'nop-element-renamed'),
1624
                        ),
1625
                        array(
1626
                            'always-available' => false,
1627
                            'translations' => array('eng-GB' => 'search'),
1628
                        ),
1629
                    ),
1630
                    $virtualUrlAliasChanged->pathData
1631
                );
1632
            } else {
1633
                self::assertEquals(
1634
                    $virtualUrlAlias->$propertyName,
1635
                    $virtualUrlAliasChanged->$propertyName
1636
                );
1637
            }
1638
        }
1639
    }
1640
1641
    /**
1642
     * Test for the publishUrlAliasForLocation() method.
1643
     *
1644
     * @todo document
1645
     *
1646
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1647
     * @depends testPublishUrlAliasForLocation
1648
     * @depends testPublishUrlAliasForLocationReusingNopElementChangesCustomPath
1649
     */
1650
    public function testPublishUrlAliasForLocationReusingNopElementChangesCustomPathAndCreatesHistory()
1651
    {
1652
        $handler = $this->getHandler();
1653
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_reusing.php');
1654
1655
        $handler->publishUrlAliasForLocation(315, 2, 'nop-element', 'eng-GB', false);
1656
        $handler->publishUrlAliasForLocation(315, 2, 'nop-element-renamed', 'eng-GB', false);
1657
1658
        $customUrlAliasChanged = $handler->lookup('nop-element-renamed/search');
1659
        $customUrlAliasHistory = $handler->lookup('nop-element/search');
1660
1661
        self::assertTrue($customUrlAliasHistory->isHistory);
1662
        $customUrlAliasHistory->isHistory = false;
1663
        self::assertEquals(
1664
            $customUrlAliasChanged,
1665
            $customUrlAliasHistory
1666
        );
1667
    }
1668
1669
    /**
1670
     * Test for the publishUrlAliasForLocation() method.
1671
     *
1672
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1673
     */
1674
    public function testPublishUrlAliasForLocationUpdatesLocationPathIdentificationString()
1675
    {
1676
        $handler = $this->getHandler();
1677
        $locationGateway = $this->getLocationGateway();
1678
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
1679
1680
        // Publishes the alias indicating that language is main, triggering updating of path_identification_string
1681
        $handler->publishUrlAliasForLocation(316, 315, 'TEST TEST TEST', 'eng-GB', false, true);
1682
1683
        $locationData = $locationGateway->getBasicNodeData(316);
1684
1685
        self::assertEquals('path314/path315/test_test_test', $locationData['path_identification_string']);
1686
    }
1687
1688
    /**
1689
     * Test for the publishUrlAliasForLocation() method.
1690
     *
1691
     * @group cleanup
1692
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1693
     */
1694
    public function testPublishUrlAliasReuseNopCleanupCustomAliasIsDestroyed()
1695
    {
1696
        $handler = $this->getHandler();
1697
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_cleanup_nop.php');
1698
1699
        $handler->lookup('nop-element/search');
1700
        $handler->publishUrlAliasForLocation(314, 2, 'nop-element', 'cro-HR', false);
1701
1702
        $urlAlias = $handler->lookup('jedan');
1703
        $this->assertEquals(
1704
            new UrlAlias(
1705
                array(
1706
                    'id' => '0-' . md5('jedan'),
1707
                    'type' => UrlAlias::LOCATION,
1708
                    'destination' => 314,
1709
                    'pathData' => array(
1710
                        array(
1711
                            'always-available' => false,
1712
                            'translations' => array('cro-HR' => 'jedan'),
1713
                        ),
1714
                    ),
1715
                    'languageCodes' => array('cro-HR'),
1716
                    'alwaysAvailable' => false,
1717
                    'isHistory' => true,
1718
                    'isCustom' => false,
1719
                    'forward' => false,
1720
                )
1721
            ),
1722
            $urlAlias
1723
        );
1724
1725
        $urlAlias = $handler->lookup('nop-element');
1726
        $this->assertEquals(
1727
            new UrlAlias(
1728
                array(
1729
                    'id' => '0-' . md5('nop-element'),
1730
                    'type' => UrlAlias::LOCATION,
1731
                    'destination' => 314,
1732
                    'pathData' => array(
1733
                        array(
1734
                            'always-available' => false,
1735
                            'translations' => array(
1736
                                'cro-HR' => 'nop-element',
1737
                                'eng-GB' => 'dva',
1738
                            ),
1739
                        ),
1740
                    ),
1741
                    'languageCodes' => array(
1742
                        'cro-HR',
1743
                    ),
1744
                    'alwaysAvailable' => false,
1745
                    'isHistory' => false,
1746
                    'isCustom' => false,
1747
                    'forward' => false,
1748
                )
1749
            ),
1750
            $urlAlias
1751
        );
1752
1753
        try {
1754
            $handler->lookup('nop-element/search');
1755
            $this->fail('Custom alias is not destroyed');
1756
        } catch (NotFoundException $e) {
1757
            // Custom alias is destroyed by reusing NOP entry with existing autogenerated alias
1758
            // on the same level (that means link and ID are updated to the existing alias ID,
1759
            // so custom alias children entries are no longer properly linked (parent-link))
1760
        }
1761
    }
1762
1763
    /**
1764
     * Test for the publishUrlAliasForLocation() method.
1765
     *
1766
     * @group cleanup
1767
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1768
     */
1769 View Code Duplication
    public function testPublishUrlAliasReuseHistoryCleanup()
1770
    {
1771
        $handler = $this->getHandler();
1772
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_cleanup_history.php');
1773
1774
        $handler->publishUrlAliasForLocation(314, 2, 'tri', 'cro-HR', false);
1775
1776
        $urlAlias = $handler->lookup('jedan');
1777
        $this->assertEquals(
1778
            new UrlAlias(
1779
                array(
1780
                    'id' => '0-' . md5('jedan'),
1781
                    'type' => UrlAlias::LOCATION,
1782
                    'destination' => 314,
1783
                    'pathData' => array(
1784
                        array(
1785
                            'always-available' => false,
1786
                            'translations' => array('cro-HR' => 'jedan'),
1787
                        ),
1788
                    ),
1789
                    'languageCodes' => array('cro-HR'),
1790
                    'alwaysAvailable' => false,
1791
                    'isHistory' => true,
1792
                    'isCustom' => false,
1793
                    'forward' => false,
1794
                )
1795
            ),
1796
            $urlAlias
1797
        );
1798
1799
        $urlAlias = $handler->lookup('tri');
1800
        $this->assertEquals(
1801
            new UrlAlias(
1802
                array(
1803
                    'id' => '0-' . md5('tri'),
1804
                    'type' => UrlAlias::LOCATION,
1805
                    'destination' => 314,
1806
                    'pathData' => array(
1807
                        array(
1808
                            'always-available' => false,
1809
                            'translations' => array(
1810
                                'cro-HR' => 'tri',
1811
                                'eng-GB' => 'dva',
1812
                            ),
1813
                        ),
1814
                    ),
1815
                    'languageCodes' => array(
1816
                        'cro-HR',
1817
                    ),
1818
                    'alwaysAvailable' => false,
1819
                    'isHistory' => false,
1820
                    'isCustom' => false,
1821
                    'forward' => false,
1822
                )
1823
            ),
1824
            $urlAlias
1825
        );
1826
    }
1827
1828
    /**
1829
     * Test for the publishUrlAliasForLocation() method.
1830
     *
1831
     * @group cleanup
1832
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::publishUrlAliasForLocation
1833
     */
1834 View Code Duplication
    public function testPublishUrlAliasReuseAutogeneratedCleanup()
1835
    {
1836
        $handler = $this->getHandler();
1837
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_cleanup_reusing.php');
1838
1839
        $handler->publishUrlAliasForLocation(314, 2, 'dva', 'cro-HR', false);
1840
1841
        $urlAlias = $handler->lookup('jedan');
1842
        $this->assertEquals(
1843
            new UrlAlias(
1844
                array(
1845
                    'id' => '0-' . md5('jedan'),
1846
                    'type' => UrlAlias::LOCATION,
1847
                    'destination' => 314,
1848
                    'pathData' => array(
1849
                        array(
1850
                            'always-available' => false,
1851
                            'translations' => array('cro-HR' => 'jedan'),
1852
                        ),
1853
                    ),
1854
                    'languageCodes' => array('cro-HR'),
1855
                    'alwaysAvailable' => false,
1856
                    'isHistory' => true,
1857
                    'isCustom' => false,
1858
                    'forward' => false,
1859
                )
1860
            ),
1861
            $urlAlias
1862
        );
1863
1864
        $urlAlias = $handler->lookup('dva');
1865
        $this->assertEquals(
1866
            new UrlAlias(
1867
                array(
1868
                    'id' => '0-' . md5('dva'),
1869
                    'type' => UrlAlias::LOCATION,
1870
                    'destination' => 314,
1871
                    'pathData' => array(
1872
                        array(
1873
                            'always-available' => false,
1874
                            'translations' => array(
1875
                                'cro-HR' => 'dva',
1876
                                'eng-GB' => 'dva',
1877
                            ),
1878
                        ),
1879
                    ),
1880
                    'languageCodes' => array(
1881
                        'cro-HR',
1882
                        'eng-GB',
1883
                    ),
1884
                    'alwaysAvailable' => false,
1885
                    'isHistory' => false,
1886
                    'isCustom' => false,
1887
                    'forward' => false,
1888
                )
1889
            ),
1890
            $urlAlias
1891
        );
1892
    }
1893
1894
    /**
1895
     * Test for the createCustomUrlAlias() method.
1896
     *
1897
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::createCustomUrlAlias
1898
     * @group create
1899
     * @group custom
1900
     */
1901 View Code Duplication
    public function testCreateCustomUrlAliasBehaviour()
1902
    {
1903
        $handlerMock = $this->getPartlyMockedHandler(array('createUrlAlias'));
1904
1905
        $handlerMock->expects(
1906
            $this->once()
1907
        )->method(
1908
            'createUrlAlias'
1909
        )->with(
1910
            $this->equalTo('eznode:1'),
1911
            $this->equalTo('path'),
1912
            $this->equalTo(false),
1913
            $this->equalTo(null),
1914
            $this->equalTo(false)
1915
        )->will(
1916
            $this->returnValue(
1917
                new UrlAlias()
1918
            )
1919
        );
1920
1921
        $this->assertInstanceOf(
1922
            'eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias',
1923
            $handlerMock->createCustomUrlAlias(1, 'path')
1924
        );
1925
    }
1926
1927
    /**
1928
     * Test for the createGlobalUrlAlias() method.
1929
     *
1930
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::createGlobalUrlAlias
1931
     * @group create
1932
     * @group global
1933
     */
1934 View Code Duplication
    public function testCreateGlobalUrlAliasBehaviour()
1935
    {
1936
        $handlerMock = $this->getPartlyMockedHandler(array('createUrlAlias'));
1937
1938
        $handlerMock->expects(
1939
            $this->once()
1940
        )->method(
1941
            'createUrlAlias'
1942
        )->with(
1943
            $this->equalTo('module/module'),
1944
            $this->equalTo('path'),
1945
            $this->equalTo(false),
1946
            $this->equalTo(null),
1947
            $this->equalTo(false)
1948
        )->will(
1949
            $this->returnValue(
1950
                new UrlAlias()
1951
            )
1952
        );
1953
1954
        $this->assertInstanceOf(
1955
            'eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias',
1956
            $handlerMock->createGlobalUrlAlias('module/module', 'path')
1957
        );
1958
    }
1959
1960
    /**
1961
     * Test for the createUrlAlias() method.
1962
     *
1963
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::createUrlAlias
1964
     * @group create
1965
     * @group custom
1966
     */
1967
    public function testCreateCustomUrlAlias()
1968
    {
1969
        $handler = $this->getHandler();
1970
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
1971
1972
        $path = 'custom-location-alias';
1973
        $customUrlAlias = $handler->createCustomUrlAlias(
1974
            314,
1975
            $path,
1976
            false,
1977
            'cro-HR',
1978
            false
1979
        );
1980
1981
        self::assertEquals(4, $this->countRows());
1982
        self::assertEquals(
1983
            new UrlAlias(
1984
                array(
1985
                    'id' => '0-' . md5($path),
1986
                    'type' => UrlAlias::LOCATION,
1987
                    'destination' => 314,
1988
                    'pathData' => array(
1989
                        array(
1990
                            'always-available' => false,
1991
                            'translations' => array(
1992
                                'cro-HR' => 'custom-location-alias',
1993
                            ),
1994
                        ),
1995
                    ),
1996
                    'languageCodes' => array('cro-HR'),
1997
                    'alwaysAvailable' => false,
1998
                    'isHistory' => false,
1999
                    'isCustom' => true,
2000
                    'forward' => false,
2001
                )
2002
            ),
2003
            $customUrlAlias
2004
        );
2005
    }
2006
2007
    /**
2008
     * Test for the createUrlAlias() method.
2009
     *
2010
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::createUrlAlias
2011
     * @group create
2012
     * @group custom
2013
     */
2014
    public function testCreateCustomUrlAliasWithNonameParts()
2015
    {
2016
        $handler = $this->getHandler();
2017
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
2018
2019
        $path = 'there-is-a//custom-location-alias//here';
2020
        $customUrlAlias = $handler->createCustomUrlAlias(
2021
            314,
2022
            $path,
2023
            false,
2024
            'cro-HR',
2025
            false
2026
        );
2027
2028
        self::assertEquals(8, $this->countRows());
2029
2030
        self::assertEquals(
2031
            new UrlAlias(
2032
                array(
2033
                    'id' => '7-' . md5('here'),
2034
                    'type' => UrlAlias::LOCATION,
2035
                    'destination' => 314,
2036
                    'pathData' => array(
2037
                        array(
2038
                            'always-available' => true,
2039
                            'translations' => array(
2040
                                'always-available' => 'there-is-a',
2041
                            ),
2042
                        ),
2043
                        array(
2044
                            'always-available' => true,
2045
                            'translations' => array(
2046
                                'always-available' => 'noname2',
2047
                            ),
2048
                        ),
2049
                        array(
2050
                            'always-available' => true,
2051
                            'translations' => array(
2052
                                'always-available' => 'custom-location-alias',
2053
                            ),
2054
                        ),
2055
                        array(
2056
                            'always-available' => true,
2057
                            'translations' => array(
2058
                                'always-available' => 'noname4',
2059
                            ),
2060
                        ),
2061
                        array(
2062
                            'always-available' => false,
2063
                            'translations' => array(
2064
                                'cro-HR' => 'here',
2065
                            ),
2066
                        ),
2067
                    ),
2068
                    'languageCodes' => array('cro-HR'),
2069
                    'alwaysAvailable' => false,
2070
                    'isHistory' => false,
2071
                    'isCustom' => true,
2072
                    'forward' => false,
2073
                )
2074
            ),
2075
            $customUrlAlias
2076
        );
2077
    }
2078
2079
    /**
2080
     * Test for the createUrlAlias() method.
2081
     *
2082
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::createUrlAlias
2083
     * @group create
2084
     * @group custom
2085
     *
2086
     * @todo pathData
2087
     */
2088
    public function testCreatedCustomUrlAliasIsLoadable()
2089
    {
2090
        $handler = $this->getHandler();
2091
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
2092
2093
        $path = 'custom-location-alias';
2094
        $customUrlAlias = $handler->createCustomUrlAlias(
2095
            314,
2096
            $path,
2097
            false,
2098
            'cro-HR',
2099
            false
2100
        );
2101
        $loadedCustomUrlAlias = $handler->lookup($path);
2102
2103
        self::assertEquals(4, $this->countRows());
2104
2105
        foreach ($loadedCustomUrlAlias as $propertyName => $propertyValue) {
0 ignored issues
show
Bug introduced by
The expression $loadedCustomUrlAlias of type object<eZ\Publish\SPI\Pe...tence\Content\UrlAlias> is not traversable.
Loading history...
2106
            if ($propertyName === 'pathData') {
2107
                self::assertEquals(
2108
                    array(
2109
                        array(
2110
                            'always-available' => false,
2111
                            'translations' => array('cro-HR' => $path),
2112
                        ),
2113
                    ),
2114
                    $loadedCustomUrlAlias->$propertyName
2115
                );
2116
            } else {
2117
                self::assertEquals(
2118
                    $customUrlAlias->$propertyName,
2119
                    $loadedCustomUrlAlias->$propertyName
2120
                );
2121
            }
2122
        }
2123
    }
2124
2125
    /**
2126
     * Test for the createUrlAlias() method.
2127
     *
2128
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::createUrlAlias
2129
     * @group create
2130
     * @group custom
2131
     */
2132
    public function testCreateCustomUrlAliasWithNopElement()
2133
    {
2134
        $handler = $this->getHandler();
2135
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/publish_base.php');
2136
2137
        $path = 'ribar/palunko';
2138
        $customUrlAlias = $handler->createCustomUrlAlias(
2139
            314,
2140
            $path,
2141
            false,
2142
            'cro-HR',
2143
            true
2144
        );
2145
2146
        self::assertEquals(5, $this->countRows());
2147
        self::assertEquals(
2148
            new UrlAlias(
2149
                array(
2150
                    'id' => '4-' . md5('palunko'),
2151
                    'type' => UrlAlias::LOCATION,
2152
                    'destination' => 314,
2153
                    'pathData' => array(
2154
                        array(
2155
                            'always-available' => true,
2156
                            'translations' => array(
2157
                                'always-available' => 'ribar',
2158
                            ),
2159
                        ),
2160
                        array(
2161
                            'always-available' => true,
2162
                            'translations' => array(
2163
                                'cro-HR' => 'palunko',
2164
                            ),
2165
                        ),
2166
                    ),
2167
                    'languageCodes' => array('cro-HR'),
2168
                    'alwaysAvailable' => true,
2169
                    'isHistory' => false,
2170
                    'isCustom' => true,
2171
                    'forward' => false,
2172
                )
2173
            ),
2174
            $customUrlAlias
2175
        );
2176
2177
        return $handler;
2178
    }
2179
2180
    /**
2181
     * Test for the createUrlAlias() method.
2182
     *
2183
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::createUrlAlias
2184
     * @depends testCreateCustomUrlAliasWithNopElement
2185
     * @group create
2186
     * @group custom
2187
     */
2188
    public function testCreateUrlAliasWithNopElementCreatesValidNopElement(Handler $handler)
2189
    {
2190
        $url = 'ribar';
2191
        $urlAlias = $handler->lookup($url);
2192
2193
        $this->assertVirtualUrlAliasValid(
2194
            $urlAlias,
2195
            '0-' . md5($url)
2196
        );
2197
    }
2198
2199
    /**
2200
     * Test for the createUrlAlias() method.
2201
     *
2202
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::createUrlAlias
2203
     * @group create
2204
     * @group custom
2205
     */
2206 View Code Duplication
    public function testCreateCustomUrlAliasReusesHistory()
2207
    {
2208
        $handler = $this->getHandler();
2209
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_reusing.php');
2210
2211
        $countBeforeReusing = $this->countRows();
2212
        $handler->createCustomUrlAlias(
2213
            314,
2214
            'history-hello',
2215
            true,
2216
            'eng-GB',
2217
            true
2218
        );
2219
2220
        self::assertEquals(
2221
            $countBeforeReusing,
2222
            $this->countRows()
2223
        );
2224
        self::assertEquals(
2225
            new UrlAlias(
2226
                array(
2227
                    'id' => '0-da94285592c46d4396d3ca6904a4aa8f',
2228
                    'type' => UrlAlias::LOCATION,
2229
                    'destination' => 314,
2230
                    'languageCodes' => array('eng-GB'),
2231
                    'pathData' => array(
2232
                        array(
2233
                            'always-available' => true,
2234
                            'translations' => array('eng-GB' => 'history-hello'),
2235
                        ),
2236
                    ),
2237
                    'alwaysAvailable' => true,
2238
                    'isHistory' => false,
2239
                    'isCustom' => true,
2240
                    'forward' => true,
2241
                )
2242
            ),
2243
            $handler->lookup('history-hello')
2244
        );
2245
    }
2246
2247
    /**
2248
     * Test for the createUrlAlias() method.
2249
     *
2250
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::createUrlAlias
2251
     * @group create
2252
     * @group custom
2253
     */
2254 View Code Duplication
    public function testCreateCustomUrlAliasReusesHistoryOfDifferentLanguage()
2255
    {
2256
        $handler = $this->getHandler();
2257
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_reusing.php');
2258
2259
        $countBeforeReusing = $this->countRows();
2260
        $handler->createCustomUrlAlias(
2261
            314,
2262
            'history-hello',
2263
            true,
2264
            'cro-HR',
2265
            true
2266
        );
2267
2268
        self::assertEquals(
2269
            $countBeforeReusing,
2270
            $this->countRows()
2271
        );
2272
        self::assertEquals(
2273
            new UrlAlias(
2274
                array(
2275
                    'id' => '0-da94285592c46d4396d3ca6904a4aa8f',
2276
                    'type' => UrlAlias::LOCATION,
2277
                    'destination' => 314,
2278
                    'languageCodes' => array('cro-HR'),
2279
                    'pathData' => array(
2280
                        array(
2281
                            'always-available' => true,
2282
                            'translations' => array('cro-HR' => 'history-hello'),
2283
                        ),
2284
                    ),
2285
                    'alwaysAvailable' => true,
2286
                    'isHistory' => false,
2287
                    'isCustom' => true,
2288
                    'forward' => true,
2289
                )
2290
            ),
2291
            $handler->lookup('history-hello')
2292
        );
2293
    }
2294
2295
    /**
2296
     * Test for the createUrlAlias() method.
2297
     *
2298
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::createUrlAlias
2299
     * @group create
2300
     * @group custom
2301
     */
2302
    public function testCreateCustomUrlAliasReusesNopElement()
2303
    {
2304
        $handler = $this->getHandler();
2305
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_reusing.php');
2306
2307
        $countBeforeReusing = $this->countRows();
2308
        $handler->createCustomUrlAlias(
2309
            314,
2310
            'nop-element',
2311
            true,
2312
            'cro-HR',
2313
            true
2314
        );
2315
2316
        self::assertEquals(
2317
            $countBeforeReusing,
2318
            $this->countRows()
2319
        );
2320
2321
        // Check that custom alias whose nop element was reused still works as expected
2322
        self::assertEquals(
2323
            new UrlAlias(
2324
                array(
2325
                    'id' => '2-06a943c59f33a34bb5924aaf72cd2995',
2326
                    'type' => UrlAlias::RESOURCE,
2327
                    'destination' => 'content/search',
2328
                    'languageCodes' => array('eng-GB'),
2329
                    'pathData' => array(
2330
                        array(
2331
                            'always-available' => true,
2332
                            'translations' => array('cro-HR' => 'nop-element'),
2333
                        ),
2334
                        array(
2335
                            'always-available' => false,
2336
                            'translations' => array('eng-GB' => 'search'),
2337
                        ),
2338
                    ),
2339
                    'alwaysAvailable' => false,
2340
                    'isHistory' => false,
2341
                    'isCustom' => true,
2342
                    'forward' => false,
2343
                )
2344
            ),
2345
            $handler->lookup('nop-element/search')
2346
        );
2347
    }
2348
2349
    /**
2350
     * Test for the createUrlAlias() method.
2351
     *
2352
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::createUrlAlias
2353
     * @group create
2354
     * @group custom
2355
     */
2356 View Code Duplication
    public function testCreateCustomUrlAliasReusesLocationElement()
2357
    {
2358
        $handler = $this->getHandler();
2359
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_reusing.php');
2360
2361
        $countBeforeReusing = $this->countRows();
2362
        $locationUrlAlias = $handler->lookup('autogenerated-hello');
2363
        $handler->createCustomUrlAlias(
2364
            315,
2365
            'autogenerated-hello/custom-location-alias-for-315',
2366
            true,
2367
            'cro-HR',
2368
            true
2369
        );
2370
2371
        self::assertEquals(
2372
            $countBeforeReusing + 1,
2373
            $this->countRows()
2374
        );
2375
2376
        // Check that location alias still works as expected
2377
        self::assertEquals(
2378
            $locationUrlAlias,
2379
            $handler->lookup('autogenerated-hello')
2380
        );
2381
    }
2382
2383
    /**
2384
     * Test for the listGlobalURLAliases() method.
2385
     *
2386
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::listGlobalURLAliases
2387
     * @depends testLookupResourceUrlAlias
2388
     */
2389
    public function testListGlobalURLAliases()
2390
    {
2391
        $handler = $this->getHandler();
2392
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_resource.php');
2393
2394
        $globalAliasList = $handler->listGlobalURLAliases();
2395
2396
        self::assertEquals(
2397
            array(
2398
                $handler->lookup('is-alive'),
2399
                $handler->lookup('is-alive/then/search'),
2400
                $handler->lookup('nop-element/search'),
2401
            ),
2402
            $globalAliasList
2403
        );
2404
    }
2405
2406
    /**
2407
     * Test for the listGlobalURLAliases() method.
2408
     *
2409
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::listGlobalURLAliases
2410
     * @depends testLookupResourceUrlAlias
2411
     */
2412 View Code Duplication
    public function testListGlobalURLAliasesWithLanguageCode()
2413
    {
2414
        $handler = $this->getHandler();
2415
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_resource.php');
2416
2417
        $globalAliasList = $handler->listGlobalURLAliases('eng-GB');
2418
2419
        self::assertEquals(
2420
            array(
2421
                $handler->lookup('is-alive'),
2422
                $handler->lookup('nop-element/search'),
2423
            ),
2424
            $globalAliasList
2425
        );
2426
    }
2427
2428
    /**
2429
     * Test for the listGlobalURLAliases() method.
2430
     *
2431
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::listGlobalURLAliases
2432
     * @depends testLookupResourceUrlAlias
2433
     */
2434
    public function testListGlobalURLAliasesWithOffset()
2435
    {
2436
        $handler = $this->getHandler();
2437
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_resource.php');
2438
2439
        $globalAliasList = $handler->listGlobalURLAliases(null, 2);
2440
2441
        self::assertEquals(
2442
            array(
2443
                $handler->lookup('nop-element/search'),
2444
            ),
2445
            $globalAliasList
2446
        );
2447
    }
2448
2449
    /**
2450
     * Test for the listGlobalURLAliases() method.
2451
     *
2452
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::listGlobalURLAliases
2453
     * @depends testLookupResourceUrlAlias
2454
     */
2455
    public function testListGlobalURLAliasesWithOffsetAndLimit()
2456
    {
2457
        $handler = $this->getHandler();
2458
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_resource.php');
2459
2460
        $globalAliasList = $handler->listGlobalURLAliases(null, 1, 1);
2461
2462
        self::assertEquals(
2463
            array(
2464
                $handler->lookup('is-alive/then/search'),
2465
            ),
2466
            $globalAliasList
2467
        );
2468
    }
2469
2470
    /**
2471
     * Test for the locationDeleted() method.
2472
     *
2473
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationDeleted
2474
     */
2475
    public function testLocationDeleted()
2476
    {
2477
        $handler = $this->getHandler();
2478
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location_delete.php');
2479
2480
        $countBeforeDeleting = $this->countRows();
2481
2482
        $handler->locationDeleted(5);
2483
2484
        self::assertEquals(
2485
            $countBeforeDeleting - 5,
2486
            $this->countRows()
2487
        );
2488
2489
        self::assertEmpty(
2490
            $handler->listURLAliasesForLocation(5)
2491
        );
2492
2493
        $removedAliases = array(
2494
            'moved-original-parent/moved-history',
2495
            'moved-original-parent/sub',
2496
            'moved-original-parent',
2497
            'moved-original-parent-history',
2498
            'custom-below/moved-original-parent-custom',
2499
        );
2500
        foreach ($removedAliases as $path) {
2501
            try {
2502
                $handler->lookup($path);
2503
                $this->fail("Alias '$path' not removed!");
2504
            } catch (NotFoundException $e) {
2505
                // Do nothing
2506
            }
2507
        }
2508
    }
2509
2510
    /**
2511
     * Test for the locationMoved() method.
2512
     *
2513
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationMoved
2514
     */
2515 View Code Duplication
    public function testLocationMovedHistorize()
2516
    {
2517
        $handler = $this->getHandler();
2518
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_move.php');
2519
2520
        $handler->publishUrlAliasForLocation(4, 3, 'move-this', 'eng-GB', false);
2521
        $handler->locationMoved(4, 2, 3);
2522
2523
        $urlAlias = $handler->lookup('move-this');
2524
        self::assertEquals(
2525
            new UrlAlias(
2526
                array(
2527
                    'id' => '0-' . md5('move-this'),
2528
                    'type' => UrlAlias::LOCATION,
2529
                    'destination' => '4',
2530
                    'languageCodes' => array('eng-GB'),
2531
                    'pathData' => array(
2532
                        array(
2533
                            'always-available' => false,
2534
                            'translations' => array('eng-GB' => 'move-this'),
2535
                        ),
2536
                    ),
2537
                    'alwaysAvailable' => false,
2538
                    'isHistory' => true,
2539
                    'isCustom' => false,
2540
                    'forward' => false,
2541
                )
2542
            ),
2543
            $urlAlias
2544
        );
2545
    }
2546
2547
    /**
2548
     * Test for the locationMoved() method.
2549
     *
2550
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationMoved
2551
     */
2552 View Code Duplication
    public function testLocationMovedHistory()
2553
    {
2554
        $handler = $this->getHandler();
2555
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_move.php');
2556
2557
        $handler->publishUrlAliasForLocation(4, 3, 'move-this', 'eng-GB', false);
2558
        $handler->locationMoved(4, 2, 3);
2559
2560
        $urlAlias = $handler->lookup('move-this-history');
2561
        self::assertEquals(
2562
            new UrlAlias(
2563
                array(
2564
                    'id' => '0-' . md5('move-this-history'),
2565
                    'type' => UrlAlias::LOCATION,
2566
                    'destination' => '4',
2567
                    'languageCodes' => array('eng-GB'),
2568
                    'pathData' => array(
2569
                        array(
2570
                            'always-available' => false,
2571
                            'translations' => array('eng-GB' => 'move-this-history'),
2572
                        ),
2573
                    ),
2574
                    'alwaysAvailable' => false,
2575
                    'isHistory' => true,
2576
                    'isCustom' => false,
2577
                    'forward' => false,
2578
                )
2579
            ),
2580
            $urlAlias
2581
        );
2582
    }
2583
2584
    /**
2585
     * Test for the locationMoved() method.
2586
     *
2587
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationMoved
2588
     */
2589 View Code Duplication
    public function testLocationMovedHistorySubtree()
2590
    {
2591
        $handler = $this->getHandler();
2592
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_move.php');
2593
2594
        $handler->publishUrlAliasForLocation(4, 3, 'move-this', 'eng-GB', false);
2595
        $handler->locationMoved(4, 2, 3);
2596
2597
        $urlAlias = $handler->lookup('move-this/sub1/sub2');
2598
        self::assertEquals(
2599
            new UrlAlias(
2600
                array(
2601
                    'id' => '5-' . md5('sub2'),
2602
                    'type' => UrlAlias::LOCATION,
2603
                    'destination' => '6',
2604
                    'languageCodes' => array('eng-GB'),
2605
                    'pathData' => array(
2606
                        array(
2607
                            'always-available' => false,
2608
                            'translations' => array('eng-GB' => 'move-this'),
2609
                        ),
2610
                        array(
2611
                            'always-available' => false,
2612
                            'translations' => array('eng-GB' => 'sub1'),
2613
                        ),
2614
                        array(
2615
                            'always-available' => false,
2616
                            'translations' => array('eng-GB' => 'sub2'),
2617
                        ),
2618
                    ),
2619
                    'alwaysAvailable' => false,
2620
                    'isHistory' => true,
2621
                    'isCustom' => false,
2622
                    'forward' => false,
2623
                )
2624
            ),
2625
            $urlAlias
2626
        );
2627
    }
2628
2629
    /**
2630
     * Test for the locationMoved() method.
2631
     *
2632
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationMoved
2633
     */
2634 View Code Duplication
    public function testLocationMovedReparent()
2635
    {
2636
        $handler = $this->getHandler();
2637
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_move.php');
2638
2639
        $handler->publishUrlAliasForLocation(4, 3, 'move-this', 'eng-GB', false);
2640
        $handler->locationMoved(4, 2, 3);
2641
2642
        $urlAlias = $handler->lookup('move-here/move-this/sub1');
2643
        self::assertEquals(
2644
            new UrlAlias(
2645
                array(
2646
                    'id' => '9-' . md5('sub1'),
2647
                    'type' => UrlAlias::LOCATION,
2648
                    'destination' => '5',
2649
                    'languageCodes' => array('eng-GB'),
2650
                    'pathData' => array(
2651
                        array(
2652
                            'always-available' => false,
2653
                            'translations' => array('eng-GB' => 'move-here'),
2654
                        ),
2655
                        array(
2656
                            'always-available' => false,
2657
                            'translations' => array('eng-GB' => 'move-this'),
2658
                        ),
2659
                        array(
2660
                            'always-available' => false,
2661
                            'translations' => array('eng-GB' => 'sub1'),
2662
                        ),
2663
                    ),
2664
                    'alwaysAvailable' => false,
2665
                    'isHistory' => false,
2666
                    'isCustom' => false,
2667
                    'forward' => false,
2668
                )
2669
            ),
2670
            $urlAlias
2671
        );
2672
    }
2673
2674
    /**
2675
     * Test for the locationMoved() method.
2676
     *
2677
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationMoved
2678
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
2679
     */
2680
    public function testLocationMovedReparentHistory()
2681
    {
2682
        $handler = $this->getHandler();
2683
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_move.php');
2684
2685
        $handler->publishUrlAliasForLocation(4, 3, 'move-this', 'eng-GB', false);
2686
        $handler->locationMoved(4, 2, 3);
2687
2688
        $handler->lookup('move-here/move-this-history');
2689
    }
2690
2691
    /**
2692
     * Test for the locationMoved() method.
2693
     *
2694
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationMoved
2695
     */
2696 View Code Duplication
    public function testLocationMovedReparentSubtree()
2697
    {
2698
        $handler = $this->getHandler();
2699
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_move.php');
2700
2701
        $handler->publishUrlAliasForLocation(4, 3, 'move-this', 'eng-GB', false);
2702
        $handler->locationMoved(4, 2, 3);
2703
2704
        $urlAlias = $handler->lookup('move-here/move-this/sub1/sub2');
2705
        self::assertEquals(
2706
            new UrlAlias(
2707
                array(
2708
                    'id' => '5-' . md5('sub2'),
2709
                    'type' => UrlAlias::LOCATION,
2710
                    'destination' => '6',
2711
                    'languageCodes' => array('eng-GB'),
2712
                    'pathData' => array(
2713
                        array(
2714
                            'always-available' => false,
2715
                            'translations' => array('eng-GB' => 'move-here'),
2716
                        ),
2717
                        array(
2718
                            'always-available' => false,
2719
                            'translations' => array('eng-GB' => 'move-this'),
2720
                        ),
2721
                        array(
2722
                            'always-available' => false,
2723
                            'translations' => array('eng-GB' => 'sub1'),
2724
                        ),
2725
                        array(
2726
                            'always-available' => false,
2727
                            'translations' => array('eng-GB' => 'sub2'),
2728
                        ),
2729
                    ),
2730
                    'alwaysAvailable' => false,
2731
                    'isHistory' => false,
2732
                    'isCustom' => false,
2733
                    'forward' => false,
2734
                )
2735
            ),
2736
            $urlAlias
2737
        );
2738
    }
2739
2740
    /**
2741
     * Test for the locationMoved() method.
2742
     *
2743
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationMoved
2744
     */
2745 View Code Duplication
    public function testLocationMovedReparentSubtreeHistory()
2746
    {
2747
        $handler = $this->getHandler();
2748
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_move.php');
2749
2750
        $handler->publishUrlAliasForLocation(4, 3, 'move-this', 'eng-GB', false);
2751
        $handler->locationMoved(4, 2, 3);
2752
2753
        $urlAlias = $handler->lookup('move-here/move-this/sub1/sub2-history');
2754
        self::assertEquals(
2755
            new UrlAlias(
2756
                array(
2757
                    'id' => '5-' . md5('sub2-history'),
2758
                    'type' => UrlAlias::LOCATION,
2759
                    'destination' => '6',
2760
                    'languageCodes' => array('eng-GB'),
2761
                    'pathData' => array(
2762
                        array(
2763
                            'always-available' => false,
2764
                            'translations' => array('eng-GB' => 'move-here'),
2765
                        ),
2766
                        array(
2767
                            'always-available' => false,
2768
                            'translations' => array('eng-GB' => 'move-this'),
2769
                        ),
2770
                        array(
2771
                            'always-available' => false,
2772
                            'translations' => array('eng-GB' => 'sub1'),
2773
                        ),
2774
                        array(
2775
                            'always-available' => false,
2776
                            'translations' => array('eng-GB' => 'sub2-history'),
2777
                        ),
2778
                    ),
2779
                    'alwaysAvailable' => false,
2780
                    'isHistory' => true,
2781
                    'isCustom' => false,
2782
                    'forward' => false,
2783
                )
2784
            ),
2785
            $urlAlias
2786
        );
2787
    }
2788
2789
    /**
2790
     * Test for the locationCopied() method.
2791
     *
2792
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationCopied
2793
     */
2794 View Code Duplication
    public function testLocationCopiedCopiedLocationAliasIsValid()
2795
    {
2796
        $handler = $this->getHandler();
2797
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_copy.php');
2798
2799
        $urlAlias = $handler->lookup('move-this');
2800
2801
        $handler->locationCopied(4, 400, 3);
2802
2803
        self::assertEquals(
2804
            $urlAlias,
2805
            $handler->lookup('move-this')
2806
        );
2807
    }
2808
2809
    /**
2810
     * Test for the locationCopied() method.
2811
     *
2812
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationCopied
2813
     */
2814 View Code Duplication
    public function testLocationCopiedCopiedSubtreeIsValid()
2815
    {
2816
        $handler = $this->getHandler();
2817
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_copy.php');
2818
2819
        $urlAlias = $handler->lookup('move-this/sub1/sub2');
2820
2821
        $handler->locationCopied(4, 400, 3);
2822
2823
        self::assertEquals(
2824
            $urlAlias,
2825
            $handler->lookup('move-this/sub1/sub2')
2826
        );
2827
    }
2828
2829
    /**
2830
     * Test for the locationCopied() method.
2831
     *
2832
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationCopied
2833
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
2834
     */
2835 View Code Duplication
    public function testLocationCopiedHistoryNotCopied()
2836
    {
2837
        $handler = $this->getHandler();
2838
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_copy.php');
2839
2840
        $handler->locationCopied(4, 400, 3);
2841
2842
        $handler->lookup('move-here/move-this-history');
2843
    }
2844
2845
    /**
2846
     * Test for the locationCopied() method.
2847
     *
2848
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationCopied
2849
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
2850
     */
2851 View Code Duplication
    public function testLocationCopiedSubtreeHistoryNotCopied()
2852
    {
2853
        $handler = $this->getHandler();
2854
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_copy.php');
2855
2856
        $handler->locationCopied(4, 400, 3);
2857
2858
        $handler->lookup('move-here/move-this/sub1/sub2-history');
2859
    }
2860
2861
    /**
2862
     * Test for the locationCopied() method.
2863
     *
2864
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::locationCopied
2865
     */
2866
    public function testLocationCopiedSubtree()
2867
    {
2868
        $handler = $this->getHandler();
2869
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_copy.php');
2870
2871
        $countBeforeCopying = $this->countRows();
2872
2873
        $handler->locationCopied(4, 400, 3);
2874
2875
        self::assertEquals(
2876
            $countBeforeCopying + 2,
2877
            $this->countRows()
2878
        );
2879
2880
        $urlAlias = $handler->lookup('move-here/move-this/sub1/sub2');
2881
        self::assertEquals(
2882
            new UrlAlias(
2883
                array(
2884
                    'id' => '10-' . md5('sub2'),
2885
                    'type' => UrlAlias::LOCATION,
2886
                    'destination' => 600,
2887
                    'languageCodes' => array('eng-GB'),
2888
                    'pathData' => array(
2889
                        array(
2890
                            'always-available' => false,
2891
                            'translations' => array('eng-GB' => 'move-here'),
2892
                        ),
2893
                        array(
2894
                            'always-available' => false,
2895
                            'translations' => array('eng-GB' => 'move-this'),
2896
                        ),
2897
                        array(
2898
                            'always-available' => false,
2899
                            'translations' => array('eng-GB' => 'sub1'),
2900
                        ),
2901
                        array(
2902
                            'always-available' => false,
2903
                            'translations' => array('eng-GB' => 'sub2'),
2904
                        ),
2905
                    ),
2906
                    'alwaysAvailable' => false,
2907
                    'isHistory' => false,
2908
                    'isCustom' => false,
2909
                    'forward' => false,
2910
                )
2911
            ),
2912
            $urlAlias
2913
        );
2914
    }
2915
2916
    /**
2917
     * Test for the loadUrlAlias() method.
2918
     *
2919
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::loadUrlAlias
2920
     * @dataProvider providerForTestLookupLocationMultipleLanguages
2921
     */
2922 View Code Duplication
    public function testLoadAutogeneratedUrlAlias(
2923
        $url,
0 ignored issues
show
Unused Code introduced by
The parameter $url is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2924
        array $pathData,
2925
        array $languageCodes,
2926
        $alwaysAvailable,
2927
        $locationId,
2928
        $id
2929
    ) {
2930
        $handler = $this->getHandler();
2931
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location_multilang.php');
2932
2933
        $urlAlias = $handler->loadUrlAlias($id);
2934
2935
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
2936
        self::assertEquals(
2937
            new UrlAlias(
2938
                array(
2939
                    'id' => $id,
2940
                    'type' => UrlAlias::LOCATION,
2941
                    'destination' => $locationId,
2942
                    'languageCodes' => $languageCodes,
2943
                    'pathData' => $pathData,
2944
                    'alwaysAvailable' => $alwaysAvailable,
2945
                    'isHistory' => false,
2946
                    'isCustom' => false,
2947
                    'forward' => false,
2948
                )
2949
            ),
2950
            $urlAlias
2951
        );
2952
    }
2953
2954
    /**
2955
     * Test for the loadUrlAlias() method.
2956
     *
2957
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::loadUrlAlias
2958
     * @dataProvider providerForTestLookupResourceUrlAlias
2959
     */
2960 View Code Duplication
    public function testLoadResourceUrlAlias(
2961
        $url,
0 ignored issues
show
Unused Code introduced by
The parameter $url is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2962
        $pathData,
2963
        array $languageCodes,
2964
        $forward,
2965
        $alwaysAvailable,
2966
        $destination,
2967
        $id
2968
    ) {
2969
        $handler = $this->getHandler();
2970
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_resource.php');
2971
2972
        $urlAlias = $handler->loadUrlAlias($id);
2973
2974
        self::assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\UrlAlias', $urlAlias);
2975
        self::assertEquals(
2976
            new UrlAlias(
2977
                array(
2978
                    'id' => $id,
2979
                    'type' => UrlAlias::RESOURCE,
2980
                    'destination' => $destination,
2981
                    'languageCodes' => $languageCodes,
2982
                    'pathData' => $pathData,
2983
                    'alwaysAvailable' => $alwaysAvailable,
2984
                    'isHistory' => false,
2985
                    'isCustom' => true,
2986
                    'forward' => $forward,
2987
                )
2988
            ),
2989
            $urlAlias
2990
        );
2991
    }
2992
2993
    /**
2994
     * Test for the loadUrlAlias() method.
2995
     *
2996
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::loadUrlAlias
2997
     * @dataProvider providerForTestLookupVirtualUrlAlias
2998
     */
2999 View Code Duplication
    public function testLoadVirtualUrlAlias($url, $id)
0 ignored issues
show
Unused Code introduced by
The parameter $url is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
3000
    {
3001
        $handler = $this->getHandler();
3002
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location_custom.php');
3003
3004
        $urlAlias = $handler->loadUrlAlias($id);
3005
3006
        $this->assertVirtualUrlAliasValid($urlAlias, $id);
3007
    }
3008
3009
    protected function getHistoryAlias()
3010
    {
3011
        return new UrlAlias(
3012
            array(
3013
                'id' => '3-5f46413bb0ba5998caef84ab1ea590e1',
3014
                'type' => UrlAlias::LOCATION,
3015
                'destination' => '316',
3016
                'pathData' => array(
3017
                    array(
3018
                        'always-available' => true,
3019
                        'translations' => array('cro-HR' => 'jedan'),
3020
                    ),
3021
                    array(
3022
                        'always-available' => false,
3023
                        'translations' => array(
3024
                            'cro-HR' => 'dva',
3025
                            'eng-GB' => 'two',
3026
                        ),
3027
                    ),
3028
                    array(
3029
                        'always-available' => false,
3030
                        'translations' => array(
3031
                            'cro-HR' => 'tri-history',
3032
                        ),
3033
                    ),
3034
                ),
3035
                'languageCodes' => array('cro-HR'),
3036
                'alwaysAvailable' => false,
3037
                'isHistory' => true,
3038
                'isCustom' => false,
3039
                'forward' => false,
3040
            )
3041
        );
3042
    }
3043
3044
    /**
3045
     * Test for the loadUrlAlias() method.
3046
     *
3047
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::loadUrlAlias
3048
     */
3049
    public function testLoadHistoryUrlAlias()
3050
    {
3051
        $handler = $this->getHandler();
3052
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_location.php');
3053
3054
        $historyAlias = $this->getHistoryAlias();
3055
        $urlAlias = $handler->loadUrlAlias($historyAlias->id);
3056
3057
        self::assertEquals(
3058
            $historyAlias,
3059
            $urlAlias
3060
        );
3061
    }
3062
3063
    /**
3064
     * Test for the loadUrlAlias() method.
3065
     *
3066
     * @covers \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler::loadUrlAlias
3067
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
3068
     */
3069
    public function testLoadUrlAliasThrowsNotFoundException()
3070
    {
3071
        $handler = $this->getHandler();
3072
3073
        $handler->loadUrlAlias('non-existent');
3074
    }
3075
3076
    /**
3077
     * Test for the locationSwapped() method.
3078
     *
3079
     * @group swap
3080
     */
3081
    public function testLocationSwappedSimple()
3082
    {
3083
        $handler = $this->getHandler();
3084
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_swap_simple.php');
3085
3086
        $countBeforeReusing = $this->countRows();
3087
3088
        $handler->locationSwapped(316, 314, 317, 315);
3089
3090
        $this->assertEquals(
3091
            $countBeforeReusing,
3092
            $this->countRows()
3093
        );
3094
3095
        $urlAlias = $handler->lookup('jedan/swap');
3096
        $this->assertEquals(
3097
            new UrlAlias(
3098
                array(
3099
                    'id' => '2-' . md5('swap'),
3100
                    'type' => UrlAlias::LOCATION,
3101
                    'destination' => 316,
3102
                    'languageCodes' => array(
3103
                        'cro-HR',
3104
                    ),
3105
                    'pathData' => array(
3106
                        array(
3107
                            'always-available' => false,
3108
                            'translations' => array(
3109
                                'cro-HR' => 'jedan',
3110
                            ),
3111
                        ),
3112
                        array(
3113
                            'always-available' => false,
3114
                            'translations' => array(
3115
                                'cro-HR' => 'swap',
3116
                            ),
3117
                        ),
3118
                    ),
3119
                    'alwaysAvailable' => false,
3120
                    'isHistory' => false,
3121
                    'isCustom' => false,
3122
                    'forward' => false,
3123
                )
3124
            ),
3125
            $urlAlias
3126
        );
3127
3128
        $urlAlias = $handler->lookup('dva/swap');
3129
        $this->assertEquals(
3130
            new UrlAlias(
3131
                array(
3132
                    'id' => '3-' . md5('swap'),
3133
                    'type' => UrlAlias::LOCATION,
3134
                    'destination' => 317,
3135
                    'languageCodes' => array(
3136
                        'cro-HR',
3137
                    ),
3138
                    'pathData' => array(
3139
                        array(
3140
                            'always-available' => false,
3141
                            'translations' => array(
3142
                                'cro-HR' => 'dva',
3143
                            ),
3144
                        ),
3145
                        array(
3146
                            'always-available' => false,
3147
                            'translations' => array(
3148
                                'cro-HR' => 'swap',
3149
                            ),
3150
                        ),
3151
                    ),
3152
                    'alwaysAvailable' => false,
3153
                    'isHistory' => false,
3154
                    'isCustom' => false,
3155
                    'forward' => false,
3156
                )
3157
            ),
3158
            $urlAlias
3159
        );
3160
    }
3161
3162
    /**
3163
     * Test for the locationSwapped() method.
3164
     *
3165
     * @group swap
3166
     */
3167
    public function testLocationSwappedSimpleWithHistory()
3168
    {
3169
        $handler = $this->getHandler();
3170
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_swap_simple_history.php');
3171
3172
        $countBeforeReusing = $this->countRows();
3173
3174
        $handler->locationSwapped(316, 314, 317, 315);
3175
3176
        $this->assertEquals(
3177
            $countBeforeReusing,
3178
            $this->countRows()
3179
        );
3180
3181
        $urlAlias = $handler->lookup('jedan/swap');
3182
        $this->assertEquals(
3183
            new UrlAlias(
3184
                array(
3185
                    'id' => '2-' . md5('swap'),
3186
                    'type' => UrlAlias::LOCATION,
3187
                    'destination' => 316,
3188
                    'languageCodes' => array(
3189
                        'cro-HR',
3190
                    ),
3191
                    'pathData' => array(
3192
                        array(
3193
                            'always-available' => false,
3194
                            'translations' => array(
3195
                                'cro-HR' => 'jedan',
3196
                            ),
3197
                        ),
3198
                        array(
3199
                            'always-available' => false,
3200
                            'translations' => array(
3201
                                'cro-HR' => 'swap',
3202
                            ),
3203
                        ),
3204
                    ),
3205
                    'alwaysAvailable' => false,
3206
                    'isHistory' => true,
3207
                    'isCustom' => false,
3208
                    'forward' => false,
3209
                )
3210
            ),
3211
            $urlAlias
3212
        );
3213
3214
        $urlAlias = $handler->lookup('dva/swap');
3215
        $this->assertEquals(
3216
            new UrlAlias(
3217
                array(
3218
                    'id' => '3-' . md5('swap'),
3219
                    'type' => UrlAlias::LOCATION,
3220
                    'destination' => 317,
3221
                    'languageCodes' => array(
3222
                        'cro-HR',
3223
                    ),
3224
                    'pathData' => array(
3225
                        array(
3226
                            'always-available' => false,
3227
                            'translations' => array(
3228
                                'cro-HR' => 'dva',
3229
                            ),
3230
                        ),
3231
                        array(
3232
                            'always-available' => false,
3233
                            'translations' => array(
3234
                                'cro-HR' => 'swap',
3235
                            ),
3236
                        ),
3237
                    ),
3238
                    'alwaysAvailable' => false,
3239
                    'isHistory' => true,
3240
                    'isCustom' => false,
3241
                    'forward' => false,
3242
                )
3243
            ),
3244
            $urlAlias
3245
        );
3246
3247
        $urlAlias = $handler->lookup('jedan/swap-new');
3248
        $this->assertEquals(
3249
            new UrlAlias(
3250
                array(
3251
                    'id' => '2-' . md5('swap-new'),
3252
                    'type' => UrlAlias::LOCATION,
3253
                    'destination' => 316,
3254
                    'languageCodes' => array(
3255
                        'cro-HR',
3256
                    ),
3257
                    'pathData' => array(
3258
                        array(
3259
                            'always-available' => false,
3260
                            'translations' => array(
3261
                                'cro-HR' => 'jedan',
3262
                            ),
3263
                        ),
3264
                        array(
3265
                            'always-available' => false,
3266
                            'translations' => array(
3267
                                'cro-HR' => 'swap-new',
3268
                            ),
3269
                        ),
3270
                    ),
3271
                    'alwaysAvailable' => false,
3272
                    'isHistory' => false,
3273
                    'isCustom' => false,
3274
                    'forward' => false,
3275
                )
3276
            ),
3277
            $urlAlias
3278
        );
3279
3280
        $urlAlias = $handler->lookup('dva/swap-new');
3281
        $this->assertEquals(
3282
            new UrlAlias(
3283
                array(
3284
                    'id' => '3-' . md5('swap-new'),
3285
                    'type' => UrlAlias::LOCATION,
3286
                    'destination' => 317,
3287
                    'languageCodes' => array(
3288
                        'cro-HR',
3289
                    ),
3290
                    'pathData' => array(
3291
                        array(
3292
                            'always-available' => false,
3293
                            'translations' => array(
3294
                                'cro-HR' => 'dva',
3295
                            ),
3296
                        ),
3297
                        array(
3298
                            'always-available' => false,
3299
                            'translations' => array(
3300
                                'cro-HR' => 'swap-new',
3301
                            ),
3302
                        ),
3303
                    ),
3304
                    'alwaysAvailable' => false,
3305
                    'isHistory' => false,
3306
                    'isCustom' => false,
3307
                    'forward' => false,
3308
                )
3309
            ),
3310
            $urlAlias
3311
        );
3312
    }
3313
3314
    /**
3315
     * Test for the locationSwapped() method.
3316
     *
3317
     * @group swap
3318
     */
3319
    public function testLocationSwappedSimpleWithConflict()
3320
    {
3321
        $handler = $this->getHandler();
3322
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_swap_simple_conflict.php');
3323
3324
        $urlAlias1TakenExpected = $handler->lookup('jedan/swap-new-2');
3325
        $urlAlias2TakenExpected = $handler->lookup('dva/swap-new-1');
3326
3327
        $urlAlias1HistorizedExpected = $handler->lookup('jedan/swap-new-1');
3328
        $urlAlias1HistorizedExpected->isHistory = true;
3329
        $urlAlias2HistorizedExpected = $handler->lookup('dva/swap-new-2');
3330
        $urlAlias2HistorizedExpected->isHistory = true;
3331
3332
        $countBeforeReusing = $this->countRows();
3333
3334
        $handler->locationSwapped(316, 314, 317, 315);
3335
3336
        $this->assertEquals(
3337
            $countBeforeReusing + 2,
3338
            $this->countRows()
3339
        );
3340
3341
        $urlAlias1Taken = $handler->lookup('jedan/swap-new-2');
3342
        $urlAlias2Taken = $handler->lookup('dva/swap-new-1');
3343
3344
        $urlAlias1Historized = $handler->lookup('jedan/swap-new-1');
3345
        $urlAlias2Historized = $handler->lookup('dva/swap-new-2');
3346
3347
        $this->assertEquals($urlAlias1TakenExpected, $urlAlias1Taken);
3348
        $this->assertEquals($urlAlias2TakenExpected, $urlAlias2Taken);
3349
3350
        $this->assertEquals($urlAlias1HistorizedExpected, $urlAlias1Historized);
3351
        $this->assertEquals($urlAlias2HistorizedExpected, $urlAlias2Historized);
3352
3353
        $urlAlias1New = $handler->lookup('jedan/swap-new-22');
3354
        $this->assertEquals(
3355
            new UrlAlias(
3356
                array(
3357
                    'id' => '2-' . md5('swap-new-22'),
3358
                    'type' => UrlAlias::LOCATION,
3359
                    'destination' => 316,
3360
                    'languageCodes' => array(
3361
                        'cro-HR',
3362
                    ),
3363
                    'pathData' => array(
3364
                        array(
3365
                            'always-available' => false,
3366
                            'translations' => array(
3367
                                'cro-HR' => 'jedan',
3368
                            ),
3369
                        ),
3370
                        array(
3371
                            'always-available' => false,
3372
                            'translations' => array(
3373
                                'cro-HR' => 'swap-new-22',
3374
                            ),
3375
                        ),
3376
                    ),
3377
                    'alwaysAvailable' => false,
3378
                    'isHistory' => false,
3379
                    'isCustom' => false,
3380
                    'forward' => false,
3381
                )
3382
            ),
3383
            $urlAlias1New
3384
        );
3385
3386
        $urlAlias2New = $handler->lookup('dva/swap-new-12');
3387
        $this->assertEquals(
3388
            new UrlAlias(
3389
                array(
3390
                    'id' => '3-' . md5('swap-new-12'),
3391
                    'type' => UrlAlias::LOCATION,
3392
                    'destination' => 317,
3393
                    'languageCodes' => array(
3394
                        'cro-HR',
3395
                    ),
3396
                    'pathData' => array(
3397
                        array(
3398
                            'always-available' => false,
3399
                            'translations' => array(
3400
                                'cro-HR' => 'dva',
3401
                            ),
3402
                        ),
3403
                        array(
3404
                            'always-available' => false,
3405
                            'translations' => array(
3406
                                'cro-HR' => 'swap-new-12',
3407
                            ),
3408
                        ),
3409
                    ),
3410
                    'alwaysAvailable' => false,
3411
                    'isHistory' => false,
3412
                    'isCustom' => false,
3413
                    'forward' => false,
3414
                )
3415
            ),
3416
            $urlAlias2New
3417
        );
3418
    }
3419
3420
    /**
3421
     * Test for the locationSwapped() method.
3422
     *
3423
     * @group swap
3424
     */
3425 View Code Duplication
    public function testLocationSwappedSiblingsSimple()
3426
    {
3427
        $handler = $this->getHandler();
3428
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_swap_siblings_simple.php');
3429
3430
        $countBeforeReusing = $this->countRows();
3431
3432
        $handler->locationSwapped(314, 2, 315, 2);
3433
3434
        $this->assertEquals(
3435
            $countBeforeReusing,
3436
            $this->countRows()
3437
        );
3438
3439
        $urlAlias = $handler->lookup('jedan');
3440
        $this->assertEquals(
3441
            new UrlAlias(
3442
                array(
3443
                    'id' => '0-' . md5('jedan'),
3444
                    'type' => UrlAlias::LOCATION,
3445
                    'destination' => 315,
3446
                    'languageCodes' => array(
3447
                        'cro-HR',
3448
                    ),
3449
                    'pathData' => array(
3450
                        array(
3451
                            'always-available' => false,
3452
                            'translations' => array(
3453
                                'cro-HR' => 'jedan',
3454
                            ),
3455
                        ),
3456
                    ),
3457
                    'alwaysAvailable' => false,
3458
                    'isHistory' => false,
3459
                    'isCustom' => false,
3460
                    'forward' => false,
3461
                )
3462
            ),
3463
            $urlAlias
3464
        );
3465
3466
        $urlAlias = $handler->lookup('dva');
3467
        $this->assertEquals(
3468
            new UrlAlias(
3469
                array(
3470
                    'id' => '0-' . md5('dva'),
3471
                    'type' => UrlAlias::LOCATION,
3472
                    'destination' => 314,
3473
                    'languageCodes' => array(
3474
                        'cro-HR',
3475
                    ),
3476
                    'pathData' => array(
3477
                        array(
3478
                            'always-available' => false,
3479
                            'translations' => array(
3480
                                'cro-HR' => 'dva',
3481
                            ),
3482
                        ),
3483
                    ),
3484
                    'alwaysAvailable' => false,
3485
                    'isHistory' => false,
3486
                    'isCustom' => false,
3487
                    'forward' => false,
3488
                )
3489
            ),
3490
            $urlAlias
3491
        );
3492
    }
3493
3494
    /**
3495
     * Test for the locationSwapped() method.
3496
     *
3497
     * @group swap
3498
     */
3499 View Code Duplication
    public function testLocationSwappedSiblingsSimpleReverse()
3500
    {
3501
        $handler = $this->getHandler();
3502
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_swap_siblings_simple.php');
3503
3504
        $countBeforeReusing = $this->countRows();
3505
3506
        $handler->locationSwapped(315, 2, 314, 2);
3507
3508
        $this->assertEquals(
3509
            $countBeforeReusing,
3510
            $this->countRows()
3511
        );
3512
3513
        $urlAlias = $handler->lookup('jedan');
3514
        $this->assertEquals(
3515
            new UrlAlias(
3516
                array(
3517
                    'id' => '0-' . md5('jedan'),
3518
                    'type' => UrlAlias::LOCATION,
3519
                    'destination' => 315,
3520
                    'languageCodes' => array(
3521
                        'cro-HR',
3522
                    ),
3523
                    'pathData' => array(
3524
                        array(
3525
                            'always-available' => false,
3526
                            'translations' => array(
3527
                                'cro-HR' => 'jedan',
3528
                            ),
3529
                        ),
3530
                    ),
3531
                    'alwaysAvailable' => false,
3532
                    'isHistory' => false,
3533
                    'isCustom' => false,
3534
                    'forward' => false,
3535
                )
3536
            ),
3537
            $urlAlias
3538
        );
3539
3540
        $urlAlias = $handler->lookup('dva');
3541
        $this->assertEquals(
3542
            new UrlAlias(
3543
                array(
3544
                    'id' => '0-' . md5('dva'),
3545
                    'type' => UrlAlias::LOCATION,
3546
                    'destination' => 314,
3547
                    'languageCodes' => array(
3548
                        'cro-HR',
3549
                    ),
3550
                    'pathData' => array(
3551
                        array(
3552
                            'always-available' => false,
3553
                            'translations' => array(
3554
                                'cro-HR' => 'dva',
3555
                            ),
3556
                        ),
3557
                    ),
3558
                    'alwaysAvailable' => false,
3559
                    'isHistory' => false,
3560
                    'isCustom' => false,
3561
                    'forward' => false,
3562
                )
3563
            ),
3564
            $urlAlias
3565
        );
3566
    }
3567
3568
    /**
3569
     * Test for the locationSwapped() method.
3570
     *
3571
     * @group swap
3572
     */
3573 View Code Duplication
    public function testLocationSwappedSiblingsSimpleWithHistory()
3574
    {
3575
        $handler = $this->getHandler();
3576
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_swap_siblings_simple_history.php');
3577
3578
        $countBeforeReusing = $this->countRows();
3579
3580
        $handler->locationSwapped(314, 2, 315, 2);
3581
3582
        $this->assertEquals(
3583
            $countBeforeReusing,
3584
            $this->countRows()
3585
        );
3586
3587
        $urlAlias = $handler->lookup('jedan');
3588
        $this->assertEquals(
3589
            new UrlAlias(
3590
                array(
3591
                    'id' => '0-' . md5('jedan'),
3592
                    'type' => UrlAlias::LOCATION,
3593
                    'destination' => 314,
3594
                    'languageCodes' => array(
3595
                        'cro-HR',
3596
                    ),
3597
                    'pathData' => array(
3598
                        array(
3599
                            'always-available' => false,
3600
                            'translations' => array(
3601
                                'cro-HR' => 'jedan',
3602
                            ),
3603
                        ),
3604
                    ),
3605
                    'alwaysAvailable' => false,
3606
                    'isHistory' => true,
3607
                    'isCustom' => false,
3608
                    'forward' => false,
3609
                )
3610
            ),
3611
            $urlAlias
3612
        );
3613
3614
        $urlAlias = $handler->lookup('dva');
3615
        $this->assertEquals(
3616
            new UrlAlias(
3617
                array(
3618
                    'id' => '0-' . md5('dva'),
3619
                    'type' => UrlAlias::LOCATION,
3620
                    'destination' => 315,
3621
                    'languageCodes' => array(
3622
                        'cro-HR',
3623
                    ),
3624
                    'pathData' => array(
3625
                        array(
3626
                            'always-available' => false,
3627
                            'translations' => array(
3628
                                'cro-HR' => 'dva',
3629
                            ),
3630
                        ),
3631
                    ),
3632
                    'alwaysAvailable' => false,
3633
                    'isHistory' => true,
3634
                    'isCustom' => false,
3635
                    'forward' => false,
3636
                )
3637
            ),
3638
            $urlAlias
3639
        );
3640
3641
        $urlAlias = $handler->lookup('jedan-new');
3642
        $this->assertEquals(
3643
            new UrlAlias(
3644
                array(
3645
                    'id' => '0-' . md5('jedan-new'),
3646
                    'type' => UrlAlias::LOCATION,
3647
                    'destination' => 315,
3648
                    'languageCodes' => array(
3649
                        'cro-HR',
3650
                    ),
3651
                    'pathData' => array(
3652
                        array(
3653
                            'always-available' => false,
3654
                            'translations' => array(
3655
                                'cro-HR' => 'jedan-new',
3656
                            ),
3657
                        ),
3658
                    ),
3659
                    'alwaysAvailable' => false,
3660
                    'isHistory' => false,
3661
                    'isCustom' => false,
3662
                    'forward' => false,
3663
                )
3664
            ),
3665
            $urlAlias
3666
        );
3667
3668
        $urlAlias = $handler->lookup('dva-new');
3669
        $this->assertEquals(
3670
            new UrlAlias(
3671
                array(
3672
                    'id' => '0-' . md5('dva-new'),
3673
                    'type' => UrlAlias::LOCATION,
3674
                    'destination' => 314,
3675
                    'languageCodes' => array(
3676
                        'cro-HR',
3677
                    ),
3678
                    'pathData' => array(
3679
                        array(
3680
                            'always-available' => false,
3681
                            'translations' => array(
3682
                                'cro-HR' => 'dva-new',
3683
                            ),
3684
                        ),
3685
                    ),
3686
                    'alwaysAvailable' => false,
3687
                    'isHistory' => false,
3688
                    'isCustom' => false,
3689
                    'forward' => false,
3690
                )
3691
            ),
3692
            $urlAlias
3693
        );
3694
    }
3695
3696
    /**
3697
     * Test for the locationSwapped() method.
3698
     *
3699
     * @group swap
3700
     */
3701 View Code Duplication
    public function testLocationSwappedSiblingsSimpleWithHistoryReverse()
3702
    {
3703
        $handler = $this->getHandler();
3704
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_swap_siblings_simple_history.php');
3705
3706
        $countBeforeReusing = $this->countRows();
3707
3708
        $handler->locationSwapped(315, 2, 314, 2);
3709
3710
        $this->assertEquals(
3711
            $countBeforeReusing,
3712
            $this->countRows()
3713
        );
3714
3715
        $urlAlias = $handler->lookup('jedan');
3716
        $this->assertEquals(
3717
            new UrlAlias(
3718
                array(
3719
                    'id' => '0-' . md5('jedan'),
3720
                    'type' => UrlAlias::LOCATION,
3721
                    'destination' => 314,
3722
                    'languageCodes' => array(
3723
                        'cro-HR',
3724
                    ),
3725
                    'pathData' => array(
3726
                        array(
3727
                            'always-available' => false,
3728
                            'translations' => array(
3729
                                'cro-HR' => 'jedan',
3730
                            ),
3731
                        ),
3732
                    ),
3733
                    'alwaysAvailable' => false,
3734
                    'isHistory' => true,
3735
                    'isCustom' => false,
3736
                    'forward' => false,
3737
                )
3738
            ),
3739
            $urlAlias
3740
        );
3741
3742
        $urlAlias = $handler->lookup('dva');
3743
        $this->assertEquals(
3744
            new UrlAlias(
3745
                array(
3746
                    'id' => '0-' . md5('dva'),
3747
                    'type' => UrlAlias::LOCATION,
3748
                    'destination' => 315,
3749
                    'languageCodes' => array(
3750
                        'cro-HR',
3751
                    ),
3752
                    'pathData' => array(
3753
                        array(
3754
                            'always-available' => false,
3755
                            'translations' => array(
3756
                                'cro-HR' => 'dva',
3757
                            ),
3758
                        ),
3759
                    ),
3760
                    'alwaysAvailable' => false,
3761
                    'isHistory' => true,
3762
                    'isCustom' => false,
3763
                    'forward' => false,
3764
                )
3765
            ),
3766
            $urlAlias
3767
        );
3768
3769
        $urlAlias = $handler->lookup('jedan-new');
3770
        $this->assertEquals(
3771
            new UrlAlias(
3772
                array(
3773
                    'id' => '0-' . md5('jedan-new'),
3774
                    'type' => UrlAlias::LOCATION,
3775
                    'destination' => 315,
3776
                    'languageCodes' => array(
3777
                        'cro-HR',
3778
                    ),
3779
                    'pathData' => array(
3780
                        array(
3781
                            'always-available' => false,
3782
                            'translations' => array(
3783
                                'cro-HR' => 'jedan-new',
3784
                            ),
3785
                        ),
3786
                    ),
3787
                    'alwaysAvailable' => false,
3788
                    'isHistory' => false,
3789
                    'isCustom' => false,
3790
                    'forward' => false,
3791
                )
3792
            ),
3793
            $urlAlias
3794
        );
3795
3796
        $urlAlias = $handler->lookup('dva-new');
3797
        $this->assertEquals(
3798
            new UrlAlias(
3799
                array(
3800
                    'id' => '0-' . md5('dva-new'),
3801
                    'type' => UrlAlias::LOCATION,
3802
                    'destination' => 314,
3803
                    'languageCodes' => array(
3804
                        'cro-HR',
3805
                    ),
3806
                    'pathData' => array(
3807
                        array(
3808
                            'always-available' => false,
3809
                            'translations' => array(
3810
                                'cro-HR' => 'dva-new',
3811
                            ),
3812
                        ),
3813
                    ),
3814
                    'alwaysAvailable' => false,
3815
                    'isHistory' => false,
3816
                    'isCustom' => false,
3817
                    'forward' => false,
3818
                )
3819
            ),
3820
            $urlAlias
3821
        );
3822
    }
3823
3824
    /**
3825
     * Test for the locationSwapped() method.
3826
     *
3827
     * @group swap
3828
     */
3829
    public function testLocationSwappedMultipleLanguagesSimple()
3830
    {
3831
        $handler = $this->getHandler();
3832
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_swap_multilang_simple.php');
3833
3834
        $urlAlias1HRExpected = $handler->lookup('jedan/swap-hr');
3835
        $urlAlias1ENExpected = $handler->lookup('jedan/swap-en');
3836
        $urlAlias2HRExpected = $handler->lookup('dva/swap-hr');
3837
        $urlAlias2ENExpected = $handler->lookup('dva/swap-en');
3838
3839
        $countBeforeReusing = $this->countRows();
3840
3841
        $handler->locationSwapped(316, 314, 317, 315);
3842
3843
        $this->assertEquals(
3844
            $countBeforeReusing,
3845
            $this->countRows()
3846
        );
3847
3848
        $urlAlias1HR = $handler->lookup('jedan/swap-hr');
3849
        $urlAlias1EN = $handler->lookup('jedan/swap-en');
3850
        $urlAlias2HR = $handler->lookup('dva/swap-hr');
3851
        $urlAlias2EN = $handler->lookup('dva/swap-en');
3852
3853
        $this->assertEquals($urlAlias1HRExpected, $urlAlias1HR);
3854
        $this->assertEquals($urlAlias1ENExpected, $urlAlias1EN);
3855
        $this->assertEquals($urlAlias2HRExpected, $urlAlias2HR);
3856
        $this->assertEquals($urlAlias2ENExpected, $urlAlias2EN);
3857
    }
3858
3859
    /**
3860
     * Test for the locationSwapped() method.
3861
     *
3862
     * @group swap
3863
     */
3864
    public function testLocationSwappedMultipleLanguagesDifferentLanguagesSimple()
3865
    {
3866
        $handler = $this->getHandler();
3867
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_swap_multilang_diff_simple.php');
3868
3869
        $countBeforeReusing = $this->countRows();
3870
3871
        $handler->locationSwapped(316, 314, 317, 315);
3872
3873
        $this->assertEquals(
3874
            $countBeforeReusing + 2,
3875
            $this->countRows()
3876
        );
3877
3878
        $urlAlias = $handler->lookup('jedan/swap-hr');
3879
        $this->assertEquals(
3880
            new UrlAlias(
3881
                array(
3882
                    'id' => '2-' . md5('swap-hr'),
3883
                    'type' => UrlAlias::LOCATION,
3884
                    'destination' => 316,
3885
                    'languageCodes' => array(
3886
                        'cro-HR',
3887
                    ),
3888
                    'pathData' => array(
3889
                        array(
3890
                            'always-available' => false,
3891
                            'translations' => array(
3892
                                'cro-HR' => 'jedan',
3893
                            ),
3894
                        ),
3895
                        array(
3896
                            'always-available' => false,
3897
                            'translations' => array(
3898
                                'cro-HR' => 'swap-hr',
3899
                                'ger-DE' => 'swap-de',
3900
                            ),
3901
                        ),
3902
                    ),
3903
                    'alwaysAvailable' => false,
3904
                    'isHistory' => false,
3905
                    'isCustom' => false,
3906
                    'forward' => false,
3907
                )
3908
            ),
3909
            $urlAlias
3910
        );
3911
3912
        $urlAlias = $handler->lookup('jedan/swap-de');
3913
        $this->assertEquals(
3914
            new UrlAlias(
3915
                array(
3916
                    'id' => '2-' . md5('swap-de'),
3917
                    'type' => UrlAlias::LOCATION,
3918
                    'destination' => 316,
3919
                    'languageCodes' => array(
3920
                        'ger-DE',
3921
                    ),
3922
                    'pathData' => array(
3923
                        array(
3924
                            'always-available' => false,
3925
                            'translations' => array(
3926
                                'cro-HR' => 'jedan',
3927
                            ),
3928
                        ),
3929
                        array(
3930
                            'always-available' => false,
3931
                            'translations' => array(
3932
                                'cro-HR' => 'swap-hr',
3933
                                'ger-DE' => 'swap-de',
3934
                            ),
3935
                        ),
3936
                    ),
3937
                    'alwaysAvailable' => false,
3938
                    'isHistory' => false,
3939
                    'isCustom' => false,
3940
                    'forward' => false,
3941
                )
3942
            ),
3943
            $urlAlias
3944
        );
3945
3946
        $urlAlias = $handler->lookup('jedan/swap-en');
3947
        $this->assertEquals(
3948
            new UrlAlias(
3949
                array(
3950
                    'id' => '2-' . md5('swap-en'),
3951
                    'type' => UrlAlias::LOCATION,
3952
                    'destination' => 316,
3953
                    'languageCodes' => array(
3954
                        'eng-GB',
3955
                    ),
3956
                    'pathData' => array(
3957
                        array(
3958
                            'always-available' => false,
3959
                            'translations' => array(
3960
                                'cro-HR' => 'jedan',
3961
                            ),
3962
                        ),
3963
                        array(
3964
                            'always-available' => false,
3965
                            'translations' => array(
3966
                                'eng-GB' => 'swap-en',
3967
                            ),
3968
                        ),
3969
                    ),
3970
                    'alwaysAvailable' => false,
3971
                    'isHistory' => true,
3972
                    'isCustom' => false,
3973
                    'forward' => false,
3974
                )
3975
            ),
3976
            $urlAlias
3977
        );
3978
3979
        $urlAlias = $handler->lookup('dva/swap-hr');
3980
        $this->assertEquals(
3981
            new UrlAlias(
3982
                array(
3983
                    'id' => '3-' . md5('swap-hr'),
3984
                    'type' => UrlAlias::LOCATION,
3985
                    'destination' => 317,
3986
                    'languageCodes' => array(
3987
                        'cro-HR',
3988
                    ),
3989
                    'pathData' => array(
3990
                        array(
3991
                            'always-available' => false,
3992
                            'translations' => array(
3993
                                'cro-HR' => 'dva',
3994
                            ),
3995
                        ),
3996
                        array(
3997
                            'always-available' => false,
3998
                            'translations' => array(
3999
                                'eng-GB' => 'swap-en',
4000
                                'cro-HR' => 'swap-hr',
4001
                            ),
4002
                        ),
4003
                    ),
4004
                    'alwaysAvailable' => false,
4005
                    'isHistory' => false,
4006
                    'isCustom' => false,
4007
                    'forward' => false,
4008
                )
4009
            ),
4010
            $urlAlias
4011
        );
4012
4013
        $urlAlias = $handler->lookup('dva/swap-en');
4014
        $this->assertEquals(
4015
            new UrlAlias(
4016
                array(
4017
                    'id' => '3-' . md5('swap-en'),
4018
                    'type' => UrlAlias::LOCATION,
4019
                    'destination' => 317,
4020
                    'languageCodes' => array(
4021
                        'eng-GB',
4022
                    ),
4023
                    'pathData' => array(
4024
                        array(
4025
                            'always-available' => false,
4026
                            'translations' => array(
4027
                                'cro-HR' => 'dva',
4028
                            ),
4029
                        ),
4030
                        array(
4031
                            'always-available' => false,
4032
                            'translations' => array(
4033
                                'eng-GB' => 'swap-en',
4034
                                'cro-HR' => 'swap-hr',
4035
                            ),
4036
                        ),
4037
                    ),
4038
                    'alwaysAvailable' => false,
4039
                    'isHistory' => false,
4040
                    'isCustom' => false,
4041
                    'forward' => false,
4042
                )
4043
            ),
4044
            $urlAlias
4045
        );
4046
4047
        $urlAlias = $handler->lookup('dva/swap-de');
4048
        $this->assertEquals(
4049
            new UrlAlias(
4050
                array(
4051
                    'id' => '3-' . md5('swap-de'),
4052
                    'type' => UrlAlias::LOCATION,
4053
                    'destination' => 317,
4054
                    'languageCodes' => array(
4055
                        'ger-DE',
4056
                    ),
4057
                    'pathData' => array(
4058
                        array(
4059
                            'always-available' => false,
4060
                            'translations' => array(
4061
                                'cro-HR' => 'dva',
4062
                            ),
4063
                        ),
4064
                        array(
4065
                            'always-available' => false,
4066
                            'translations' => array(
4067
                                'ger-DE' => 'swap-de',
4068
                            ),
4069
                        ),
4070
                    ),
4071
                    'alwaysAvailable' => false,
4072
                    'isHistory' => true,
4073
                    'isCustom' => false,
4074
                    'forward' => false,
4075
                )
4076
            ),
4077
            $urlAlias
4078
        );
4079
    }
4080
4081
    /**
4082
     * Test for the locationSwapped() method.
4083
     *
4084
     * @group swap
4085
     */
4086
    public function testLocationSwappedMultipleLanguagesDifferentLanguages()
4087
    {
4088
        $handler = $this->getHandler();
4089
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_swap_multilang_diff.php');
4090
4091
        $countBeforeReusing = $this->countRows();
4092
4093
        $handler->locationSwapped(317, 315, 316, 314);
4094
4095
        $this->assertEquals(
4096
            $countBeforeReusing + 2,
4097
            $this->countRows()
4098
        );
4099
4100
        $urlAlias = $handler->lookup('jedan/swap-this');
4101
        $this->assertEquals(
4102
            new UrlAlias(
4103
                array(
4104
                    'id' => '2-' . md5('swap-this'),
4105
                    'type' => UrlAlias::LOCATION,
4106
                    'destination' => 316,
4107
                    'languageCodes' => array(
4108
                        'ger-DE',
4109
                        'nor-NO',
4110
                    ),
4111
                    'pathData' => array(
4112
                        array(
4113
                            'always-available' => false,
4114
                            'translations' => array(
4115
                                'cro-HR' => 'jedan',
4116
                            ),
4117
                        ),
4118
                        array(
4119
                            'always-available' => false,
4120
                            'translations' => array(
4121
                                'cro-HR' => 'swap-hr',
4122
                                'ger-DE' => 'swap-this',
4123
                                'nor-NO' => 'swap-this',
4124
                            ),
4125
                        ),
4126
                    ),
4127
                    'alwaysAvailable' => false,
4128
                    'isHistory' => false,
4129
                    'isCustom' => false,
4130
                    'forward' => false,
4131
                )
4132
            ),
4133
            $urlAlias
4134
        );
4135
4136
        $urlAlias = $handler->lookup('jedan/swap-en');
4137
        $this->assertEquals(
4138
            new UrlAlias(
4139
                array(
4140
                    'id' => '2-' . md5('swap-en'),
4141
                    'type' => UrlAlias::LOCATION,
4142
                    'destination' => 316,
4143
                    'languageCodes' => array(
4144
                        'eng-GB',
4145
                    ),
4146
                    'pathData' => array(
4147
                        array(
4148
                            'always-available' => false,
4149
                            'translations' => array(
4150
                                'cro-HR' => 'jedan',
4151
                            ),
4152
                        ),
4153
                        array(
4154
                            'always-available' => false,
4155
                            'translations' => array(
4156
                                'eng-GB' => 'swap-en',
4157
                            ),
4158
                        ),
4159
                    ),
4160
                    'alwaysAvailable' => false,
4161
                    'isHistory' => true,
4162
                    'isCustom' => false,
4163
                    'forward' => false,
4164
                )
4165
            ),
4166
            $urlAlias
4167
        );
4168
4169
        $urlAlias = $handler->lookup('dva/swap-hr');
4170
        $this->assertEquals(
4171
            new UrlAlias(
4172
                array(
4173
                    'id' => '3-' . md5('swap-hr'),
4174
                    'type' => UrlAlias::LOCATION,
4175
                    'destination' => 317,
4176
                    'languageCodes' => array(
4177
                        'cro-HR',
4178
                    ),
4179
                    'pathData' => array(
4180
                        array(
4181
                            'always-available' => false,
4182
                            'translations' => array(
4183
                                'cro-HR' => 'dva',
4184
                            ),
4185
                        ),
4186
                        array(
4187
                            'always-available' => false,
4188
                            'translations' => array(
4189
                                'cro-HR' => 'swap-hr',
4190
                            ),
4191
                        ),
4192
                    ),
4193
                    'alwaysAvailable' => false,
4194
                    'isHistory' => true,
4195
                    'isCustom' => false,
4196
                    'forward' => false,
4197
                )
4198
            ),
4199
            $urlAlias
4200
        );
4201
4202
        $urlAlias = $handler->lookup('dva/swap-this');
4203
        $this->assertEquals(
4204
            new UrlAlias(
4205
                array(
4206
                    'id' => '3-' . md5('swap-this'),
4207
                    'type' => UrlAlias::LOCATION,
4208
                    'destination' => 317,
4209
                    'languageCodes' => array(
4210
                        'cro-HR',
4211
                        'ger-DE',
4212
                    ),
4213
                    'pathData' => array(
4214
                        array(
4215
                            'always-available' => false,
4216
                            'translations' => array(
4217
                                'cro-HR' => 'dva',
4218
                            ),
4219
                        ),
4220
                        array(
4221
                            'always-available' => false,
4222
                            'translations' => array(
4223
                                'cro-HR' => 'swap-this',
4224
                                'ger-DE' => 'swap-this',
4225
                                'eng-GB' => 'swap-en',
4226
                            ),
4227
                        ),
4228
                    ),
4229
                    'alwaysAvailable' => false,
4230
                    'isHistory' => false,
4231
                    'isCustom' => false,
4232
                    'forward' => false,
4233
                )
4234
            ),
4235
            $urlAlias
4236
        );
4237
    }
4238
4239
    /**
4240
     * Test for the locationSwapped() method.
4241
     *
4242
     * @group swap
4243
     */
4244
    public function testLocationSwappedMultipleLanguagesWithCompositeHistory()
4245
    {
4246
        $handler = $this->getHandler();
4247
        $this->insertDatabaseFixture(__DIR__ . '/_fixtures/urlaliases_swap_multilang_cleanup_composite.php');
4248
4249
        $countBeforeReusing = $this->countRows();
4250
4251
        $handler->locationSwapped(317, 315, 316, 314);
4252
4253
        $this->assertEquals(
4254
            $countBeforeReusing + 4,
4255
            $this->countRows()
4256
        );
4257
4258
        $urlAlias = $handler->lookup('jedan/swap-this');
4259
        $this->assertEquals(
4260
            new UrlAlias(
4261
                array(
4262
                    'id' => '2-' . md5('swap-this'),
4263
                    'type' => UrlAlias::LOCATION,
4264
                    'destination' => 316,
4265
                    'languageCodes' => array(
4266
                        'cro-HR',
4267
                    ),
4268
                    'pathData' => array(
4269
                        array(
4270
                            'always-available' => false,
4271
                            'translations' => array(
4272
                                'cro-HR' => 'jedan',
4273
                            ),
4274
                        ),
4275
                        array(
4276
                            'always-available' => false,
4277
                            'translations' => array(
4278
                                'cro-HR' => 'swap-this',
4279
                            ),
4280
                        ),
4281
                    ),
4282
                    'alwaysAvailable' => false,
4283
                    'isHistory' => true,
4284
                    'isCustom' => false,
4285
                    'forward' => false,
4286
                )
4287
            ),
4288
            $urlAlias
4289
        );
4290
4291
        $urlAlias = $handler->lookup('jedan/swap-en');
4292
        $this->assertEquals(
4293
            new UrlAlias(
4294
                array(
4295
                    'id' => '2-' . md5('swap-en'),
4296
                    'type' => UrlAlias::LOCATION,
4297
                    'destination' => 316,
4298
                    'languageCodes' => array(
4299
                        'eng-GB',
4300
                    ),
4301
                    'pathData' => array(
4302
                        array(
4303
                            'always-available' => false,
4304
                            'translations' => array(
4305
                                'cro-HR' => 'jedan',
4306
                            ),
4307
                        ),
4308
                        array(
4309
                            'always-available' => false,
4310
                            'translations' => array(
4311
                                'eng-GB' => 'swap-en',
4312
                            ),
4313
                        ),
4314
                    ),
4315
                    'alwaysAvailable' => false,
4316
                    'isHistory' => true,
4317
                    'isCustom' => false,
4318
                    'forward' => false,
4319
                )
4320
            ),
4321
            $urlAlias
4322
        );
4323
4324
        $urlAlias = $handler->lookup('jedan/swap-hr');
4325
        $this->assertEquals(
4326
            new UrlAlias(
4327
                array(
4328
                    'id' => '2-' . md5('swap-hr'),
4329
                    'type' => UrlAlias::LOCATION,
4330
                    'destination' => 316,
4331
                    'languageCodes' => array(
4332
                        'cro-HR',
4333
                    ),
4334
                    'pathData' => array(
4335
                        array(
4336
                            'always-available' => false,
4337
                            'translations' => array(
4338
                                'cro-HR' => 'jedan',
4339
                            ),
4340
                        ),
4341
                        array(
4342
                            'always-available' => false,
4343
                            'translations' => array(
4344
                                'cro-HR' => 'swap-hr',
4345
                                'ger-DE' => 'swap-that',
4346
                                'nor-NO' => 'swap-that',
4347
                            ),
4348
                        ),
4349
                    ),
4350
                    'alwaysAvailable' => false,
4351
                    'isHistory' => false,
4352
                    'isCustom' => false,
4353
                    'forward' => false,
4354
                )
4355
            ),
4356
            $urlAlias
4357
        );
4358
4359
        $urlAlias = $handler->lookup('jedan/swap-that');
4360
        $this->assertEquals(
4361
            new UrlAlias(
4362
                array(
4363
                    'id' => '2-' . md5('swap-that'),
4364
                    'type' => UrlAlias::LOCATION,
4365
                    'destination' => 316,
4366
                    'languageCodes' => array(
4367
                        'ger-DE',
4368
                        'nor-NO',
4369
                    ),
4370
                    'pathData' => array(
4371
                        array(
4372
                            'always-available' => false,
4373
                            'translations' => array(
4374
                                'cro-HR' => 'jedan',
4375
                            ),
4376
                        ),
4377
                        array(
4378
                            'always-available' => false,
4379
                            'translations' => array(
4380
                                'cro-HR' => 'swap-hr',
4381
                                'ger-DE' => 'swap-that',
4382
                                'nor-NO' => 'swap-that',
4383
                            ),
4384
                        ),
4385
                    ),
4386
                    'alwaysAvailable' => false,
4387
                    'isHistory' => false,
4388
                    'isCustom' => false,
4389
                    'forward' => false,
4390
                )
4391
            ),
4392
            $urlAlias
4393
        );
4394
4395
        $urlAlias = $handler->lookup('dva/swap-hr');
4396
        $this->assertEquals(
4397
            new UrlAlias(
4398
                array(
4399
                    'id' => '3-' . md5('swap-hr'),
4400
                    'type' => UrlAlias::LOCATION,
4401
                    'destination' => 317,
4402
                    'languageCodes' => array(
4403
                        'cro-HR',
4404
                    ),
4405
                    'pathData' => array(
4406
                        array(
4407
                            'always-available' => false,
4408
                            'translations' => array(
4409
                                'cro-HR' => 'dva',
4410
                            ),
4411
                        ),
4412
                        array(
4413
                            'always-available' => false,
4414
                            'translations' => array(
4415
                                'cro-HR' => 'swap-hr',
4416
                            ),
4417
                        ),
4418
                    ),
4419
                    'alwaysAvailable' => false,
4420
                    'isHistory' => true,
4421
                    'isCustom' => false,
4422
                    'forward' => false,
4423
                )
4424
            ),
4425
            $urlAlias
4426
        );
4427
4428
        $urlAlias = $handler->lookup('dva/swap-that');
4429
        $this->assertEquals(
4430
            new UrlAlias(
4431
                array(
4432
                    'id' => '3-' . md5('swap-that'),
4433
                    'type' => UrlAlias::LOCATION,
4434
                    'destination' => 317,
4435
                    'languageCodes' => array(
4436
                        'ger-DE',
4437
                        'nor-NO',
4438
                    ),
4439
                    'pathData' => array(
4440
                        array(
4441
                            'always-available' => false,
4442
                            'translations' => array(
4443
                                'cro-HR' => 'dva',
4444
                            ),
4445
                        ),
4446
                        array(
4447
                            'always-available' => false,
4448
                            'translations' => array(
4449
                                'ger-DE' => 'swap-that',
4450
                                'nor-NO' => 'swap-that',
4451
                            ),
4452
                        ),
4453
                    ),
4454
                    'alwaysAvailable' => false,
4455
                    'isHistory' => true,
4456
                    'isCustom' => false,
4457
                    'forward' => false,
4458
                )
4459
            ),
4460
            $urlAlias
4461
        );
4462
4463
        $urlAlias = $handler->lookup('dva/swap-this');
4464
        $this->assertEquals(
4465
            new UrlAlias(
4466
                array(
4467
                    'id' => '3-' . md5('swap-this'),
4468
                    'type' => UrlAlias::LOCATION,
4469
                    'destination' => 317,
4470
                    'languageCodes' => array(
4471
                        'cro-HR',
4472
                    ),
4473
                    'pathData' => array(
4474
                        array(
4475
                            'always-available' => false,
4476
                            'translations' => array(
4477
                                'cro-HR' => 'dva',
4478
                            ),
4479
                        ),
4480
                        array(
4481
                            'always-available' => false,
4482
                            'translations' => array(
4483
                                'cro-HR' => 'swap-this',
4484
                                'eng-GB' => 'swap-en',
4485
                            ),
4486
                        ),
4487
                    ),
4488
                    'alwaysAvailable' => false,
4489
                    'isHistory' => false,
4490
                    'isCustom' => false,
4491
                    'forward' => false,
4492
                )
4493
            ),
4494
            $urlAlias
4495
        );
4496
4497
        $urlAlias = $handler->lookup('dva/swap-en');
4498
        $this->assertEquals(
4499
            new UrlAlias(
4500
                array(
4501
                    'id' => '3-' . md5('swap-en'),
4502
                    'type' => UrlAlias::LOCATION,
4503
                    'destination' => 317,
4504
                    'languageCodes' => array(
4505
                        'eng-GB',
4506
                    ),
4507
                    'pathData' => array(
4508
                        array(
4509
                            'always-available' => false,
4510
                            'translations' => array(
4511
                                'cro-HR' => 'dva',
4512
                            ),
4513
                        ),
4514
                        array(
4515
                            'always-available' => false,
4516
                            'translations' => array(
4517
                                'cro-HR' => 'swap-this',
4518
                                'eng-GB' => 'swap-en',
4519
                            ),
4520
                        ),
4521
                    ),
4522
                    'alwaysAvailable' => false,
4523
                    'isHistory' => false,
4524
                    'isCustom' => false,
4525
                    'forward' => false,
4526
                )
4527
            ),
4528
            $urlAlias
4529
        );
4530
    }
4531
4532
    /**
4533
     * @return int
4534
     */
4535
    protected function countRows()
4536
    {
4537
        /** @var \eZ\Publish\Core\Persistence\Database\SelectQuery $query */
4538
        $query = $this->dbHandler->createSelectQuery();
4539
        $query->select(
4540
            $query->expr->count('*')
4541
        )->from(
4542
            $this->dbHandler->quoteTable('ezurlalias_ml')
4543
        );
4544
4545
        $statement = $query->prepare();
4546
        $statement->execute();
4547
4548
        return (int)$statement->fetchColumn();
4549
    }
4550
4551
    /**
4552
     * @return int
4553
     */
4554
    protected function dump()
4555
    {
4556
        /** @var \eZ\Publish\Core\Persistence\Database\SelectQuery $query */
4557
        $query = $this->dbHandler->createSelectQuery();
4558
        $query->select(
4559
            '*'
4560
        )->from(
4561
            $this->dbHandler->quoteTable('ezurlalias_ml')
4562
        );
4563
4564
        $statement = $query->prepare();
4565
        $statement->execute();
4566
4567
        var_dump($statement->fetchAll(\PDO::FETCH_ASSOC));
0 ignored issues
show
Security Debugging Code introduced by
var_dump($statement->fet...ll(\PDO::FETCH_ASSOC)); looks like debug code. Are you sure you do not want to remove it? This might expose sensitive data.
Loading history...
4568
    }
4569
4570
    /**
4571
     * @var \eZ\Publish\Core\Persistence\Doctrine\ConnectionHandler
4572
     */
4573
    protected $dbHandler;
4574
4575
    /**
4576
     * @var \eZ\Publish\Core\Persistence\Legacy\Content\Location\Gateway
4577
     */
4578
    protected $locationGateway;
4579
4580
    /**
4581
     * @param array $methods
4582
     *
4583
     * @return \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler|\PHPUnit_Framework_MockObject_MockObject
4584
     */
4585
    protected function getPartlyMockedHandler(array $methods)
4586
    {
4587
        $mock = $this->getMock(
4588
            'eZ\\Publish\\Core\\Persistence\\Legacy\\Content\\UrlAlias\\Handler',
4589
            $methods,
4590
            array(
4591
                self::getMock('eZ\\Publish\\Core\\Persistence\\Legacy\\Content\\UrlAlias\\Gateway'),
4592
                self::getMock(
4593
                    'eZ\\Publish\\Core\\Persistence\\Legacy\\Content\\UrlAlias\\Mapper',
4594
                    array(),
4595
                    array(),
4596
                    '',
4597
                    false
4598
                ),
4599
                self::getMock('eZ\\Publish\\Core\\Persistence\\Legacy\\Content\\Location\\Gateway'),
4600
                self::getMock(
4601
                    'eZ\\Publish\\Core\\Persistence\\Legacy\\Content\\Language\\Handler',
4602
                    array(),
4603
                    array(),
4604
                    '',
4605
                    false
4606
                ),
4607
                self::getMock(
4608
                    'eZ\\Publish\\Core\\Persistence\\Legacy\\Content\\UrlAlias\\SlugConverter',
4609
                    array(),
4610
                    array(),
4611
                    '',
4612
                    false
4613
                ),
4614
            )
4615
        );
4616
4617
        return $mock;
4618
    }
4619
4620
    /**
4621
     * @return \eZ\Publish\Core\Persistence\Legacy\Content\UrlAlias\Handler
4622
     */
4623
    protected function getHandler()
4624
    {
4625
        $this->dbHandler = $this->getDatabaseHandler();
4626
        $languageHandler = new LanguageHandler(
4627
            new LanguageGateway(
4628
                $this->getDatabaseHandler()
4629
            ),
4630
            new LanguageMapper()
4631
        );
4632
        $languageMaskGenerator = new LanguageMaskGenerator($languageHandler);
4633
        $gateway = new DoctrineDatabase(
4634
            $this->dbHandler,
4635
            $languageMaskGenerator
4636
        );
4637
        $mapper = new Mapper($languageMaskGenerator);
4638
        $slugConverter = new SlugConverter($this->getProcessor());
4639
4640
        return new Handler(
4641
            $gateway,
4642
            $mapper,
4643
            $this->getLocationGateway(),
4644
            $languageHandler,
4645
            $slugConverter
4646
        );
4647
    }
4648
4649
    /**
4650
     * @return \eZ\Publish\Core\Persistence\Legacy\Content\Location\Gateway
4651
     */
4652
    protected function getLocationGateway()
4653
    {
4654
        if (!isset($this->dbHandler)) {
4655
            $this->dbHandler = $this->getDatabaseHandler();
4656
        }
4657
4658
        if (!isset($this->locationGateway)) {
4659
            $this->locationGateway = new DoctrineDatabaseLocation($this->dbHandler);
4660
        }
4661
4662
        return $this->locationGateway;
4663
    }
4664
4665
    /**
4666
     * @return \eZ\Publish\Core\Persistence\TransformationProcessor
4667
     */
4668
    public function getProcessor()
4669
    {
4670
        return new DefinitionBased(
4671
            new Parser(),
4672
            new PcreCompiler(new Utf8Converter()),
4673
            glob(__DIR__ . '/../../../../Tests/TransformationProcessor/_fixtures/transformations/*.tr')
4674
        );
4675
    }
4676
}
4677