| 
									
										
										
										
											2017-08-28 20:55:39 +08:00
										 |  |  | <?php namespace Tests; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-08 05:42:12 +08:00
										 |  |  | use BookStack\Entities\Bookshelf; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-28 20:55:39 +08:00
										 |  |  | class HomepageTest extends TestCase | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_default_homepage_visible() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->asEditor(); | 
					
						
							|  |  |  |         $homeVisit = $this->get('/'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('My Recently Viewed'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('Recently Updated Pages'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('Recent Activity'); | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |         $homeVisit->assertSee('home-default'); | 
					
						
							| 
									
										
										
										
											2017-08-28 20:55:39 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-16 02:14:46 +08:00
										 |  |  |     public function test_custom_homepage() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-08-28 20:55:39 +08:00
										 |  |  |         $this->asEditor(); | 
					
						
							|  |  |  |         $name = 'My custom homepage'; | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |         $content = str_repeat('This is the body content of my custom homepage.', 20); | 
					
						
							| 
									
										
										
										
											2017-08-28 20:55:39 +08:00
										 |  |  |         $customPage = $this->newPage(['name' => $name, 'html' => $content]); | 
					
						
							|  |  |  |         $this->setSettings(['app-homepage' => $customPage->id]); | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |         $this->setSettings(['app-homepage-type' => 'page']); | 
					
						
							| 
									
										
										
										
											2017-08-28 20:55:39 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $homeVisit = $this->get('/'); | 
					
						
							|  |  |  |         $homeVisit->assertSee($name); | 
					
						
							|  |  |  |         $homeVisit->assertSee($content); | 
					
						
							|  |  |  |         $homeVisit->assertSee('My Recently Viewed'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('Recently Updated Pages'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('Recent Activity'); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-10-16 02:14:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function test_delete_custom_homepage() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->asEditor(); | 
					
						
							|  |  |  |         $name = 'My custom homepage'; | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |         $content = str_repeat('This is the body content of my custom homepage.', 20); | 
					
						
							| 
									
										
										
										
											2017-10-16 02:14:46 +08:00
										 |  |  |         $customPage = $this->newPage(['name' => $name, 'html' => $content]); | 
					
						
							| 
									
										
										
										
											2019-05-27 19:40:19 +08:00
										 |  |  |         $this->setSettings([ | 
					
						
							|  |  |  |             'app-homepage' => $customPage->id, | 
					
						
							|  |  |  |             'app-homepage-type' => 'page' | 
					
						
							|  |  |  |         ]); | 
					
						
							| 
									
										
										
										
											2017-10-16 02:14:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $homeVisit = $this->get('/'); | 
					
						
							|  |  |  |         $homeVisit->assertSee($name); | 
					
						
							| 
									
										
										
										
											2019-05-27 19:40:19 +08:00
										 |  |  |         $homeVisit->assertElementNotExists('#home-default'); | 
					
						
							| 
									
										
										
										
											2017-10-16 02:14:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $pageDeleteReq = $this->delete($customPage->getUrl()); | 
					
						
							|  |  |  |         $pageDeleteReq->assertStatus(302); | 
					
						
							|  |  |  |         $pageDeleteReq->assertRedirect($customPage->getUrl()); | 
					
						
							|  |  |  |         $pageDeleteReq->assertSessionHas('error'); | 
					
						
							|  |  |  |         $pageDeleteReq->assertSessionMissing('success'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $homeVisit = $this->get('/'); | 
					
						
							|  |  |  |         $homeVisit->assertSee($name); | 
					
						
							|  |  |  |         $homeVisit->assertStatus(200); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-05-12 15:37:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-27 19:40:19 +08:00
										 |  |  |     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'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-12 15:37:28 +08:00
										 |  |  |     public function test_set_book_homepage() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $editor = $this->getEditor(); | 
					
						
							|  |  |  |         setting()->putUser($editor, 'books_view_type', 'grid'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |         $this->setSettings(['app-homepage-type' => 'books']); | 
					
						
							| 
									
										
										
										
											2018-05-12 15:37:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->asEditor(); | 
					
						
							|  |  |  |         $homeVisit = $this->get('/'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('Books'); | 
					
						
							| 
									
										
										
										
											2019-04-07 01:36:17 +08:00
										 |  |  |         $homeVisit->assertSee('grid-card'); | 
					
						
							| 
									
										
										
										
											2018-05-12 15:37:28 +08:00
										 |  |  |         $homeVisit->assertSee('grid-card-content'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('grid-card-footer'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('featured-image-container'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 22:27:30 +08:00
										 |  |  |         $this->setSettings(['app-homepage-type' => false]); | 
					
						
							|  |  |  |         $this->test_default_homepage_visible(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_set_bookshelves_homepage() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $editor = $this->getEditor(); | 
					
						
							|  |  |  |         setting()->putUser($editor, 'bookshelves_view_type', 'grid'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->setSettings(['app-homepage-type' => 'bookshelves']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->asEditor(); | 
					
						
							|  |  |  |         $homeVisit = $this->get('/'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('Shelves'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('bookshelf-grid-item grid-card'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('grid-card-content'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('grid-card-footer'); | 
					
						
							|  |  |  |         $homeVisit->assertSee('featured-image-container'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->setSettings(['app-homepage-type' => false]); | 
					
						
							| 
									
										
										
										
											2018-05-12 15:37:28 +08:00
										 |  |  |         $this->test_default_homepage_visible(); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-05-08 05:42:12 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function test_shelves_list_homepage_adheres_to_book_visibility_permissions() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $editor = $this->getEditor(); | 
					
						
							|  |  |  |         setting()->putUser($editor, 'bookshelves_view_type', 'list'); | 
					
						
							|  |  |  |         $this->setSettings(['app-homepage-type' => 'bookshelves']); | 
					
						
							|  |  |  |         $this->asEditor(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $shelf = Bookshelf::query()->first(); | 
					
						
							|  |  |  |         $book = $shelf->books()->first(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Ensure initially visible
 | 
					
						
							|  |  |  |         $homeVisit = $this->get('/'); | 
					
						
							|  |  |  |         $homeVisit->assertElementContains('.content-wrap', $shelf->name); | 
					
						
							|  |  |  |         $homeVisit->assertElementContains('.content-wrap', $book->name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Ensure book no longer visible without view permission
 | 
					
						
							|  |  |  |         $editor->roles()->detach(); | 
					
						
							|  |  |  |         $this->giveUserPermissions($editor, ['bookshelf-view-all']); | 
					
						
							|  |  |  |         $homeVisit = $this->get('/'); | 
					
						
							|  |  |  |         $homeVisit->assertElementContains('.content-wrap', $shelf->name); | 
					
						
							|  |  |  |         $homeVisit->assertElementNotContains('.content-wrap', $book->name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Ensure is visible again with entity-level view permission
 | 
					
						
							|  |  |  |         $this->setEntityRestrictions($book, ['view'], [$editor->roles()->first()]); | 
					
						
							|  |  |  |         $homeVisit = $this->get('/'); | 
					
						
							|  |  |  |         $homeVisit->assertElementContains('.content-wrap', $shelf->name); | 
					
						
							|  |  |  |         $homeVisit->assertElementContains('.content-wrap', $book->name); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-08-28 20:55:39 +08:00
										 |  |  | } |