]> BookStack Code Mirror - bookstack/blobdiff - tests/Uploads/AvatarTest.php
Fixed OIDC Logout
[bookstack] / tests / Uploads / AvatarTest.php
index d10b5cfc6cb79f50556df9892a94edc97c5c0d82..363c1fa95420b858d42980f27e05d8e38e10a07a 100644 (file)
@@ -2,25 +2,24 @@
 
 namespace Tests\Uploads;
 
-use BookStack\Auth\User;
 use BookStack\Exceptions\HttpFetchException;
 use BookStack\Uploads\HttpFetcher;
+use BookStack\Uploads\UserAvatars;
+use BookStack\Users\Models\User;
 use Tests\TestCase;
 
 class AvatarTest extends TestCase
 {
-    use UsesImages;
-
-    protected function createUserRequest($user)
+    protected function createUserRequest($user): User
     {
         $this->asAdmin()->post('/settings/users/create', [
             'name'             => $user->name,
             'email'            => $user->email,
-            'password'         => 'testing',
-            'password-confirm' => 'testing',
+            'password'         => 'testing101',
+            'password-confirm' => 'testing101',
         ]);
 
-        return User::where('email', '=', $user->email)->first();
+        return User::query()->where('email', '=', $user->email)->first();
     }
 
     protected function assertImageFetchFrom(string $url)
@@ -29,12 +28,12 @@ class AvatarTest extends TestCase
 
         $http->shouldReceive('fetch')
             ->once()->with($url)
-            ->andReturn($this->getTestImageContent());
+            ->andReturn($this->files->pngImageData());
     }
 
     protected function deleteUserImage(User $user)
     {
-        $this->deleteImage($user->avatar->path);
+        $this->files->deleteAtRelativePath($user->avatar->path);
     }
 
     public function test_gravatar_fetched_on_user_create()
@@ -82,6 +81,21 @@ class AvatarTest extends TestCase
         $this->createUserRequest($user);
     }
 
+    public function test_avatar_not_fetched_if_avatar_url_option_set_to_false()
+    {
+        config()->set([
+            'services.disable_services' => false,
+            'services.avatar_url'       => false,
+        ]);
+
+        $user = User::factory()->make();
+
+        $http = $this->mock(HttpFetcher::class);
+        $http->shouldNotReceive('fetch');
+
+        $this->createUserRequest($user);
+    }
+
     public function test_no_failure_but_error_logged_on_failed_avatar_fetch()
     {
         config()->set([
@@ -97,4 +111,28 @@ class AvatarTest extends TestCase
         $this->createUserRequest($user);
         $this->assertTrue($logger->hasError('Failed to save user avatar image'));
     }
+
+    public function test_exception_message_on_failed_fetch()
+    {
+        // set wrong url
+        config()->set([
+            'services.disable_services' => false,
+            'services.avatar_url'       => 'http_malformed_url/${email}/${hash}/${size}',
+        ]);
+
+        $user = User::factory()->make();
+        $avatar = app()->make(UserAvatars::class);
+        $url = 'http_malformed_url/' . urlencode(strtolower($user->email)) . '/' . md5(strtolower($user->email)) . '/500';
+        $logger = $this->withTestLogger();
+
+        $avatar->fetchAndAssignToUser($user);
+
+        $this->assertTrue($logger->hasError('Failed to save user avatar image'));
+        $exception = $logger->getRecords()[0]['context']['exception'];
+        $this->assertEquals(new HttpFetchException(
+            'Cannot get image from ' . $url,
+            6,
+            (new HttpFetchException('Could not resolve host: http_malformed_url', 6))
+        ), $exception);
+    }
 }