Compare commits

..

23 Commits

Author SHA1 Message Date
Renovate Bot f3608bf11e Update dependency vitest to v4.1.4
CI / frontend-test (push) Successful in 38s
CI / backend-test (push) Successful in 1m35s
CI / frontend-e2e (push) Successful in 2m18s
CI / build-and-publish (push) Has been skipped
2026-04-20 21:42:30 +00:00
nitrix bb4170b0b6 Merge pull request 'Update dependency @vitejs/plugin-vue to v6.0.6' (#54) from renovate/vitejs-plugin-vue-6.x-lockfile into master
CI / frontend-test (push) Successful in 29s
CI / backend-test (push) Successful in 1m11s
CI / frontend-e2e (push) Successful in 1m48s
CI / build-and-publish (push) Has been skipped
2026-04-20 23:39:14 +02:00
nitrix 5bd5da7561 Merge pull request 'Update dependency @types/node to v24.12.2' (#53) from renovate/node-24.x-lockfile into master
CI / build-and-publish (push) Has been cancelled
CI / frontend-e2e (push) Has been cancelled
CI / frontend-test (push) Has been cancelled
CI / backend-test (push) Has been cancelled
2026-04-20 23:39:03 +02:00
nitrix 6241a3db9c Merge pull request 'Update dependency @types/jsdom to v28.0.1' (#52) from renovate/jsdom-28.x-lockfile into master
CI / build-and-publish (push) Has been cancelled
CI / frontend-e2e (push) Has been cancelled
CI / frontend-test (push) Has been cancelled
CI / backend-test (push) Has been cancelled
2026-04-20 23:38:53 +02:00
nitrix e73b189056 Merge pull request 'Update dependency vue-router to v5.0.4' (#51) from renovate/vue-router-5.x-lockfile into master
CI / build-and-publish (push) Has been cancelled
CI / frontend-e2e (push) Has been cancelled
CI / frontend-test (push) Has been cancelled
CI / backend-test (push) Has been cancelled
2026-04-20 23:38:43 +02:00
nitrix c33a983390 Merge pull request 'Update dependency org.springframework.boot:spring-boot-starter-parent to v3.5.13' (#50) from renovate/spring-boot into master
CI / build-and-publish (push) Has been cancelled
CI / backend-test (push) Has been cancelled
CI / frontend-e2e (push) Has been cancelled
CI / frontend-test (push) Has been cancelled
2026-04-20 23:38:34 +02:00
nitrix de5e566796 Merge pull request 'Update dependency vue-tsc to v3.2.7' (#47) from renovate/vue-tsc-3.x-lockfile into master
CI / build-and-publish (push) Has been cancelled
CI / backend-test (push) Has been cancelled
CI / frontend-e2e (push) Has been cancelled
CI / frontend-test (push) Has been cancelled
2026-04-20 23:38:13 +02:00
nitrix f8a5aa2eb6 Merge pull request 'Update dependency msw to v2.13.4' (#45) from renovate/msw-2.x-lockfile into master
CI / build-and-publish (push) Has been cancelled
CI / frontend-e2e (push) Has been cancelled
CI / frontend-test (push) Has been cancelled
CI / backend-test (push) Has been cancelled
2026-04-20 23:38:03 +02:00
nitrix f518e02ce0 Merge pull request 'Update dependency @vitest/eslint-plugin to v1.6.16' (#42) from renovate/vitest-eslint-plugin-1.x-lockfile into master
CI / build-and-publish (push) Has been cancelled
CI / frontend-e2e (push) Has been cancelled
CI / frontend-test (push) Has been cancelled
CI / backend-test (push) Has been cancelled
2026-04-20 23:37:54 +02:00
Renovate Bot d732c47139 Update dependency msw to v2.13.4
CI / frontend-test (push) Successful in 37s
CI / backend-test (push) Successful in 1m27s
CI / frontend-e2e (push) Successful in 2m13s
CI / build-and-publish (push) Has been skipped
2026-04-20 21:28:32 +00:00
Renovate Bot a8a577f4a9 Update dependency vue-tsc to v3.2.7
CI / frontend-test (push) Successful in 36s
CI / backend-test (push) Successful in 1m40s
CI / frontend-e2e (push) Successful in 2m20s
CI / build-and-publish (push) Has been skipped
2026-04-20 21:28:20 +00:00
Renovate Bot aacea71be8 Update dependency vue-router to v5.0.4
CI / frontend-test (push) Successful in 42s
CI / backend-test (push) Successful in 1m30s
CI / frontend-e2e (push) Successful in 2m26s
CI / build-and-publish (push) Has been skipped
2026-04-20 21:28:12 +00:00
Renovate Bot 09fb1f1346 Update dependency org.springframework.boot:spring-boot-starter-parent to v3.5.13
CI / frontend-test (push) Successful in 37s
CI / backend-test (push) Successful in 1m25s
CI / frontend-e2e (push) Successful in 2m23s
CI / build-and-publish (push) Has been skipped
2026-04-20 21:27:42 +00:00
Renovate Bot 7fa510d8d8 Update dependency @vitest/eslint-plugin to v1.6.16
CI / frontend-test (push) Successful in 43s
CI / backend-test (push) Successful in 1m32s
CI / frontend-e2e (push) Successful in 2m17s
CI / build-and-publish (push) Has been skipped
2026-04-20 21:27:36 +00:00
Renovate Bot a26d53b00e Update dependency @vitejs/plugin-vue to v6.0.6
CI / frontend-test (push) Successful in 35s
CI / backend-test (push) Successful in 1m34s
CI / frontend-e2e (push) Successful in 2m16s
CI / build-and-publish (push) Has been skipped
2026-04-20 21:27:24 +00:00
Renovate Bot 95a74f83f7 Update dependency @types/node to v24.12.2
CI / frontend-test (push) Successful in 36s
CI / backend-test (push) Successful in 1m22s
CI / frontend-e2e (push) Successful in 2m24s
CI / build-and-publish (push) Has been skipped
2026-04-20 21:27:20 +00:00
Renovate Bot 551ec8cafa Update dependency @types/jsdom to v28.0.1
CI / frontend-test (push) Successful in 33s
CI / backend-test (push) Successful in 1m14s
CI / frontend-e2e (push) Successful in 2m3s
CI / build-and-publish (push) Has been skipped
2026-04-20 21:27:15 +00:00
nitrix c37846df62 Merge pull request 'Update dependency @msw/playwright to v0.6.7' (#48) from renovate/msw-playwright-0.x-lockfile into master
CI / backend-test (push) Successful in 1m0s
CI / frontend-test (push) Successful in 30s
CI / frontend-e2e (push) Successful in 1m50s
CI / build-and-publish (push) Has been skipped
2026-04-20 23:00:00 +02:00
Renovate Bot 0408ce1f8e Update dependency @msw/playwright to v0.6.7
CI / backend-test (push) Successful in 57s
CI / frontend-test (push) Successful in 26s
CI / frontend-e2e (push) Successful in 1m39s
CI / build-and-publish (push) Has been skipped
2026-04-20 20:52:06 +00:00
nitrix 2a8c8ddffd Merge pull request 'Update oxlint monorepo' (#46) from renovate/oxlint-monorepo into master
CI / backend-test (push) Successful in 58s
CI / frontend-test (push) Successful in 27s
CI / frontend-e2e (push) Successful in 1m38s
CI / build-and-publish (push) Has been skipped
2026-04-20 22:47:56 +02:00
nitrix d13a5b2113 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>
2026-04-20 22:42:51 +02:00
nitrix 8fb1927917 Pin oxlint to ~1.60.0 to match eslint-plugin-oxlint peer range
CI / backend-test (push) Successful in 57s
CI / frontend-test (push) Failing after 17s
CI / frontend-e2e (push) Successful in 1m42s
CI / build-and-publish (push) Has been skipped
eslint-plugin-oxlint@1.60.0 has a strict peerDependency of
oxlint@~1.60.0, and 1.61.0 is not yet released. Keep the two in
lockstep so npm install resolves cleanly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 22:31:05 +02:00
Renovate Bot 1cda01d252 Update oxlint monorepo
renovate/artifacts Artifact file update failure
CI / backend-test (push) Successful in 1m0s
CI / frontend-test (push) Failing after 7s
CI / frontend-e2e (push) Failing after 8s
CI / build-and-publish (push) Has been skipped
2026-04-20 20:02:59 +00:00
7 changed files with 528 additions and 1340 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.11</version> <version>3.5.13</version>
<relativePath/> <relativePath/>
</parent> </parent>
+490 -1304
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -38,14 +38,14 @@
"@vue/tsconfig": "^0.9.0", "@vue/tsconfig": "^0.9.0",
"eslint": "^10.0.2", "eslint": "^10.0.2",
"eslint-config-prettier": "^10.1.8", "eslint-config-prettier": "^10.1.8",
"eslint-plugin-oxlint": "~1.55.0", "eslint-plugin-oxlint": "~1.60.0",
"eslint-plugin-vue": "~10.8.0", "eslint-plugin-vue": "~10.8.0",
"jiti": "^2.6.1", "jiti": "^2.6.1",
"jsdom": "^28.1.0", "jsdom": "^28.1.0",
"msw": "^2.12.10", "msw": "^2.12.10",
"npm-run-all2": "^8.0.4", "npm-run-all2": "^8.0.4",
"openapi-typescript": "^7.13.0", "openapi-typescript": "^7.13.0",
"oxlint": "~1.55.0", "oxlint": "~1.60.0",
"prettier": "3.8.1", "prettier": "3.8.1",
"typescript": "~5.9.3", "typescript": "~5.9.3",
"vite": "^8.0.0", "vite": "^8.0.0",
@@ -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')