tweak URL of user avatar

This commit is contained in:
Pig Fang 2020-06-28 22:43:41 +08:00
parent b8dab4b57a
commit d4e482abb7
No known key found for this signature in database
GPG Key ID: A8198F548DADA9E2
11 changed files with 20 additions and 21 deletions

View File

@ -23,7 +23,7 @@ class UserMenuComposer
public function compose(View $view) public function compose(View $view)
{ {
$user = auth()->user(); $user = auth()->user();
$avatarUrl = route('avatar.user', ['uid' => $user->uid, 'size' => 36]); $avatarUrl = route('avatar.texture', ['tid' => $user->avatar, 'size' => 36]);
$avatar = $this->filter->apply('user_avatar', $avatarUrl, [$user]); $avatar = $this->filter->apply('user_avatar', $avatarUrl, [$user]);
$cli = $this->request->is('admin', 'admin/*'); $cli = $this->request->is('admin', 'admin/*');

View File

@ -25,7 +25,7 @@ class UserPanelComposer
{ {
/** @var User */ /** @var User */
$user = auth()->user(); $user = auth()->user();
$avatarUrl = route('avatar.user', ['uid' => $user->uid, 'size' => 45]); $avatarUrl = route('avatar.texture', ['tid' => $user->avatar, 'size' => 45]);
$avatar = $this->filter->apply('user_avatar', $avatarUrl, [$user]); $avatar = $this->filter->apply('user_avatar', $avatarUrl, [$user]);
$badges = []; $badges = [];

View File

@ -4,6 +4,6 @@
window.blessing = JSON.parse(blessingElement.textContent!) window.blessing = JSON.parse(blessingElement.textContent!)
window.addEventListener('load', () => { window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js?v5') navigator.serviceWorker.register('/sw.js?v6')
}) })
} }

View File

@ -38,8 +38,8 @@ registerRoute(
) )
registerRoute( registerRoute(
/\/avatar\/user\/\d+/, /\/avatar\/\d+/,
new StaleWhileRevalidate({ new CacheFirst({
cacheName: 'avatar-v2', cacheName: 'avatar-v2',
fetchOptions: { fetchOptions: {
credentials: 'omit', credentials: 'omit',

View File

@ -21,7 +21,9 @@ export default async function setAsAvatar(tid: number) {
toast.success(message) toast.success(message)
document document
.querySelectorAll<HTMLImageElement>('[alt="User Image"]') .querySelectorAll<HTMLImageElement>('[alt="User Image"]')
.forEach((el) => (el.src += `?${new Date().getTime()}`)) .forEach((el) => {
el.src = `${blessing.base_url}/avatar/${tid}`
})
} else { } else {
toast.error(message) toast.error(message)
} }

View File

@ -16,6 +16,6 @@ export default async function resetAvatar() {
document document
.querySelectorAll<HTMLImageElement>('[alt="User Image"]') .querySelectorAll<HTMLImageElement>('[alt="User Image"]')
.forEach((el) => { .forEach((el) => {
el.src += `?${new Date().getTime()}` el.src = `${blessing.base_url}/avatar/0`
}) })
} }

View File

@ -319,7 +319,10 @@ describe('set avatar', () => {
) )
expect(queryByText('success')).toBeInTheDocument() expect(queryByText('success')).toBeInTheDocument()
expect(getByRole('status')).toHaveClass('alert-success') expect(getByRole('status')).toHaveClass('alert-success')
expect(document.querySelector('[alt="User Image"]')).toHaveAttribute('src') expect(document.querySelector('[alt="User Image"]')).toHaveAttribute(
'src',
`/avatar/${fixtureSkin.tid}`,
)
}) })
it('failed', async () => { it('failed', async () => {

View File

@ -16,5 +16,5 @@ test('reset avatar', async () => {
await resetAvatar() await resetAvatar()
expect(post).toBeCalledWith('/user/profile/avatar', { tid: 0 }) expect(post).toBeCalledWith('/user/profile/avatar', { tid: 0 })
expect(toast.success).toBeCalledWith('ok') expect(toast.success).toBeCalledWith('ok')
expect(document.querySelector('img')!.src).toMatch(/\d+$/) expect(document.querySelector('img')!.src).toBe('/avatar/0')
}) })

View File

@ -40,7 +40,7 @@ class UserControllerTest extends TestCase
->assertSee($announcement, false); ->assertSee($announcement, false);
$filter->assertApplied('grid:user.index'); $filter->assertApplied('grid:user.index');
$filter->assertApplied('user_avatar', function ($url, $user) use ($uid) { $filter->assertApplied('user_avatar', function ($url, $user) use ($uid) {
$this->assertTrue(Str::contains($url, '/avatar/user/'.$uid)); $this->assertTrue(Str::contains($url, '/avatar/'.$user->avatar));
$this->assertEquals($uid, $user->uid); $this->assertEquals($uid, $user->uid);
return true; return true;

View File

@ -8,15 +8,9 @@ class UserMenuComposerTest extends TestCase
{ {
public function testAvatar() public function testAvatar()
{ {
$user = factory(User::class)->create(); $user = factory(User::class)->create(['avatar' => 5]);
$this->actingAs($user) $this->actingAs($user)->get('/')->assertSee(url('/avatar/5?size=36'));
->get('/') $this->get('/skinlib')->assertSee(url('/avatar/5?size=36'));
->assertSee(url('/avatar/user/'.$user->uid.'?size=36')); $this->get('/user')->assertSee(url('/avatar/5?size=36'));
$this->actingAs($user)
->get('/skinlib')
->assertSee(url('/avatar/user/'.$user->uid.'?size=36'));
$this->actingAs($user)
->get('/user')
->assertSee(url('/avatar/user/'.$user->uid.'?size=36'));
} }
} }

View File

@ -12,7 +12,7 @@ class UserPanelComposerTest extends TestCase
$user = factory(User::class)->create(); $user = factory(User::class)->create();
$this->actingAs($user); $this->actingAs($user);
$this->get('/user')->assertSee(url('/avatar/user/'.$user->uid.'?size=45')); $this->get('/user')->assertSee(url('/avatar/0?size=45'));
} }
public function testBadges() public function testBadges()