Skip to content

Commit e8e8064

Browse files
committed
test: update
1 parent 0d7ffcc commit e8e8064

File tree

1 file changed

+8
-39
lines changed

1 file changed

+8
-39
lines changed

test/unit/server/utils/gravatar.spec.ts

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { Buffer } from 'node:buffer'
21
import { createHash } from 'node:crypto'
32
import { beforeEach, describe, expect, it, vi } from 'vitest'
43

@@ -9,66 +8,36 @@ vi.mock('#server/utils/npm', () => ({
98
const { getGravatarFromUsername } = await import('../../../../server/utils/gravatar')
109
const { fetchUserEmail } = await import('#server/utils/npm')
1110

12-
const mockFetch = vi.fn()
13-
1411
describe('gravatar utils', () => {
1512
beforeEach(() => {
1613
vi.clearAllMocks()
17-
mockFetch.mockReset()
18-
vi.stubGlobal('fetch', mockFetch)
1914
})
2015

2116
it('returns null when username is empty', async () => {
22-
const url = await getGravatarFromUsername('')
17+
const hash = await getGravatarFromUsername('')
2318

24-
expect(url).toBeNull()
19+
expect(hash).toBeNull()
2520
expect(fetchUserEmail).not.toHaveBeenCalled()
2621
})
2722

2823
it('returns null when email is not available', async () => {
2924
vi.mocked(fetchUserEmail).mockResolvedValue(null)
3025

31-
const url = await getGravatarFromUsername('user')
26+
const hash = await getGravatarFromUsername('user')
3227

33-
expect(url).toBeNull()
28+
expect(hash).toBeNull()
3429
expect(fetchUserEmail).toHaveBeenCalledOnce()
3530
})
3631

37-
it('builds a gravatar data URL with a trimmed, lowercased email hash', async () => {
32+
it('returns md5 hash of trimmed, lowercased email', async () => {
3833
const email = ' Test@Example.com '
3934
const normalized = 'test@example.com'
40-
const hash = createHash('md5').update(normalized).digest('hex')
41-
const imageBytes = new Uint8Array([1, 2, 3])
42-
const base64 = Buffer.from(imageBytes).toString('base64')
43-
vi.mocked(fetchUserEmail).mockResolvedValue(email)
44-
mockFetch.mockResolvedValue({
45-
ok: true,
46-
headers: { get: () => 'image/png' },
47-
arrayBuffer: vi.fn().mockResolvedValue(imageBytes.buffer),
48-
})
49-
50-
const url = await getGravatarFromUsername('user')
51-
52-
expect(url).toBe(`data:image/png;base64,${base64}`)
53-
expect(mockFetch).toHaveBeenCalledWith(`https://www.gravatar.com/avatar/${hash}?s=80&d=404`)
54-
})
55-
56-
it('supports custom size', async () => {
57-
const email = 'user@example.com'
58-
const hash = createHash('md5').update(email).digest('hex')
59-
const imageBytes = new Uint8Array([4, 5, 6])
60-
const base64 = Buffer.from(imageBytes).toString('base64')
35+
const expectedHash = createHash('md5').update(normalized).digest('hex')
6136
vi.mocked(fetchUserEmail).mockResolvedValue(email)
62-
mockFetch.mockResolvedValue({
63-
ok: true,
64-
headers: { get: () => 'image/png' },
65-
arrayBuffer: vi.fn().mockResolvedValue(imageBytes.buffer),
66-
})
6737

68-
const url = await getGravatarFromUsername('user', 128)
38+
const hash = await getGravatarFromUsername('user')
6939

70-
expect(url).toBe(`data:image/png;base64,${base64}`)
71-
expect(mockFetch).toHaveBeenCalledWith(`https://www.gravatar.com/avatar/${hash}?s=128&d=404`)
40+
expect(hash).toBe(expectedHash)
7241
})
7342

7443
it('trims the username before lookup', async () => {

0 commit comments

Comments
 (0)