]> BookStack Code Mirror - bookstack/blob - tests/Uploads/AvatarTest.php
New translations validation.php (German Informal)
[bookstack] / tests / Uploads / AvatarTest.php
1 <?php namespace Tests\Uploads;
2
3 use BookStack\Auth\User;
4 use BookStack\Uploads\HttpFetcher;
5 use Tests\TestCase;
6
7 class AvatarTest extends TestCase
8 {
9     use UsesImages;
10
11
12     protected function createUserRequest($user)
13     {
14         $resp = $this->asAdmin()->post('/settings/users/create', [
15             'name' => $user->name,
16             'email' => $user->email,
17             'password' => 'testing',
18             'password-confirm' => 'testing',
19         ]);
20         return User::where('email', '=', $user->email)->first();
21     }
22
23     protected function assertImageFetchFrom(string $url)
24     {
25         $http = \Mockery::mock(HttpFetcher::class);
26         $this->app->instance(HttpFetcher::class, $http);
27
28         $http->shouldReceive('fetch')
29             ->once()->with($url)
30             ->andReturn($this->getTestImageContent());
31     }
32
33     protected function deleteUserImage(User $user)
34     {
35         $this->deleteImage($user->avatar->path);
36     }
37
38     public function test_gravatar_fetched_on_user_create()
39     {
40         config()->set([
41             'services.disable_services' => false,
42         ]);
43         $user = factory(User::class)->make();
44         $this->assertImageFetchFrom('https://www.gravatar.com/avatar/'.md5(strtolower($user->email)).'?s=500&d=identicon');
45
46         $user = $this->createUserRequest($user);
47         $this->assertDatabaseHas('images', [
48             'type' => 'user',
49             'created_by' => $user->id
50         ]);
51         $this->deleteUserImage($user);
52     }
53
54
55     public function test_custom_url_used_if_set()
56     {
57         config()->set([
58             'services.avatar_url' => 'https://example.com/${email}/${hash}/${size}',
59         ]);
60
61         $user = factory(User::class)->make();
62         $url = 'https://example.com/'. urlencode(strtolower($user->email)) .'/'. md5(strtolower($user->email)).'/500';
63         $this->assertImageFetchFrom($url);
64
65         $user = $this->createUserRequest($user);
66         $this->deleteUserImage($user);
67     }
68
69     public function test_avatar_not_fetched_if_no_custom_url_and_services_disabled()
70     {
71         config()->set([
72             'services.disable_services' => true,
73         ]);
74
75         $user = factory(User::class)->make();
76
77         $http = \Mockery::mock(HttpFetcher::class);
78         $this->app->instance(HttpFetcher::class, $http);
79         $http->shouldNotReceive('fetch');
80
81         $this->createUserRequest($user);
82     }
83
84 }