Skip to content

Commit

Permalink
Fixed access to fragmented Urlset with Generator (#332)
Browse files Browse the repository at this point in the history
Co-authored-by: Yann Eugoné <yeugone@prestaconcept.net>
  • Loading branch information
yann-eugone and Yann Eugoné committed Jan 25, 2024
1 parent 8b89c04 commit 99f3c19
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 10 deletions.
3 changes: 2 additions & 1 deletion src/Service/Generator.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ public function fetch(string $name): ?XmlConstraint
return $this->getRoot();
}

$this->populate($name);
$baseName = preg_replace('/(.*?)(_\d+)?/', '\1', $name);
$this->populate($baseName);

if (array_key_exists($name, $this->urlsets)) {
return $this->urlsets[$name];
Expand Down
27 changes: 18 additions & 9 deletions tests/Unit/Service/GeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,28 @@ public function setUp(): void

public function testFetch(): void
{
$generator = $this->generator();

$section = $generator->fetch('void');
self::assertNull($section);
self::assertNull($this->generator()->fetch('default'));

$triggered = false;
$listener = function (SitemapPopulateEvent $event) use (&$triggered) {
self::assertEquals($event->getSection(), 'foo');
$this->eventDispatcher->addListener(SitemapPopulateEvent::class, function (SitemapPopulateEvent $event) use (&$triggered) {
self::assertEquals($event->getSection(), 'default');
$event->getUrlContainer()->addUrl(new UrlConcrete('http://acme.com/page-1'), 'default');
$event->getUrlContainer()->addUrl(new UrlConcrete('http://acme.com/page-2'), 'default');
$triggered = true;
};
$this->eventDispatcher->addListener(SitemapPopulateEvent::class, $listener);
});

$default = $this->generator()->fetch('default');
self::assertInstanceOf(Urlset::class, $default);
self::assertStringContainsString('http://acme.com/page-1', $default->toXml());
self::assertStringNotContainsString('http://acme.com/page-2', $default->toXml());

$default0 = $this->generator()->fetch('default_0');
self::assertInstanceOf(Urlset::class, $default0);
self::assertStringNotContainsString('http://acme.com/page-1', $default0->toXml());
self::assertStringContainsString('http://acme.com/page-2', $default0->toXml());

self::assertNull($this->generator()->fetch('default_1'));

$generator->fetch('foo');
self::assertTrue($triggered, 'Event listener was triggered');
}

Expand Down

0 comments on commit 99f3c19

Please sign in to comment.