1<?php
2
3namespace dokuwiki\plugin\struct\test\action;
4
5use dokuwiki\plugin\struct\meta;
6use dokuwiki\plugin\struct\test\StructTest;
7
8/**
9 * Tests for the move plugin support of the struct plugin
10 *
11 * @group plugin_struct
12 * @group plugins
13 * @covers action_plugin_struct_move
14 */
15class MoveTest extends StructTest
16{
17
18    protected $data1 = [
19        'page' => 'wiki:syntax',
20        'pages' => ['wiki:syntax', 'wiki:welcome'],
21        'lookup' => '["page1",0]',
22        'lookups' => ['["page1",0]', '["page2",0]'],
23        'media' => 'wiki:logo.png',
24        'medias' => ['wiki:logo.png'],
25        'title' => 'wiki:syntax',
26        'titles' => ['wiki:syntax', 'wiki:welcome']
27    ];
28
29    protected $data2 = [
30        'page' => 'wiki:syntax#something',
31        'pages' => ['wiki:syntax#something', 'wiki:welcome#something'],
32        'lookup' => '["page1",0]',
33        'lookups' => ['["page1",0]', '["page2",0]'],
34        'media' => 'wiki:logo.png',
35        'medias' => ['wiki:logo.png'],
36        'title' => 'wiki:syntax#something',
37        'titles' => ['wiki:syntax#something', 'wiki:welcome#something']
38    ];
39
40    protected $empty = [
41        'page' => '',
42        'pages' => [],
43        'lookup' => '',
44        'lookups' => [],
45        'media' => '',
46        'medias' => [],
47        'title' => '',
48        'titles' => []
49    ];
50
51    public function setUp(): void
52    {
53        parent::setUp();
54        $this->loadSchemaJSON('moves');
55
56        $schemaData = meta\AccessTable::getPageAccess('moves', 'page1');
57        $schemaData->saveData($this->data1);
58
59        $schemaData = meta\AccessTable::getPageAccess('moves', 'page2');
60        $schemaData->saveData($this->data2);
61    }
62
63    public function test_selfmove()
64    {
65        // fake move event
66        $evdata = ['src_id' => 'page1', 'dst_id' => 'page3'];
67        $event = new \Doku_Event('PLUGIN_MOVE_PAGE_RENAME', $evdata);
68        $event->trigger();
69
70        // old page should be gone
71        $schemaData = meta\AccessTable::getPageAccess('moves', 'page1');
72        $this->assertEquals($this->empty, $schemaData->getDataArray());
73
74        // new page should have adjusted data
75        $data = $this->data1;
76        $data['lookup'] = '["page3",0]';
77        $data['lookups'] = ['["page3",0]', '["page2",0]'];
78        $schemaData = meta\AccessTable::getPageAccess('moves', 'page3');
79        $this->assertEquals($data, $schemaData->getDataArray());
80
81        // other page should have adjusted lookups
82        $data = $this->data2;
83        $data['lookup'] = '["page3",0]';
84        $data['lookups'] = ['["page3",0]', '["page2",0]'];
85        $schemaData = meta\AccessTable::getPageAccess('moves', 'page2');
86        $this->assertEquals($data, $schemaData->getDataArray());
87    }
88
89    public function test_pagemove()
90    {
91        // fake move event
92        $evdata = ['src_id' => 'wiki:syntax', 'dst_id' => 'foobar'];
93        $event = new \Doku_Event('PLUGIN_MOVE_PAGE_RENAME', $evdata);
94        $event->trigger();
95
96        $data = $this->data1;
97        $data['page'] = 'foobar';
98        $data['pages'] = ['foobar', 'wiki:welcome'];
99        $data['title'] = 'foobar';
100        $data['titles'] = ['foobar', 'wiki:welcome'];
101        $schemaData = meta\AccessTable::getPageAccess('moves', 'page1');
102        $this->assertEquals($data, $schemaData->getDataArray());
103
104        $data = $this->data2;
105        $data['page'] = 'foobar#something';
106        $data['pages'] = ['foobar#something', 'wiki:welcome#something'];
107        $data['title'] = 'foobar#something';
108        $data['titles'] = ['foobar#something', 'wiki:welcome#something'];
109        $schemaData = meta\AccessTable::getPageAccess('moves', 'page2');
110        $this->assertEquals($data, $schemaData->getDataArray());
111    }
112
113    public function test_mediamove()
114    {
115        // fake move event
116        $evdata = ['src_id' => 'wiki:logo.png', 'dst_id' => 'foobar.png'];
117        $event = new \Doku_Event('PLUGIN_MOVE_MEDIA_RENAME', $evdata);
118        $event->trigger();
119
120        $data = $this->data1;
121        $data['media'] = 'foobar.png';
122        $data['medias'] = ['foobar.png'];
123        $schemaData = meta\AccessTable::getPageAccess('moves', 'page1');
124        $this->assertEquals($data, $schemaData->getDataArray());
125
126        $data = $this->data2;
127        $data['media'] = 'foobar.png';
128        $data['medias'] = ['foobar.png'];
129        $schemaData = meta\AccessTable::getPageAccess('moves', 'page2');
130        $this->assertEquals($data, $schemaData->getDataArray());
131    }
132}
133