Return an empty Collection if there are no posts
Return an empty Collection if there are no related posts for the given post. References #3
This commit is contained in:
parent
059e237600
commit
ae0024f335
|
@ -7,6 +7,7 @@ namespace Drupal\opdavies_blog\Repository;
|
|||
use Drupal\Core\Entity\EntityStorageInterface;
|
||||
use Drupal\Core\Entity\EntityTypeManagerInterface;
|
||||
use Drupal\opdavies_blog\Entity\Node\Post;
|
||||
use Drupal\taxonomy\TermInterface;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
final class RelatedPostsRepository {
|
||||
|
@ -20,11 +21,23 @@ final class RelatedPostsRepository {
|
|||
}
|
||||
|
||||
public function getFor(Post $post): Collection {
|
||||
$tags = $post->get('field_tags')->referencedEntities();
|
||||
|
||||
if (!$tags) {
|
||||
return new Collection();
|
||||
}
|
||||
|
||||
$tagIds = (new Collection($tags))
|
||||
->map(fn(TermInterface $tag) => $tag->id())
|
||||
->values();
|
||||
|
||||
$query = $this->nodeStorage->getQuery();
|
||||
|
||||
// Ensure that the current node ID is not returned as a related post.
|
||||
$query->condition('nid', $post->id(), '!=');
|
||||
|
||||
$query->condition('field_tags', $tagIds->toArray(), 'IN');
|
||||
|
||||
/** @var array $postIds */
|
||||
$postIds = $query->execute();
|
||||
|
||||
|
|
|
@ -33,6 +33,25 @@ final class RelatedPostsTest extends PostTestBase {
|
|||
$this->assertSame('Post B', $relatedPosts->first()->label());
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_returns_an_empty_collection_if_there_are_no_related_posts(): void {
|
||||
$postA = $this->postFactory
|
||||
->setTitle('Drupal 8 post')
|
||||
->withTags(['Drupal 8'])
|
||||
->create();
|
||||
$postA->save();
|
||||
|
||||
$postB = $this->postFactory
|
||||
->setTitle('Drupal 9 post')
|
||||
->withTags(['Drupal 9'])
|
||||
->create();
|
||||
$postB->save();
|
||||
|
||||
$relatedPosts = $this->relatedPostsRepository->getFor($postA);
|
||||
|
||||
$this->assertEmpty($relatedPosts);
|
||||
}
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
|
|
Loading…
Reference in a new issue