Skip to content

Commit 4c3d4eb

Browse files
committed
Better compatability with the old addLink()
1 parent 1f5007e commit 4c3d4eb

2 files changed

Lines changed: 39 additions & 1 deletion

File tree

‎src/FeedIo/Rule/Atom/LinkNode.php‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ protected function addElement(DomDocument $document, DOMElement $rootElement, No
4949

5050
if ($node instanceof FeedInterface && $this->hasFeedLinks($node)) {
5151
$this->addFeedLinks($document, $rootElement, $node);
52+
53+
if ($node->getLink() !== null && !$this->hasFeedLinkForHref($node, $node->getLink())) {
54+
$this->ruleSet->getDefault()->apply($document, $rootElement, $node);
55+
}
56+
5257
return;
5358
}
5459

@@ -64,6 +69,17 @@ protected function hasFeedLinks(FeedInterface $feed): bool
6469
return false;
6570
}
6671

72+
protected function hasFeedLinkForHref(FeedInterface $feed, string $href): bool
73+
{
74+
foreach ($feed->getLinks() as $feedLink) {
75+
if ($feedLink->getHref() === $href) {
76+
return true;
77+
}
78+
}
79+
80+
return false;
81+
}
82+
6783
protected function addFeedLinks(DomDocument $document, DOMElement $rootElement, FeedInterface $feed): void
6884
{
6985
foreach ($feed->getLinks() as $feedLink) {

‎tests/FeedIo/Rule/Atom/LinkNodeTest.php‎

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ public function testCreateElement()
7070

7171
$addedElement = $rootElement->firstChild;
7272

73-
$this->assertInstanceOf('\DomElement', $addedElement);
73+
$this->assertInstanceOf(\DOMElement::class, $addedElement);
74+
/** @var \DOMElement $addedElement */
7475
$this->assertEquals(self::LINK, $addedElement->getAttribute('href'));
7576
$this->assertEquals('link', $addedElement->nodeName);
7677

@@ -137,6 +138,27 @@ public function testFeedWithoutLinksCollectionFallsBackToDefault()
137138
);
138139
}
139140

141+
public function testLegacyLinkIsPreservedWhenFeedLinksArePresent()
142+
{
143+
$feed = new \FeedIo\Feed();
144+
$feed->setLink('https://example.com/');
145+
$feed->addLink('self', 'https://example.com/feed.atom');
146+
147+
$document = new \DOMDocument();
148+
$rootElement = $document->createElement('feed');
149+
$this->object->apply($document, $rootElement, $feed);
150+
151+
$document->appendChild($rootElement);
152+
153+
$this->assertXmlStringEqualsXmlString(
154+
'<feed>'
155+
. '<link rel="self" href="https://example.com/feed.atom"/>'
156+
. '<link href="https://example.com/"/>'
157+
. '</feed>',
158+
$document->saveXML()
159+
);
160+
}
161+
140162
public function testSetHomePageUrlAndFeedUrlEmitsMultipleLinks()
141163
{
142164
$feed = new \FeedIo\Feed();

0 commit comments

Comments
 (0)