xref: /plugin/bpmnio/_test/action_plugin_bpmnio_editor.test.php (revision 61596a8f4d52e67d5fc86460fc063541f1c17e8b)
1242a8e5cSJaap de Haan<?php
29ff8d41cSJaap de Haan
3242a8e5cSJaap de Haan/**
4242a8e5cSJaap de Haan * @group plugin_bpmnio
5242a8e5cSJaap de Haan * @group plugins
6242a8e5cSJaap de Haan */
7*61596a8fSJaap de Haanclass action_plugin_bpmnio_editor_test_form
8*61596a8fSJaap de Haan{
9*61596a8fSJaap de Haan    public array $hiddenFields = [];
10*61596a8fSJaap de Haan    public string $html = '';
11*61596a8fSJaap de Haan
12*61596a8fSJaap de Haan    public function setHiddenField($name, $value)
13*61596a8fSJaap de Haan    {
14*61596a8fSJaap de Haan        $this->hiddenFields[$name] = $value;
15*61596a8fSJaap de Haan    }
16*61596a8fSJaap de Haan
17*61596a8fSJaap de Haan    public function addHTML($html)
18*61596a8fSJaap de Haan    {
19*61596a8fSJaap de Haan        $this->html .= $html;
20*61596a8fSJaap de Haan    }
21*61596a8fSJaap de Haan}
22*61596a8fSJaap de Haan
239ff8d41cSJaap de Haanclass action_plugin_bpmnio_editor_test extends DokuWikiTest
249ff8d41cSJaap de Haan{
25242a8e5cSJaap de Haan    protected $pluginsEnabled = array('bpmnio');
26242a8e5cSJaap de Haan
27242a8e5cSJaap de Haan    /**
28242a8e5cSJaap de Haan     * Test that the editor plugin can be loaded
29242a8e5cSJaap de Haan     */
309ff8d41cSJaap de Haan    public function test_plugin_load()
319ff8d41cSJaap de Haan    {
32242a8e5cSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
33242a8e5cSJaap de Haan        $this->assertNotNull($plugin, 'Editor action plugin should be loadable');
34242a8e5cSJaap de Haan    }
35242a8e5cSJaap de Haan
36242a8e5cSJaap de Haan    /**
37242a8e5cSJaap de Haan     * Test section edit button for BPMN target
38242a8e5cSJaap de Haan     */
399ff8d41cSJaap de Haan    public function test_section_edit_button_bpmn()
409ff8d41cSJaap de Haan    {
41242a8e5cSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
42242a8e5cSJaap de Haan
43242a8e5cSJaap de Haan        $data = ['target' => 'plugin_bpmnio_bpmn', 'name' => ''];
44242a8e5cSJaap de Haan        $event = new \dokuwiki\Extension\Event('HTML_SECEDIT_BUTTON', $data);
45242a8e5cSJaap de Haan
46242a8e5cSJaap de Haan        $plugin->sectionEditButton($event);
47242a8e5cSJaap de Haan
48242a8e5cSJaap de Haan        $this->assertNotEmpty($data['name'], 'Button name should be set for BPMN target');
49242a8e5cSJaap de Haan    }
50242a8e5cSJaap de Haan
51242a8e5cSJaap de Haan    /**
52242a8e5cSJaap de Haan     * Test section edit button for DMN target
53242a8e5cSJaap de Haan     */
549ff8d41cSJaap de Haan    public function test_section_edit_button_dmn()
559ff8d41cSJaap de Haan    {
56242a8e5cSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
57242a8e5cSJaap de Haan
58242a8e5cSJaap de Haan        $data = ['target' => 'plugin_bpmnio_dmn', 'name' => ''];
59242a8e5cSJaap de Haan        $event = new \dokuwiki\Extension\Event('HTML_SECEDIT_BUTTON', $data);
60242a8e5cSJaap de Haan
61242a8e5cSJaap de Haan        $plugin->sectionEditButton($event);
62242a8e5cSJaap de Haan
63242a8e5cSJaap de Haan        $this->assertNotEmpty($data['name'], 'Button name should be set for DMN target');
64242a8e5cSJaap de Haan    }
65242a8e5cSJaap de Haan
66242a8e5cSJaap de Haan    /**
67242a8e5cSJaap de Haan     * Test section edit button ignores non-bpmnio targets
68242a8e5cSJaap de Haan     */
699ff8d41cSJaap de Haan    public function test_section_edit_button_ignores_other()
709ff8d41cSJaap de Haan    {
71242a8e5cSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
72242a8e5cSJaap de Haan
73242a8e5cSJaap de Haan        $data = ['target' => 'section', 'name' => ''];
74242a8e5cSJaap de Haan        $event = new \dokuwiki\Extension\Event('HTML_SECEDIT_BUTTON', $data);
75242a8e5cSJaap de Haan
76242a8e5cSJaap de Haan        $plugin->sectionEditButton($event);
77242a8e5cSJaap de Haan
78242a8e5cSJaap de Haan        $this->assertEmpty($data['name'], 'Button name should not be set for non-bpmnio targets');
79242a8e5cSJaap de Haan    }
80242a8e5cSJaap de Haan
81242a8e5cSJaap de Haan    /**
82242a8e5cSJaap de Haan     * Test handlePost does nothing when plugin data not in POST
83242a8e5cSJaap de Haan     */
849ff8d41cSJaap de Haan    public function test_handle_post_noop_without_data()
859ff8d41cSJaap de Haan    {
86242a8e5cSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
87242a8e5cSJaap de Haan
88242a8e5cSJaap de Haan        global $TEXT;
89242a8e5cSJaap de Haan        $TEXT = 'original';
90242a8e5cSJaap de Haan        global $INPUT;
91242a8e5cSJaap de Haan
92242a8e5cSJaap de Haan        $data = 'edit';
93242a8e5cSJaap de Haan        $event = new \dokuwiki\Extension\Event('ACTION_ACT_PREPROCESS', $data);
94242a8e5cSJaap de Haan
95242a8e5cSJaap de Haan        $plugin->handlePost($event);
96242a8e5cSJaap de Haan
97242a8e5cSJaap de Haan        $this->assertEquals('original', $TEXT, '$TEXT should not change when plugin data is not posted');
98242a8e5cSJaap de Haan    }
99*61596a8fSJaap de Haan
100*61596a8fSJaap de Haan    public function test_handle_form_generates_balanced_editor_markup()
101*61596a8fSJaap de Haan    {
102*61596a8fSJaap de Haan        $plugin = plugin_load('action', 'bpmnio_editor');
103*61596a8fSJaap de Haan
104*61596a8fSJaap de Haan        global $TEXT;
105*61596a8fSJaap de Haan        global $RANGE;
106*61596a8fSJaap de Haan
107*61596a8fSJaap de Haan        $TEXT = '<xml />';
108*61596a8fSJaap de Haan        $RANGE = '1-2';
109*61596a8fSJaap de Haan
110*61596a8fSJaap de Haan        $form = new action_plugin_bpmnio_editor_test_form();
111*61596a8fSJaap de Haan        $data = [
112*61596a8fSJaap de Haan            'target' => 'plugin_bpmnio_bpmn',
113*61596a8fSJaap de Haan            'form' => $form,
114*61596a8fSJaap de Haan        ];
115*61596a8fSJaap de Haan        $event = new \dokuwiki\Extension\Event('EDIT_FORM_ADDTEXTAREA', $data);
116*61596a8fSJaap de Haan
117*61596a8fSJaap de Haan        $plugin->handleForm($event);
118*61596a8fSJaap de Haan
119*61596a8fSJaap de Haan        $this->assertArrayHasKey('plugin_bpmnio_data', $form->hiddenFields);
120*61596a8fSJaap de Haan        $this->assertStringContainsString('id="plugin_bpmnio__bpmn_editor"', $form->html);
121*61596a8fSJaap de Haan        $this->assertStringContainsString('<div class="bpmn_js_canvas">', $form->html);
122*61596a8fSJaap de Haan        $this->assertSame(4, substr_count($form->html, '<div'));
123*61596a8fSJaap de Haan        $this->assertSame(4, substr_count($form->html, '</div>'));
124*61596a8fSJaap de Haan    }
125242a8e5cSJaap de Haan}
126