diff --git a/app/Entities/Repos/EntityRepo.php b/app/Entities/Repos/EntityRepo.php index a0934530f..4edd61723 100644 --- a/app/Entities/Repos/EntityRepo.php +++ b/app/Entities/Repos/EntityRepo.php @@ -852,10 +852,13 @@ class EntityRepo */ public function destroyPage(Page $page) { - // Check if set as custom homepage + // Check if set as custom homepage & remove setting if not used or throw error if active $customHome = setting('app-homepage', '0:'); if (intval($page->id) === intval(explode(':', $customHome)[0])) { - throw new NotifyException(trans('errors.page_custom_home_deletion'), $page->getUrl()); + if (setting('app-homepage-type') === 'page') { + throw new NotifyException(trans('errors.page_custom_home_deletion'), $page->getUrl()); + } + setting()->remove('app-homepage'); } $this->destroyEntityCommonRelations($page); diff --git a/tests/HomepageTest.php b/tests/HomepageTest.php index 286d4cf60..ada1f5aaf 100644 --- a/tests/HomepageTest.php +++ b/tests/HomepageTest.php @@ -38,10 +38,14 @@ class HomepageTest extends TestCase $name = 'My custom homepage'; $content = str_repeat('This is the body content of my custom homepage.', 20); $customPage = $this->newPage(['name' => $name, 'html' => $content]); - $this->setSettings(['app-homepage' => $customPage->id]); + $this->setSettings([ + 'app-homepage' => $customPage->id, + 'app-homepage-type' => 'page' + ]); $homeVisit = $this->get('/'); $homeVisit->assertSee($name); + $homeVisit->assertElementNotExists('#home-default'); $pageDeleteReq = $this->delete($customPage->getUrl()); $pageDeleteReq->assertStatus(302); @@ -54,6 +58,23 @@ class HomepageTest extends TestCase $homeVisit->assertStatus(200); } + public function test_custom_homepage_can_be_deleted_once_custom_homepage_no_longer_used() + { + $this->asEditor(); + $name = 'My custom homepage'; + $content = str_repeat('This is the body content of my custom homepage.', 20); + $customPage = $this->newPage(['name' => $name, 'html' => $content]); + $this->setSettings([ + 'app-homepage' => $customPage->id, + 'app-homepage-type' => 'default' + ]); + + $pageDeleteReq = $this->delete($customPage->getUrl()); + $pageDeleteReq->assertStatus(302); + $pageDeleteReq->assertSessionHas('success'); + $pageDeleteReq->assertSessionMissing('error'); + } + public function test_set_book_homepage() { $editor = $this->getEditor();