*/
public function favicon(FaviconHandler $favicons)
{
- $favicons->restoreOriginalIfNotExists();
- return response()->file($favicons->getPath());
+ $exists = $favicons->restoreOriginalIfNotExists();
+ return response()->file($exists ? $favicons->getPath() : $favicons->getOriginalPath());
}
}
/**
* Restore the original favicon image.
+ * Returned boolean indicates if the copy occurred.
*/
- public function restoreOriginal(): void
+ public function restoreOriginal(): bool
{
- $original = public_path('icon.ico');
- if (!is_writeable($this->path)) {
- return;
+ $permissionItem = file_exists($this->path) ? $this->path : dirname($this->path);
+ if (!is_writeable($permissionItem)) {
+ return false;
}
- copy($original, $this->path);
+ return copy($this->getOriginalPath(), $this->path);
}
/**
* Restore the original favicon image if no favicon image is already in use.
+ * Returns a boolean to indicate if the file exists.
*/
- public function restoreOriginalIfNotExists(): void
+ public function restoreOriginalIfNotExists(): bool
{
- if (!file_exists($this->path)) {
- $this->restoreOriginal();
+ if (file_exists($this->path)) {
+ return true;
}
+
+ return $this->restoreOriginal();
}
/**
return $this->path;
}
+ /**
+ * Get the path of the original favicon copy.
+ */
+ public function getOriginalPath(): string
+ {
+ return public_path('icon.ico');
+ }
+
/**
* Convert PNG image data to ICO file format.
* Built following the file format info from Wikipedia:
$this->get('/robots.txt')->assertSee("User-agent: *\nDisallow: /");
}
+ public function test_default_favicon_file_created_upon_access()
+ {
+ $faviconPath = public_path('favicon.ico');
+ if (file_exists($faviconPath)) {
+ unlink($faviconPath);
+ }
+
+ $this->assertFileDoesNotExist($faviconPath);
+ $this->get('/favicon.ico');
+ $this->assertFileExists($faviconPath);
+ }
+
public function test_public_view_then_login_redirects_to_previous_content()
{
$this->setSettings(['app-public' => 'true']);