X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/895f656897c70190b8e0a4e426a56b9df83a23b2..refs/pull/5280/head:/tests/Settings/SettingsTest.php diff --git a/tests/Settings/SettingsTest.php b/tests/Settings/SettingsTest.php index b55911523..9d45706e7 100644 --- a/tests/Settings/SettingsTest.php +++ b/tests/Settings/SettingsTest.php @@ -6,26 +6,99 @@ use Tests\TestCase; class SettingsTest extends TestCase { + public function test_admin_can_see_settings() + { + $this->asAdmin()->get('/settings/features')->assertSee('Settings'); + } + public function test_settings_endpoint_redirects_to_settings_view() { $resp = $this->asAdmin()->get('/settings'); - $resp->assertRedirect('/settings/features'); + $resp->assertStatus(302); + + // Manually check path to ensure it's generated as the full path + $location = $resp->headers->get('location'); + $this->assertEquals(url('/settings/features'), $location); } public function test_settings_category_links_work_as_expected() { $this->asAdmin(); $categories = [ - 'features' => 'Features & Security', + 'features' => 'Features & Security', 'customization' => 'Customization', - 'registration' => 'Registration', + 'registration' => 'Registration', ]; foreach ($categories as $category => $title) { $resp = $this->get("/settings/{$category}"); - $resp->assertElementContains('h1', $title); - $resp->assertElementExists("form[action$=\"/settings/{$category}\"]"); + $this->withHtml($resp)->assertElementContains('h1', $title); + $this->withHtml($resp)->assertElementExists("form[action$=\"/settings/{$category}\"]"); } } -} \ No newline at end of file + + public function test_not_found_setting_category_throws_404() + { + $resp = $this->asAdmin()->get('/settings/biscuits'); + + $resp->assertStatus(404); + $resp->assertSee('Page Not Found'); + } + + public function test_updating_and_removing_app_icon() + { + $this->asAdmin(); + $galleryFile = $this->files->uploadedImage('my-app-icon.png'); + $expectedPath = public_path('uploads/images/system/' . date('Y-m') . '/my-app-icon.png'); + + $this->assertFalse(setting()->get('app-icon')); + $this->assertFalse(setting()->get('app-icon-180')); + $this->assertFalse(setting()->get('app-icon-128')); + $this->assertFalse(setting()->get('app-icon-64')); + $this->assertFalse(setting()->get('app-icon-32')); + $this->assertEquals( + file_get_contents(public_path('icon.ico')), + file_get_contents(public_path('favicon.ico')), + ); + + $prevFileCount = count(glob(dirname($expectedPath) . DIRECTORY_SEPARATOR . '*.png')); + + $upload = $this->call('POST', '/settings/customization', [], [], ['app_icon' => $galleryFile], []); + $upload->assertRedirect('/settings/customization'); + + $this->assertTrue(file_exists($expectedPath), 'Uploaded image not found at path: ' . $expectedPath); + $this->assertStringContainsString('my-app-icon', setting()->get('app-icon')); + $this->assertStringContainsString('my-app-icon', setting()->get('app-icon-180')); + $this->assertStringContainsString('my-app-icon', setting()->get('app-icon-128')); + $this->assertStringContainsString('my-app-icon', setting()->get('app-icon-64')); + $this->assertStringContainsString('my-app-icon', setting()->get('app-icon-32')); + + $newFileCount = count(glob(dirname($expectedPath) . DIRECTORY_SEPARATOR . '*.png')); + $this->assertEquals(5, $newFileCount - $prevFileCount); + + $resp = $this->get('/'); + $this->withHtml($resp)->assertElementCount('link[sizes][href*="my-app-icon"]', 6); + + $this->assertNotEquals( + file_get_contents(public_path('icon.ico')), + file_get_contents(public_path('favicon.ico')), + ); + + $reset = $this->post('/settings/customization', ['app_icon_reset' => 'true']); + $reset->assertRedirect('/settings/customization'); + + $resetFileCount = count(glob(dirname($expectedPath) . DIRECTORY_SEPARATOR . '*.png')); + $this->assertEquals($prevFileCount, $resetFileCount); + $this->assertFalse(setting()->get('app-icon')); + $this->assertFalse(setting()->get('app-icon-180')); + $this->assertFalse(setting()->get('app-icon-128')); + $this->assertFalse(setting()->get('app-icon-64')); + $this->assertFalse(setting()->get('app-icon-32')); + + $this->assertEquals( + file_get_contents(public_path('icon.ico')), + file_get_contents(public_path('favicon.ico')), + ); + } +}