. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Elements; use DOMDocument; use Fisharebest\Webtrees\Factories\MediaFactory; use Fisharebest\Webtrees\Media; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\TestCase; use Fisharebest\Webtrees\Tree; use PHPUnit\Framework\Attributes\CoversClass; use Psr\Http\Message\ServerRequestInterface; #[CoversClass(AbstractElement::class)] #[CoversClass(AbstractXrefElement::class)] #[CoversClass(XrefMedia::class)] class XrefMediaTest extends TestCase { public function testEdit(): void { $element = new XrefMedia(''); $tree = $this->createMock(Tree::class); $factory = $this->createMock(MediaFactory::class); $factory->expects(self::once()) ->method('make') ->willReturn(null); Registry::mediaFactory($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 testEscape(): void { $element = new XrefMedia(''); self::assertSame('@X123@', $element->escape('@X123@')); } public function testValueXrefLink(): void { $element = new XrefMedia(''); $record = $this->createMock(Media::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(MediaFactory::class); $factory->expects(self::once()) ->method('make') ->willReturn($record); Registry::mediaFactory($factory); self::assertSame('Full Name', $element->value('@X123@', $tree)); } public function testValueXrefLinkWithInvalidXref(): void { $element = new XrefMedia(''); $tree = $this->createMock(Tree::class); self::assertSame('invalid', $element->value('invalid', $tree)); } public function testValueXrefLinkWithMissingRecord(): void { $element = new XrefMedia(''); $tree = $this->createMock(Tree::class); $factory = $this->createMock(MediaFactory::class); $factory->expects(self::once()) ->method('make') ->willReturn(null); Registry::mediaFactory($factory); self::assertSame('@X321@', $element->value('@X321@', $tree)); } }