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