1<?php
2
3
4class helper_plugin_move_plan_findMissingDocuments_mock extends helper_plugin_move_plan {
5
6    public function findMissingDocuments($src, $dst,  $type = self::TYPE_PAGES) {
7        parent::findMissingDocuments($src, $dst, $type);
8    }
9
10    public function getTmpstore() {
11        return $this->tmpstore;
12    }
13
14}
15
16
17/**
18 * Test cases for helper_plugin_move_plan::stepThroughDocuments function of the move plugin
19 *
20 * @group plugin_move
21 * @group plugin_move_unittests
22 * @group plugins
23 * @group unittests
24 * @covers helper_plugin_move_plan::findMissingDocuments
25 */
26class plugin_move_findMissingPages_test extends DokuWikiTest {
27
28    protected $pluginsEnabled = array('move',);
29    /** @var  helper_plugin_move_plan_findMissingDocuments_mock $plan */
30    protected $plan;
31
32    /**
33     * @coversNothing
34     */
35    public function setUp(): void {
36        parent::setUp();
37        $this->plan = new helper_plugin_move_plan_findMissingDocuments_mock();
38    }
39
40
41    /**
42     * @coversNothing
43     */
44    public function tearDown(): void {
45        global $conf;
46
47        $dirs = array('indexdir','datadir','metadir', 'mediadir');
48        foreach ($dirs as $dir) {
49            io_rmdir($conf[$dir],true);
50            mkdir($conf[$dir]);
51        }
52        $this->plan->abort();
53        parent::tearDown();
54    }
55
56
57    function test_findMissingPages_empty () {
58        $this->plan->findMissingDocuments('oldns','newns:');
59        $tmpstore = $this->plan->getTmpstore();
60        $this->assertSame(array(),$tmpstore['miss']);
61    }
62
63    function test_findMissingPages_missingPage_default () {
64        saveWikiText('start','[[oldns:missing]]','test edit');
65        idx_addPage('start');
66        $this->plan->findMissingDocuments('oldns:','newns:');
67        $tmpstore = $this->plan->getTmpstore();
68        $this->assertSame(array('oldns:missing' => 'newns:missing',),$tmpstore['miss']);
69    }
70
71    function test_findMissingPages_missingPage_explicit () {
72        saveWikiText('start','[[oldns:missing]]','test edit');
73        idx_addPage('start');
74        $this->plan->findMissingDocuments('oldns:','newns:',helper_plugin_move_plan::TYPE_PAGES);
75        $tmpstore = $this->plan->getTmpstore();
76        $this->assertSame(array('oldns:missing' => 'newns:missing',),$tmpstore['miss']);
77    }
78
79    function test_findMissingPages_missingPage_integrated () {
80        saveWikiText('oldns:start','[[oldns:missing]] {{oldns:missing.png}}','test edit');
81        idx_addPage('oldns:start');
82        $this->plan->addPageNamespaceMove('oldns', 'newns');
83        $this->plan->addMediaNamespaceMove('oldns', 'newns');
84
85        $this->plan->commit();
86
87        $missing_file = file(TMP_DIR . '/data/meta/__move_missing');
88        $this->assertSame(array("oldns:missing\tnewns:missing\n",),$missing_file,'new configuration fails');
89
90        $missing_media_file = file(TMP_DIR . '/data/meta/__move_missing_media');
91        $this->assertSame(array("oldns:missing.png\tnewns:missing.png\n",),$missing_media_file,'new configuration fails');
92
93    }
94
95    function test_findMissingPages_missingMedia () {
96        saveWikiText('start','{{oldns:missing.png}}','test edit');
97        idx_addPage('start');
98        $this->plan->findMissingDocuments('oldns:','newns:',helper_plugin_move_plan::TYPE_MEDIA);
99        $tmpstore = $this->plan->getTmpstore();
100        $this->assertSame(array('oldns:missing.png' => 'newns:missing.png',),$tmpstore['miss_media']);
101    }
102
103    function test_findMissingDocuments_nonMissingMedia () {
104        $filepath = DOKU_TMP_DATA.'media/oldns/oldnsimage.png';
105        io_makeFileDir($filepath);
106        io_saveFile($filepath,'');
107        saveWikiText('start','{{oldns:oldnsimage.png}}','test edit');
108        idx_addPage('start');
109        $this->plan->findMissingDocuments('oldns:','newns:',helper_plugin_move_plan::TYPE_MEDIA);
110        $tmpstore = $this->plan->getTmpstore();
111        $this->assertSame(array(),$tmpstore['miss_media']);
112    }
113}
114