xref: /plugin/bpmnio/_test/plugin_bpmnio_link_processor.test.php (revision 57e8c51e519401ec595e8597ab561491ffb8cb9e)
1*57e8c51eSJaap de Haan<?php
2*57e8c51eSJaap de Haan
3*57e8c51eSJaap de Haan/**
4*57e8c51eSJaap de Haan * @group plugin_bpmnio
5*57e8c51eSJaap de Haan * @group plugins
6*57e8c51eSJaap de Haan */
7*57e8c51eSJaap de Haanclass plugin_bpmnio_link_processor_test extends DokuWikiTest
8*57e8c51eSJaap de Haan{
9*57e8c51eSJaap de Haan    protected $pluginsEnabled = array('bpmnio');
10*57e8c51eSJaap de Haan
11*57e8c51eSJaap de Haan    private function loadLinkProcessor(): void
12*57e8c51eSJaap de Haan    {
13*57e8c51eSJaap de Haan        require_once __DIR__ . '/../inc/link_processor.php';
14*57e8c51eSJaap de Haan    }
15*57e8c51eSJaap de Haan
16*57e8c51eSJaap de Haan    /**
17*57e8c51eSJaap de Haan     * XML with a declaration at position 0 (clean input as provided after source trim)
18*57e8c51eSJaap de Haan     * must be successfully parsed so that wikilinks are resolved.
19*57e8c51eSJaap de Haan     */
20*57e8c51eSJaap de Haan    public function test_build_payload_xml_declaration_at_start(): void
21*57e8c51eSJaap de Haan    {
22*57e8c51eSJaap de Haan        $this->loadLinkProcessor();
23*57e8c51eSJaap de Haan
24*57e8c51eSJaap de Haan        io_mkdir_p(dirname(wikiFN('test:target')));
25*57e8c51eSJaap de Haan        io_saveFile(wikiFN('test:target'), 'Target page');
26*57e8c51eSJaap de Haan
27*57e8c51eSJaap de Haan        $xml = '<?xml version="1.0" encoding="UTF-8"?>'
28*57e8c51eSJaap de Haan            . '<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL">'
29*57e8c51eSJaap de Haan            . '<process id="Process_1">'
30*57e8c51eSJaap de Haan            . '<task id="Task_1" name="[[test:target|Go there]]" />'
31*57e8c51eSJaap de Haan            . '</process>'
32*57e8c51eSJaap de Haan            . '</definitions>';
33*57e8c51eSJaap de Haan
34*57e8c51eSJaap de Haan        $result = plugin_bpmnio_link_processor::buildPayload($xml);
35*57e8c51eSJaap de Haan
36*57e8c51eSJaap de Haan        // XML was parsed successfully: wikilink markup is stripped from name
37*57e8c51eSJaap de Haan        $this->assertStringNotContainsString('[[', $result['xml']);
38*57e8c51eSJaap de Haan        $this->assertStringContainsString('name="Go there"', $result['xml']);
39*57e8c51eSJaap de Haan        // XML declaration is preserved in output
40*57e8c51eSJaap de Haan        $this->assertStringContainsString('<?xml', $result['xml']);
41*57e8c51eSJaap de Haan        // Link map contains the resolved entry
42*57e8c51eSJaap de Haan        $this->assertArrayHasKey('Task_1', $result['links']);
43*57e8c51eSJaap de Haan        $this->assertEquals('test:target', $result['links']['Task_1']['target']);
44*57e8c51eSJaap de Haan    }
45*57e8c51eSJaap de Haan
46*57e8c51eSJaap de Haan    /**
47*57e8c51eSJaap de Haan     * Empty input returns empty xml and no links without crashing.
48*57e8c51eSJaap de Haan     */
49*57e8c51eSJaap de Haan    public function test_build_payload_empty_input(): void
50*57e8c51eSJaap de Haan    {
51*57e8c51eSJaap de Haan        $this->loadLinkProcessor();
52*57e8c51eSJaap de Haan
53*57e8c51eSJaap de Haan        $result = plugin_bpmnio_link_processor::buildPayload('');
54*57e8c51eSJaap de Haan
55*57e8c51eSJaap de Haan        $this->assertSame('', $result['xml']);
56*57e8c51eSJaap de Haan        $this->assertSame([], $result['links']);
57*57e8c51eSJaap de Haan    }
58*57e8c51eSJaap de Haan
59*57e8c51eSJaap de Haan    /**
60*57e8c51eSJaap de Haan     * XML without wikilinks returns the processed XML and an empty link map.
61*57e8c51eSJaap de Haan     */
62*57e8c51eSJaap de Haan    public function test_build_payload_no_links(): void
63*57e8c51eSJaap de Haan    {
64*57e8c51eSJaap de Haan        $this->loadLinkProcessor();
65*57e8c51eSJaap de Haan
66*57e8c51eSJaap de Haan        $xml = '<?xml version="1.0" encoding="UTF-8"?>'
67*57e8c51eSJaap de Haan            . '<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL">'
68*57e8c51eSJaap de Haan            . '<process id="Process_1">'
69*57e8c51eSJaap de Haan            . '<task id="Task_1" name="Plain Task" />'
70*57e8c51eSJaap de Haan            . '</process>'
71*57e8c51eSJaap de Haan            . '</definitions>';
72*57e8c51eSJaap de Haan
73*57e8c51eSJaap de Haan        $result = plugin_bpmnio_link_processor::buildPayload($xml);
74*57e8c51eSJaap de Haan
75*57e8c51eSJaap de Haan        $this->assertStringContainsString('Plain Task', $result['xml']);
76*57e8c51eSJaap de Haan        $this->assertSame([], $result['links']);
77*57e8c51eSJaap de Haan    }
78*57e8c51eSJaap de Haan
79*57e8c51eSJaap de Haan    /**
80*57e8c51eSJaap de Haan     * Malformed XML returns the original string unchanged and no links.
81*57e8c51eSJaap de Haan     */
82*57e8c51eSJaap de Haan    public function test_build_payload_malformed_xml(): void
83*57e8c51eSJaap de Haan    {
84*57e8c51eSJaap de Haan        $this->loadLinkProcessor();
85*57e8c51eSJaap de Haan
86*57e8c51eSJaap de Haan        $xml = '<unclosed>';
87*57e8c51eSJaap de Haan
88*57e8c51eSJaap de Haan        $result = plugin_bpmnio_link_processor::buildPayload($xml);
89*57e8c51eSJaap de Haan
90*57e8c51eSJaap de Haan        $this->assertSame($xml, $result['xml']);
91*57e8c51eSJaap de Haan        $this->assertSame([], $result['links']);
92*57e8c51eSJaap de Haan    }
93*57e8c51eSJaap de Haan}
94