. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Elements; use DOMDocument; use Fisharebest\Webtrees\Factories\SourceFactory; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Source; use Fisharebest\Webtrees\TestCase; use Fisharebest\Webtrees\Tree; use Psr\Http\Message\ServerRequestInterface; /** * Test harness for the class XrefSource * * @covers \Fisharebest\Webtrees\Elements\AbstractElement * @covers \Fisharebest\Webtrees\Elements\AbstractXrefElement * @covers \Fisharebest\Webtrees\Elements\XrefSource */ class XrefSourceTest extends TestCase { protected static bool $uses_database = true; public function testEdit(): void { $element = new XrefSource(''); $tree = $this->createMock(Tree::class); $factory = $this->createMock(SourceFactory::class); $factory->expects(self::once()) ->method('make') ->willReturn(null); Registry::sourceFactory($factory); $request = self::createRequest(); Registry::container()->set(ServerRequestInterface::class, $request); $html = $element->edit('some-id', 'some-name', '@X123@', $tree); $dom = new DOMDocument(); $dom->loadHTML($html); $select_nodes = $dom->getElementsByTagName('select'); self::assertEquals(1, $select_nodes->count()); $option_nodes = $select_nodes[0]->getElementsByTagName('option'); self::assertEquals(1, $option_nodes->count()); } public function testEditInlineSource(): void { $element = new XrefSource(''); $tree = $this->createMock(Tree::class); $request = self::createRequest(); Registry::container()->set(ServerRequestInterface::class, $request); $html = $element->edit('some-id', 'some-name', 'An inline source', $tree); $dom = new DOMDocument(); $dom->loadHTML($html); $textarea_nodes = $dom->getElementsByTagName('textarea'); self::assertEquals(1, $textarea_nodes->count()); } public function testEscape(): void { $element = new XrefSource(''); self::assertSame('@X123@', $element->escape('@X123@')); } public function testValueXrefLink(): void { $element = new XrefSource(''); $record = $this->createMock(Source::class); $record->expects(self::once()) ->method('fullName') ->willReturn('Full Name'); $record->expects(self::once()) ->method('url') ->willReturn('https://url'); $tree = $this->createMock(Tree::class); $factory = $this->createMock(SourceFactory::class); $factory->expects(self::once()) ->method('make') ->willReturn($record); Registry::sourceFactory($factory); self::assertSame('Full Name', $element->value('@X123@', $tree)); } public function testValueXrefLinkWithInvalidXref(): void { $element = new XrefSource(''); $tree = $this->createMock(Tree::class); self::assertSame('@invalid@', $element->value('@invalid@', $tree)); } public function testValueXrefLinkWithInlineData(): void { $element = new XrefSource(''); $tree = $this->createMock(Tree::class); self::assertSame('
invalid
', $element->value('invalid', $tree)); } public function testValueXrefLinkWithMissingRecord(): void { $element = new XrefSource(''); $tree = $this->createMock(Tree::class); $factory = $this->createMock(SourceFactory::class); $factory->expects(self::once()) ->method('make') ->willReturn(null); Registry::sourceFactory($factory); self::assertSame('@X321@', $element->value('@X321@', $tree)); } }