Skip to content

Commit 2636d2c

Browse files
authored
Merge pull request #1417 from opencloud-eu/renovate/major-vitest-monorepo
chore(deps): update vitest monorepo to v4 (major)
2 parents 46d3298 + 7dac614 commit 2636d2c

File tree

13 files changed

+209
-336
lines changed

13 files changed

+209
-336
lines changed

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"test:e2e:mobile-webkit": "BROWSER=mobile-webkit NODE_TLS_REJECT_UNAUTHORIZED=0 TS_NODE_PROJECT=./tests/e2e/cucumber/tsconfig.json cucumber-js --profile=e2e ./tests/e2e/cucumber/features/mobile-view",
2222
"test:e2e:ipad-chromium": "BROWSER=ipad-chromium NODE_TLS_REJECT_UNAUTHORIZED=0 TS_NODE_PROJECT=./tests/e2e/cucumber/tsconfig.json cucumber-js --profile=e2e ./tests/e2e/cucumber/features/mobile-view",
2323
"test:e2e:ipad-safari": "BROWSER=ipad-landscape-webkit NODE_TLS_REJECT_UNAUTHORIZED=0 TS_NODE_PROJECT=./tests/e2e/cucumber/tsconfig.json cucumber-js --profile=e2e ./tests/e2e/cucumber/features/mobile-view",
24-
"test:unit": "NODE_OPTIONS=--unhandled-rejections=throw vitest",
24+
"test:unit": "NODE_OPTIONS=--unhandled-rejections=throw vitest --config ./tests/unit/config/vitest.config.ts",
2525
"licenses:check": "license-checker-rseidelsohn --summary --relativeLicensePath --onlyAllow 'Python-2.0;Apache*;Apache License, Version 2.0;Apache-2.0;Apache 2.0;Artistic-2.0;BSD;BSD-3-Clause;CC-BY-3.0;CC-BY-4.0;CC0-1.0;ISC;MIT;MPL-2.0;Public Domain;Unicode-TOU;Unlicense;WTFPL;BlueOak-1.0.0' --excludePackages '@opencloud-eu/babel-preset;@opencloud-eu/eslint-config;@opencloud-eu/prettier-config;@opencloud-eu/tsconfig;@opencloud-eu/web-client;@opencloud-eu/web-pkg;external;web-app-files;text-editor;preview;web-app-ocm;@opencloud-eu/design-system;pdf-viewer;web-app-search;admin-settings;webfinger;web-runtime;@opencloud-eu/web-test-helpers'",
2626
"licenses:csv": "license-checker-rseidelsohn --relativeLicensePath --csv --out ./third-party-licenses/third-party-licenses.csv",
2727
"licenses:save": "license-checker-rseidelsohn --relativeLicensePath --out /dev/null --files ./third-party-licenses/third-party-licenses",
@@ -60,8 +60,8 @@
6060
"@types/lodash-es": "^4.17.12",
6161
"@types/luxon": "^3.7.1",
6262
"@vitejs/plugin-vue": "6.0.1",
63-
"@vitest/coverage-v8": "^3.0.5",
64-
"@vitest/web-worker": "^3.0.5",
63+
"@vitest/coverage-v8": "^4.0.0",
64+
"@vitest/web-worker": "^4.0.0",
6565
"@vue/compiler-dom": "3.5.22",
6666
"@vue/compiler-sfc": "3.5.22",
6767
"@vue/test-utils": "2.4.6",
@@ -92,7 +92,7 @@
9292
"vite-plugin-node-polyfills": "0.24.0",
9393
"vite-plugin-static-copy": "^3.0.0",
9494
"vite-plugin-treat-umd-as-commonjs": "0.1.4",
95-
"vitest": "^3.0.5",
95+
"vitest": "^4.0.0",
9696
"vitest-mock-extended": "3.1.0",
9797
"vue": "3.5.22",
9898
"vue-demi": "0.14.10",

packages/design-system/src/composables/useIsVisible/index.spec.ts

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,21 @@ import { mount } from '@opencloud-eu/web-test-helpers'
44

55
const mockIntersectionObserver = () => {
66
const enable = () => {
7-
const mock = {
8-
observe: vi.fn(),
9-
disconnect: vi.fn(),
10-
unobserve: vi.fn()
11-
}
12-
13-
window.IntersectionObserver = vi.fn().mockImplementation(() => mock)
7+
const observeMock = vi.fn()
8+
const unobserveMock = vi.fn()
9+
const disconnectMock = vi.fn()
10+
window.IntersectionObserver = vi.fn(
11+
class {
12+
observe = observeMock
13+
unobserve = unobserveMock
14+
disconnect = disconnectMock
15+
}
16+
) as any
1417

1518
return {
16-
mock,
19+
observeMock,
20+
unobserveMock,
21+
disconnectMock,
1722
callback: (args: unknown[], fastForward = 0) => {
1823
;(window.IntersectionObserver as any).mock.calls[0][0](args)
1924
vi.advanceTimersByTime(fastForward)
@@ -64,15 +69,15 @@ describe('useIsVisible', () => {
6469
})
6570

6671
it('observes the target', async () => {
67-
const { mock: observerMock } = enableIntersectionObserver()
72+
const { observeMock } = enableIntersectionObserver()
6873
createWrapper()
6974
await nextTick()
7075

71-
expect(observerMock.observe).toHaveBeenCalledTimes(1)
76+
expect(observeMock).toHaveBeenCalledTimes(1)
7277
})
7378

7479
it('only shows once and then gets unobserved if the the composable is in the default show mode', async () => {
75-
const { mock: observerMock, callback: observerCallback } = enableIntersectionObserver()
80+
const { unobserveMock, callback: observerCallback } = enableIntersectionObserver()
7681
const wrapper = createWrapper()
7782

7883
await nextTick()
@@ -81,11 +86,11 @@ describe('useIsVisible', () => {
8186
observerCallback([{ isIntersecting: true }])
8287
await nextTick()
8388
expect((wrapper.vm.$refs.target as any).innerHTML).toBe('true')
84-
expect(observerMock.unobserve).toHaveBeenCalledTimes(1)
89+
expect(unobserveMock).toHaveBeenCalledTimes(1)
8590
})
8691

8792
it('shows and hides multiple times if the the composable is in showHide mode', async () => {
88-
const { mock: observerMock, callback: observerCallback } = enableIntersectionObserver()
93+
const { unobserveMock, callback: observerCallback } = enableIntersectionObserver()
8994
const wrapper = createWrapper({ mode: 'showHide' })
9095

9196
await nextTick()
@@ -94,15 +99,15 @@ describe('useIsVisible', () => {
9499
observerCallback([{ isIntersecting: true }])
95100
await nextTick()
96101
expect((wrapper.vm.$refs.target as any).innerHTML).toBe('true')
97-
expect(observerMock.unobserve).toHaveBeenCalledTimes(0)
102+
expect(unobserveMock).toHaveBeenCalledTimes(0)
98103
})
99104

100105
it('disconnects the observer before component gets unmounted', () => {
101-
const { mock: observerMock } = enableIntersectionObserver()
106+
const { disconnectMock } = enableIntersectionObserver()
102107
const wrapper = createWrapper()
103108

104-
expect(observerMock.disconnect).toHaveBeenCalledTimes(0)
109+
expect(disconnectMock).toHaveBeenCalledTimes(0)
105110
wrapper.unmount()
106-
expect(observerMock.disconnect).toHaveBeenCalledTimes(1)
111+
expect(disconnectMock).toHaveBeenCalledTimes(1)
107112
})
108113
})

packages/web-app-files/tests/unit/HandleUpload.spec.ts

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,20 @@ import {
1717
OcUppyBody
1818
} from '@opencloud-eu/web-pkg'
1919
import { Language } from 'vue3-gettext'
20-
import { UploadResourceConflict } from '../../src/helpers/resource/actions'
2120
import { createTestingPinia } from '@opencloud-eu/web-test-helpers'
2221

23-
vi.mock('../../src/helpers/resource/actions')
22+
let getConflictsMock = vi.fn()
23+
let displayOverwriteDialogMock = vi.fn()
24+
25+
vi.mock('../../src/helpers/resource/actions', () => {
26+
const UploadResourceConflict = vi.fn(
27+
class {
28+
getConflicts = getConflictsMock
29+
displayOverwriteDialog = displayOverwriteDialogMock
30+
}
31+
)
32+
return { UploadResourceConflict }
33+
})
2434

2535
type UppyPlugin = UnknownPlugin<OcUppyMeta, OcUppyBody, Record<string, unknown>>
2636

@@ -247,14 +257,14 @@ describe('HandleUpload', () => {
247257
})
248258
describe('conflict handling check', () => {
249259
it('checks for conflicts if check enabled', async () => {
250-
const { instance, mocks } = getWrapper()
260+
const { instance } = getWrapper()
251261
await instance.handleUpload([mock<OcUppyFile>({ name: 'name' })])
252-
expect(mocks.resourceConflict.getConflicts).toHaveBeenCalled()
262+
expect(getConflictsMock).toHaveBeenCalled()
253263
})
254264
it('does not check for conflicts if check disabled', async () => {
255-
const { instance, mocks } = getWrapper({ conflictHandlingEnabled: false })
265+
const { instance } = getWrapper({ conflictHandlingEnabled: false })
256266
await instance.handleUpload([mock<OcUppyFile>({ name: 'name' })])
257-
expect(mocks.resourceConflict.getConflicts).not.toHaveBeenCalled()
267+
expect(getConflictsMock).not.toHaveBeenCalled()
258268
})
259269
it('does not start upload if all files were skipped in conflict handling', async () => {
260270
const { instance, mocks } = getWrapper({ conflicts: [{}], conflictHandlerResult: [] })
@@ -300,10 +310,8 @@ const getWrapper = ({
300310
conflictHandlerResult = [],
301311
spaces = []
302312
} = {}) => {
303-
const resourceConflict = mock<UploadResourceConflict>()
304-
resourceConflict.getConflicts.mockReturnValue(conflicts)
305-
resourceConflict.displayOverwriteDialog.mockResolvedValue(conflictHandlerResult)
306-
vi.mocked(UploadResourceConflict).mockImplementation(() => resourceConflict)
313+
getConflictsMock = vi.fn(() => conflicts)
314+
displayOverwriteDialogMock = vi.fn().mockResolvedValue(conflictHandlerResult)
307315

308316
const route = mock<RouteLocationNormalizedLoaded>()
309317
route.params.driveAliasAndItem = '1'
@@ -334,7 +342,7 @@ const getWrapper = ({
334342
quotaCheckEnabled
335343
}
336344

337-
const mocks = { uppy, opts, resourceConflict }
345+
const mocks = { uppy, opts }
338346
const instance = new HandleUpload(uppy, opts)
339347
return { instance, mocks }
340348
}

packages/web-app-preview/tests/unit/app.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { defaultComponentMocks, defaultPlugins, shallowMount } from '@opencloud-
44
import { FileContext, queryItemAsString } from '@opencloud-eu/web-pkg'
55
import { mock } from 'vitest-mock-extended'
66

7+
vi.mock('@panzoom/panzoom')
8+
79
vi.mock('@opencloud-eu/web-pkg', async (importOriginal) => ({
810
...(await importOriginal<any>()),
911
queryItemAsString: vi.fn(),

packages/web-pkg/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
"@opencloud-eu/web-test-helpers": "workspace:^",
7676
"@types/dompurify": "3.2.0",
7777
"@types/lodash-es": "4.17.12",
78-
"@vitest/web-worker": "^3.0.5",
78+
"@vitest/web-worker": "^4.0.0",
7979
"clean-publish": "5.2.2",
8080
"vite-plugin-dts": "4.5.4",
8181
"vite-plugin-node-polyfills": "0.24.0"

packages/web-pkg/tests/unit/components/Avatars/AvatarUpload.spec.ts

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,21 @@ import { useMessages } from '../../../../src'
1010
import { describe } from 'vitest'
1111

1212
vi.mock('cropperjs', () => {
13-
return {
14-
default: vi.fn().mockImplementation(() => ({
15-
getCroppedCanvas: vi.fn(() => ({
13+
const Cropper = vi.fn(
14+
class {
15+
getCroppedCanvas = vi.fn(() => ({
1616
toBlob: vi.fn((cb) => cb(new Blob())),
1717
toDataURL: vi.fn(() => 'data:image/png;base64,mocked')
18-
})),
19-
destroy: vi.fn(),
20-
replace: vi.fn(),
21-
reset: vi.fn(),
22-
crop: vi.fn(),
23-
move: vi.fn(),
24-
rotate: vi.fn(),
25-
scale: vi.fn(),
26-
ready: vi.fn(() => true)
27-
}))
28-
}
18+
}))
19+
destroy = vi.fn()
20+
ready = vi.fn(() => true)
21+
}
22+
)
23+
return { default: Cropper }
2924
})
3025

26+
window.URL.createObjectURL = vi.fn(() => 'foo')
27+
3128
const selectors = {
3229
removeAvatarButton: '.avatar-upload-remove-button',
3330
avatarFileInput: '.avatar-file-input',

packages/web-pkg/tests/unit/components/Spaces/SpaceImageModal.spec.ts

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,7 @@ import { useSpaceHelpers } from '../../../../src/composables/spaces/useSpaceHelp
88
vi.mock('../../../../src/composables/spaces/useSpaceHelpers', () => ({
99
useSpaceHelpers: vi.fn()
1010
}))
11-
vi.mock('cropperjs', () => {
12-
return {
13-
default: vi.fn().mockImplementation(() => ({
14-
getCroppedCanvas: vi.fn(() => ({
15-
toBlob: vi.fn((cb) => cb(new Blob())),
16-
toDataURL: vi.fn(() => 'data:image/png;base64,mocked')
17-
})),
18-
destroy: vi.fn(),
19-
replace: vi.fn(),
20-
reset: vi.fn(),
21-
crop: vi.fn(),
22-
move: vi.fn(),
23-
rotate: vi.fn(),
24-
scale: vi.fn()
25-
}))
26-
}
27-
})
11+
vi.mock('cropperjs')
2812

2913
window.URL.createObjectURL = vi.fn(() => '')
3014

packages/web-pkg/tests/unit/observer/visibility.spec.ts

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,20 @@ import { VisibilityObserver } from '../../../src/observer'
33
let callback: (
44
arg: { isIntersecting: boolean; intersectionRatio: number; target: HTMLElement }[]
55
) => void
6-
let mockIntersectionObserver: IntersectionObserver
6+
7+
const observeMock = vi.fn()
8+
const unobserveMock = vi.fn()
79
const reset = () => {
8-
mockIntersectionObserver = {
9-
observe: vi.fn(),
10-
disconnect: vi.fn(),
11-
unobserve: vi.fn()
12-
} as unknown as IntersectionObserver
13-
window.IntersectionObserver = vi.fn().mockImplementation((cb) => {
14-
callback = cb
15-
return mockIntersectionObserver
16-
})
10+
window.IntersectionObserver = vi.fn(
11+
class {
12+
constructor(cb: typeof callback) {
13+
callback = cb
14+
}
15+
observe = observeMock
16+
unobserve = unobserveMock
17+
disconnect = vi.fn()
18+
}
19+
) as any
1720
}
1821

1922
beforeEach(reset)
@@ -29,10 +32,10 @@ describe('VisibilityObserver', () => {
2932
onExit: vi.fn()
3033
},
3134
{}
32-
])('observes %p', (cb) => {
35+
])('observes %s', (cb) => {
3336
const observer = new VisibilityObserver()
3437
observer.observe(document.getElementById('target'), cb)
35-
expect(mockIntersectionObserver.observe).toHaveBeenCalledTimes(Object.keys(cb).length ? 1 : 0)
38+
expect(observeMock).toHaveBeenCalledTimes(Object.keys(cb).length ? 1 : 0)
3639
})
3740

3841
it('handles entered and exited callbacks', () => {
@@ -58,7 +61,7 @@ describe('VisibilityObserver', () => {
5861
expect(onExit).toHaveBeenCalledTimes(2)
5962
})
6063

61-
it.each(['disconnect', 'unobserve'] as const)('handles %p', (m) => {
64+
it.each(['disconnect', 'unobserve'] as const)('handles %s', (m) => {
6265
const onEnter = vi.fn()
6366
const onExit = vi.fn()
6467
const observer = new VisibilityObserver()
@@ -94,15 +97,15 @@ describe('VisibilityObserver', () => {
9497
callback([{ isIntersecting: false, intersectionRatio: -1, target }])
9598
expect(onEnter).toHaveBeenCalledTimes(0)
9699
expect(onExit).toHaveBeenCalledTimes(0)
97-
expect(mockIntersectionObserver.unobserve).toHaveBeenCalledTimes(0)
100+
expect(unobserveMock).toHaveBeenCalledTimes(0)
98101
callback([{ isIntersecting: true, intersectionRatio: 1, target }])
99102
expect(onEnter).toHaveBeenCalledTimes(1)
100103
expect(onExit).toHaveBeenCalledTimes(0)
101-
expect(mockIntersectionObserver.unobserve).toHaveBeenCalledTimes(0)
104+
expect(unobserveMock).toHaveBeenCalledTimes(0)
102105
callback([{ isIntersecting: false, intersectionRatio: -1, target }])
103106
expect(onEnter).toHaveBeenCalledTimes(1)
104107
expect(onExit).toHaveBeenCalledTimes(1)
105-
expect(mockIntersectionObserver.unobserve).toHaveBeenCalledTimes(1)
108+
expect(unobserveMock).toHaveBeenCalledTimes(1)
106109
callback([{ isIntersecting: true, intersectionRatio: 1, target }])
107110
expect(onEnter).toHaveBeenCalledTimes(1)
108111
expect(onExit).toHaveBeenCalledTimes(1)

packages/web-runtime/tests/unit/components/Account/ThemeSwitcher.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { WebThemeType, useThemeStore, ThemeConfigType } from '@opencloud-eu/web-pkg'
2-
import { mock, mockDeep } from 'vitest-mock-extended'
1+
import { useThemeStore, ThemeConfigType } from '@opencloud-eu/web-pkg'
2+
import { mockDeep } from 'vitest-mock-extended'
33
import ThemeSwitcher from '../../../../src/components/Account/ThemeSwitcher.vue'
44
import { defaultPlugins, defaultStubs, mount } from '@opencloud-eu/web-test-helpers'
55

@@ -49,10 +49,10 @@ function getWrapper({ hasOnlyOneTheme = false } = {}) {
4949
stubActions: false,
5050
themeState: {
5151
availableThemes,
52-
currentTheme: mock<WebThemeType>({
52+
currentTheme: {
5353
...themeConfig.clients.web.defaults,
5454
...themeConfig.clients.web.themes[0]
55-
})
55+
}
5656
}
5757
}
5858
})

0 commit comments

Comments
 (0)