loadLinkProcessor(); io_mkdir_p(dirname(wikiFN('test:target'))); io_saveFile(wikiFN('test:target'), 'Target page'); $xml = '' . '' . '' . '' . '' . ''; $result = plugin_bpmnio_link_processor::buildPayload($xml); // XML was parsed successfully: wikilink markup is stripped from name $this->assertStringNotContainsString('[[', $result['xml']); $this->assertStringContainsString('name="Go there"', $result['xml']); // XML declaration is preserved in output $this->assertStringContainsString('assertArrayHasKey('Task_1', $result['links']); $this->assertEquals('test:target', $result['links']['Task_1']['target']); } /** * Empty input returns empty xml and no links without crashing. */ public function test_build_payload_empty_input(): void { $this->loadLinkProcessor(); $result = plugin_bpmnio_link_processor::buildPayload(''); $this->assertSame('', $result['xml']); $this->assertSame([], $result['links']); } /** * XML without wikilinks returns the processed XML and an empty link map. */ public function test_build_payload_no_links(): void { $this->loadLinkProcessor(); $xml = '' . '' . '' . '' . '' . ''; $result = plugin_bpmnio_link_processor::buildPayload($xml); $this->assertStringContainsString('Plain Task', $result['xml']); $this->assertSame([], $result['links']); } /** * Malformed XML returns the original string unchanged and no links. */ public function test_build_payload_malformed_xml(): void { $this->loadLinkProcessor(); $xml = ''; $result = plugin_bpmnio_link_processor::buildPayload($xml); $this->assertSame($xml, $result['xml']); $this->assertSame([], $result['links']); } }