From 83b576eb19e5093ff6e19bcf57be5061e26c9b61 Mon Sep 17 00:00:00 2001
From: Dan Brown <ssddanbrown@googlemail.com>
Date: Tue, 27 Apr 2021 21:05:01 +0100
Subject: [PATCH] Prevented "Recently Viewed" homepage list showing
 non-user-viewed items

Triggered when the user has no/limited views. Added a test to cover.
Closes #2703
---
 app/Actions/ViewService.php |  1 +
 tests/HomepageTest.php      | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/app/Actions/ViewService.php b/app/Actions/ViewService.php
index f04384536..a4e620d4b 100644
--- a/app/Actions/ViewService.php
+++ b/app/Actions/ViewService.php
@@ -96,6 +96,7 @@ class ViewService
         /** @var Entity $instance */
         foreach ($this->entityProvider->all() as $name => $instance) {
             $items = $instance::visible()->withLastView()
+                ->having('last_viewed_at', '>', 0)
                 ->orderBy('last_viewed_at', 'desc')
                 ->skip($count * ($page - 1))
                 ->take($count)
diff --git a/tests/HomepageTest.php b/tests/HomepageTest.php
index 943a3160a..a8e33465d 100644
--- a/tests/HomepageTest.php
+++ b/tests/HomepageTest.php
@@ -1,6 +1,9 @@
 <?php namespace Tests;
 
+use BookStack\Auth\Role;
+use BookStack\Auth\User;
 use BookStack\Entities\Models\Bookshelf;
+use BookStack\Entities\Models\Page;
 
 class HomepageTest extends TestCase
 {
@@ -141,4 +144,14 @@ class HomepageTest extends TestCase
         $homeVisit->assertElementContains('.content-wrap', $shelf->name);
         $homeVisit->assertElementContains('.content-wrap', $book->name);
     }
+
+    public function test_new_users_dont_have_any_recently_viewed()
+    {
+        $user = factory(User::class)->create();
+        $viewRole = Role::getRole('Viewer');
+        $user->attachRole($viewRole);
+
+        $homeVisit = $this->actingAs($user)->get('/');
+        $homeVisit->assertElementContains('#recently-viewed', 'You have not viewed any pages');
+    }
 }