Add type parameters to vi.fn() mocks for oxlint 1.60 vitest rule
CI / backend-test (push) Successful in 1m1s
CI / frontend-test (push) Successful in 32s
CI / frontend-e2e (push) Successful in 1m39s
CI / build-and-publish (push) Has been skipped

oxlint 1.60 enables vitest/require-mock-type-parameters by default,
which requires explicit type parameters on all vi.fn() calls.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-20 22:42:51 +02:00
parent 8fb1927917
commit d13a5b2113
4 changed files with 35 additions and 33 deletions
@@ -2,11 +2,12 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
import { mount, flushPromises } from '@vue/test-utils' import { mount, flushPromises } from '@vue/test-utils'
import { createRouter, createMemoryHistory } from 'vue-router' import { createRouter, createMemoryHistory } from 'vue-router'
import EventList from '../EventList.vue' import EventList from '../EventList.vue'
import type { api } from '../../api/client'
vi.mock('../../api/client', () => ({ vi.mock('../../api/client', () => ({
api: { api: {
PATCH: vi.fn(), PATCH: vi.fn<typeof api.PATCH>(),
DELETE: vi.fn(), DELETE: vi.fn<typeof api.DELETE>(),
}, },
})) }))
@@ -31,7 +32,7 @@ const mockEvents = [
{ eventToken: 'rsvp-1', title: 'Attending Event', dateTime: '2026-03-11T20:00:00', rsvpToken: 'rsvp-token', rsvpName: 'Max' }, { eventToken: 'rsvp-1', title: 'Attending Event', dateTime: '2026-03-11T20:00:00', rsvpToken: 'rsvp-token', rsvpName: 'Max' },
] ]
const removeEventMock = vi.fn() const removeEventMock = vi.fn<(eventToken: string) => void>()
vi.mock('../../composables/useEventStorage', () => ({ vi.mock('../../composables/useEventStorage', () => ({
isValidStoredEvent: (e: unknown) => { isValidStoredEvent: (e: unknown) => {
@@ -3,19 +3,20 @@ import { mount, flushPromises } from '@vue/test-utils'
import { createRouter, createMemoryHistory } from 'vue-router' import { createRouter, createMemoryHistory } from 'vue-router'
import EventCreateView from '../EventCreateView.vue' import EventCreateView from '../EventCreateView.vue'
import { api } from '@/api/client' import { api } from '@/api/client'
import type { StoredEvent } from '@/composables/useEventStorage'
vi.mock('@/api/client', () => ({ vi.mock('@/api/client', () => ({
api: { api: {
POST: vi.fn(), POST: vi.fn<typeof api.POST>(),
}, },
})) }))
vi.mock('@/composables/useEventStorage', () => ({ vi.mock('@/composables/useEventStorage', () => ({
useEventStorage: vi.fn(() => ({ useEventStorage: vi.fn<() => unknown>(() => ({
saveCreatedEvent: vi.fn(), saveCreatedEvent: vi.fn<() => void>(),
getStoredEvents: vi.fn(() => []), getStoredEvents: vi.fn<() => unknown[]>(() => []),
getOrganizerToken: vi.fn(), getOrganizerToken: vi.fn<() => string | undefined>(),
saveRsvp: vi.fn(), saveRsvp: vi.fn<() => void>(),
getRsvp: vi.fn(), getRsvp: vi.fn<() => unknown>(),
})), })),
})) }))
@@ -154,19 +155,19 @@ describe('EventCreateView', () => {
}) })
it('submits successfully, saves to storage, and navigates to event page', async () => { it('submits successfully, saves to storage, and navigates to event page', async () => {
const mockSave = vi.fn() const mockSave = vi.fn<(...args: unknown[]) => void>()
vi.mocked(vi.importActual<typeof import('@/composables/useEventStorage')>) vi.mocked(vi.importActual<typeof import('@/composables/useEventStorage')>)
const { useEventStorage } = await import('@/composables/useEventStorage') const { useEventStorage } = await import('@/composables/useEventStorage')
vi.mocked(useEventStorage).mockReturnValue({ vi.mocked(useEventStorage).mockReturnValue({
saveCreatedEvent: mockSave, saveCreatedEvent: mockSave,
getStoredEvents: vi.fn(() => []), getStoredEvents: vi.fn<() => StoredEvent[]>(() => []),
getOrganizerToken: vi.fn(), getOrganizerToken: vi.fn<() => string | undefined>(),
saveRsvp: vi.fn(), saveRsvp: vi.fn<() => void>(),
getRsvp: vi.fn(), getRsvp: vi.fn<() => { rsvpToken: string; rsvpName: string } | undefined>(),
removeRsvp: vi.fn(), removeRsvp: vi.fn<() => void>(),
saveWatch: vi.fn(), saveWatch: vi.fn<() => void>(),
isStored: vi.fn(() => false), isStored: vi.fn<() => boolean>(() => false),
removeEvent: vi.fn(), removeEvent: vi.fn<() => void>(),
}) })
vi.mocked(api.POST).mockResolvedValueOnce({ vi.mocked(api.POST).mockResolvedValueOnce({
@@ -6,26 +6,26 @@ import { api } from '@/api/client'
vi.mock('@/api/client', () => ({ vi.mock('@/api/client', () => ({
api: { api: {
GET: vi.fn(), GET: vi.fn<typeof api.GET>(),
POST: vi.fn(), POST: vi.fn<typeof api.POST>(),
}, },
})) }))
const mockSaveRsvp = vi.fn() const mockSaveRsvp = vi.fn<(...args: unknown[]) => void>()
const mockGetRsvp = vi.fn() const mockGetRsvp = vi.fn<(eventToken: string) => { rsvpToken: string; rsvpName: string } | undefined>()
const mockGetOrganizerToken = vi.fn() const mockGetOrganizerToken = vi.fn<(eventToken: string) => string | undefined>()
const mockSaveWatch = vi.fn() const mockSaveWatch = vi.fn<(...args: unknown[]) => void>()
const mockIsStored = vi.fn() const mockIsStored = vi.fn<(eventToken: string) => boolean>()
const mockRemoveEvent = vi.fn() const mockRemoveEvent = vi.fn<(eventToken: string) => void>()
vi.mock('@/composables/useEventStorage', () => ({ vi.mock('@/composables/useEventStorage', () => ({
useEventStorage: vi.fn(() => ({ useEventStorage: vi.fn<() => unknown>(() => ({
saveCreatedEvent: vi.fn(), saveCreatedEvent: vi.fn<() => void>(),
getStoredEvents: vi.fn(() => []), getStoredEvents: vi.fn<() => unknown[]>(() => []),
getOrganizerToken: mockGetOrganizerToken, getOrganizerToken: mockGetOrganizerToken,
saveRsvp: mockSaveRsvp, saveRsvp: mockSaveRsvp,
getRsvp: mockGetRsvp, getRsvp: mockGetRsvp,
removeRsvp: vi.fn(), removeRsvp: vi.fn<() => void>(),
saveWatch: mockSaveWatch, saveWatch: mockSaveWatch,
isStored: mockIsStored, isStored: mockIsStored,
removeEvent: mockRemoveEvent, removeEvent: mockRemoveEvent,
@@ -46,7 +46,7 @@ describe('EventStubView', () => {
}) })
it('copies link to clipboard and shows confirmation', async () => { it('copies link to clipboard and shows confirmation', async () => {
const writeTextMock = vi.fn().mockResolvedValue(undefined) const writeTextMock = vi.fn<(text: string) => Promise<void>>().mockResolvedValue(undefined)
Object.assign(navigator, { Object.assign(navigator, {
clipboard: { writeText: writeTextMock }, clipboard: { writeText: writeTextMock },
}) })
@@ -63,7 +63,7 @@ describe('EventStubView', () => {
it('shows failure message when clipboard is unavailable', async () => { it('shows failure message when clipboard is unavailable', async () => {
Object.assign(navigator, { Object.assign(navigator, {
clipboard: { writeText: vi.fn().mockRejectedValue(new Error('Not allowed')) }, clipboard: { writeText: vi.fn<(text: string) => Promise<void>>().mockRejectedValue(new Error('Not allowed')) },
}) })
const wrapper = await mountWithToken('fail-test') const wrapper = await mountWithToken('fail-test')