xref: /plugin/bpmnio/_test/action_plugin_bpmnio_editor.test.php (revision 033061be24b61e2ca1dcf4d5ade55358f0bb0818)
1242a8e5cSJaap de Haan<?php
29ff8d41cSJaap de Haan
3242a8e5cSJaap de Haan/**
4242a8e5cSJaap de Haan * @group plugin_bpmnio
5242a8e5cSJaap de Haan * @group plugins
6242a8e5cSJaap de Haan */
79ff8d41cSJaap de Haanclass action_plugin_bpmnio_editor_test extends DokuWikiTest
89ff8d41cSJaap de Haan{
9242a8e5cSJaap de Haan    protected $pluginsEnabled = array('bpmnio');
10242a8e5cSJaap de Haan
11242a8e5cSJaap de Haan    /**
12242a8e5cSJaap de Haan     * Test that the editor plugin can be loaded
13242a8e5cSJaap de Haan     */
149ff8d41cSJaap de Haan    public function test_plugin_load()
159ff8d41cSJaap de Haan    {
16242a8e5cSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
17242a8e5cSJaap de Haan        $this->assertNotNull($plugin, 'Editor action plugin should be loadable');
18242a8e5cSJaap de Haan    }
19242a8e5cSJaap de Haan
20242a8e5cSJaap de Haan    /**
21242a8e5cSJaap de Haan     * Test section edit button for BPMN target
22242a8e5cSJaap de Haan     */
239ff8d41cSJaap de Haan    public function test_section_edit_button_bpmn()
249ff8d41cSJaap de Haan    {
25242a8e5cSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
26242a8e5cSJaap de Haan
27242a8e5cSJaap de Haan        $data = ['target' => 'plugin_bpmnio_bpmn', 'name' => ''];
28242a8e5cSJaap de Haan        $event = new \dokuwiki\Extension\Event('HTML_SECEDIT_BUTTON', $data);
29242a8e5cSJaap de Haan
30242a8e5cSJaap de Haan        $plugin->sectionEditButton($event);
31242a8e5cSJaap de Haan
32242a8e5cSJaap de Haan        $this->assertNotEmpty($data['name'], 'Button name should be set for BPMN target');
33242a8e5cSJaap de Haan    }
34242a8e5cSJaap de Haan
35242a8e5cSJaap de Haan    /**
36242a8e5cSJaap de Haan     * Test section edit button for DMN target
37242a8e5cSJaap de Haan     */
389ff8d41cSJaap de Haan    public function test_section_edit_button_dmn()
399ff8d41cSJaap de Haan    {
40242a8e5cSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
41242a8e5cSJaap de Haan
42242a8e5cSJaap de Haan        $data = ['target' => 'plugin_bpmnio_dmn', 'name' => ''];
43242a8e5cSJaap de Haan        $event = new \dokuwiki\Extension\Event('HTML_SECEDIT_BUTTON', $data);
44242a8e5cSJaap de Haan
45242a8e5cSJaap de Haan        $plugin->sectionEditButton($event);
46242a8e5cSJaap de Haan
47242a8e5cSJaap de Haan        $this->assertNotEmpty($data['name'], 'Button name should be set for DMN target');
48242a8e5cSJaap de Haan    }
49242a8e5cSJaap de Haan
50242a8e5cSJaap de Haan    /**
51242a8e5cSJaap de Haan     * Test section edit button ignores non-bpmnio targets
52242a8e5cSJaap de Haan     */
539ff8d41cSJaap de Haan    public function test_section_edit_button_ignores_other()
549ff8d41cSJaap de Haan    {
55242a8e5cSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
56242a8e5cSJaap de Haan
57242a8e5cSJaap de Haan        $data = ['target' => 'section', 'name' => ''];
58242a8e5cSJaap de Haan        $event = new \dokuwiki\Extension\Event('HTML_SECEDIT_BUTTON', $data);
59242a8e5cSJaap de Haan
60242a8e5cSJaap de Haan        $plugin->sectionEditButton($event);
61242a8e5cSJaap de Haan
62242a8e5cSJaap de Haan        $this->assertEmpty($data['name'], 'Button name should not be set for non-bpmnio targets');
63242a8e5cSJaap de Haan    }
64242a8e5cSJaap de Haan
65242a8e5cSJaap de Haan    /**
66242a8e5cSJaap de Haan     * Test handlePost does nothing when plugin data not in POST
67242a8e5cSJaap de Haan     */
689ff8d41cSJaap de Haan    public function test_handle_post_noop_without_data()
699ff8d41cSJaap de Haan    {
70242a8e5cSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
71242a8e5cSJaap de Haan
72242a8e5cSJaap de Haan        global $TEXT;
73242a8e5cSJaap de Haan        $TEXT = 'original';
74242a8e5cSJaap de Haan        global $INPUT;
75242a8e5cSJaap de Haan
76242a8e5cSJaap de Haan        $data = 'edit';
77242a8e5cSJaap de Haan        $event = new \dokuwiki\Extension\Event('ACTION_ACT_PREPROCESS', $data);
78242a8e5cSJaap de Haan
79242a8e5cSJaap de Haan        $plugin->handlePost($event);
80242a8e5cSJaap de Haan
81242a8e5cSJaap de Haan        $this->assertEquals('original', $TEXT, '$TEXT should not change when plugin data is not posted');
82242a8e5cSJaap de Haan    }
8361596a8fSJaap de Haan
8461596a8fSJaap de Haan    public function test_handle_form_generates_balanced_editor_markup()
8561596a8fSJaap de Haan    {
8661596a8fSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
8761596a8fSJaap de Haan
8861596a8fSJaap de Haan        global $TEXT;
8961596a8fSJaap de Haan        global $RANGE;
9061596a8fSJaap de Haan
9161596a8fSJaap de Haan        $TEXT = '<xml />';
9261596a8fSJaap de Haan        $RANGE = '1-2';
9361596a8fSJaap de Haan
94*033061beSJaap de Haan        $form = new class {
95*033061beSJaap de Haan            public array $hiddenFields = [];
96*033061beSJaap de Haan            public string $html = '';
97*033061beSJaap de Haan
98*033061beSJaap de Haan            public function setHiddenField($name, $value)
99*033061beSJaap de Haan            {
100*033061beSJaap de Haan                $this->hiddenFields[$name] = $value;
101*033061beSJaap de Haan            }
102*033061beSJaap de Haan
103*033061beSJaap de Haan            public function addHTML($html)
104*033061beSJaap de Haan            {
105*033061beSJaap de Haan                $this->html .= $html;
106*033061beSJaap de Haan            }
107*033061beSJaap de Haan        };
10861596a8fSJaap de Haan        $data = [
10961596a8fSJaap de Haan            'target' => 'plugin_bpmnio_bpmn',
11061596a8fSJaap de Haan            'form' => $form,
11161596a8fSJaap de Haan        ];
11261596a8fSJaap de Haan        $event = new \dokuwiki\Extension\Event('EDIT_FORM_ADDTEXTAREA', $data);
11361596a8fSJaap de Haan
11461596a8fSJaap de Haan        $plugin->handleForm($event);
11561596a8fSJaap de Haan
11661596a8fSJaap de Haan        $this->assertArrayHasKey('plugin_bpmnio_data', $form->hiddenFields);
11761596a8fSJaap de Haan        $this->assertStringContainsString('id="plugin_bpmnio__bpmn_editor"', $form->html);
11861596a8fSJaap de Haan        $this->assertStringContainsString('<div class="bpmn_js_canvas">', $form->html);
11961596a8fSJaap de Haan        $this->assertSame(4, substr_count($form->html, '<div'));
12061596a8fSJaap de Haan        $this->assertSame(4, substr_count($form->html, '</div>'));
12161596a8fSJaap de Haan    }
122242a8e5cSJaap de Haan}
123