From d094ec1f0afe57d5a564898a5919bfe76d3abe31 Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Sun, 26 Jul 2026 20:09:12 +0200 Subject: [PATCH] test(settings): distinguish between unit tests and integration tests Separated unit tests and integration tests in the test for useSettingsPage more clearly. --- .../__tests__/useSettingsPage.test.js | 67 +++++++++++-------- .../settings/composables/useSettingsPage.js | 2 +- 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/features/settings/composables/__tests__/useSettingsPage.test.js b/src/features/settings/composables/__tests__/useSettingsPage.test.js index 91401e7..6723aa3 100644 --- a/src/features/settings/composables/__tests__/useSettingsPage.test.js +++ b/src/features/settings/composables/__tests__/useSettingsPage.test.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { useSettingsPage } from '../useSettingsPage'; +import { normalizePagePath, useSettingsPage } from '../useSettingsPage.js'; import { describe, expect, test, vi } from 'vitest'; const pushRoute = vi.fn(); @@ -25,35 +25,46 @@ vi.mock('vue-router', () => ({ })); describe('useSettingsPage', () => { - describe('goToSettingsPage', () => { + describe('normalizePagePath', () => { test.for([ - { settingsPath: 'a.b.c', expectedRoute: '/settings/a/b/c' }, - { settingsPath: 'a', expectedRoute: '/settings/a' }, - { settingsPath: 'a.b', expectedRoute: '/settings/a/b' }, - { settingsPath: 'a..b', expectedRoute: '/settings/a/b' }, - { settingsPath: '.a.b', expectedRoute: '/settings/a/b' }, - { settingsPath: '..a.b', expectedRoute: '/settings/a/b' }, - { settingsPath: '.a.b.', expectedRoute: '/settings/a/b' }, - { settingsPath: '..a.b..', expectedRoute: '/settings/a/b' }, - { settingsPath: 'a.b.', expectedRoute: '/settings/a/b' }, - { settingsPath: 'a.b..', expectedRoute: '/settings/a/b' }, - { settingsPath: '.a.b..', expectedRoute: '/settings/a/b' }, - { settingsPath: '..a.b.', expectedRoute: '/settings/a/b' }, - { settingsPath: '.a..b', expectedRoute: '/settings/a/b' }, - { settingsPath: '..a..b', expectedRoute: '/settings/a/b' }, - { settingsPath: '.a..b.', expectedRoute: '/settings/a/b' }, - { settingsPath: '..a..b..', expectedRoute: '/settings/a/b' }, - { settingsPath: 'a..b.', expectedRoute: '/settings/a/b' }, - { settingsPath: 'a..b..', expectedRoute: '/settings/a/b' }, - { settingsPath: '.a..b..', expectedRoute: '/settings/a/b' }, - { settingsPath: '..a..b.', expectedRoute: '/settings/a/b' }, - { settingsPath: '..a.....b.c..d....', expectedRoute: '/settings/a/b/c/d' } - ])('goes to correct route', async ({ settingsPath, expectedRoute }) => { - const { goToSettingsPage } = useSettingsPage(); + { path: 'a.b.c', expected: ['a', 'b', 'c'] }, + { path: 'a', expected: ['a'] }, + { path: 'a.b', expected: ['a', 'b'] }, + { path: 'a..b', expected: ['a', 'b'] }, + { path: '.a.b', expected: ['a', 'b'] }, + { path: '..a.b', expected: ['a', 'b'] }, + { path: '.a.b.', expected: ['a', 'b'] }, + { path: '..a.b..', expected: ['a', 'b'] }, + { path: 'a.b.', expected: ['a', 'b'] }, + { path: 'a.b..', expected: ['a', 'b'] }, + { path: '.a.b..', expected: ['a', 'b'] }, + { path: '..a.b.', expected: ['a', 'b'] }, + { path: '.a..b', expected: ['a', 'b'] }, + { path: '..a..b', expected: ['a', 'b'] }, + { path: '.a..b.', expected: ['a', 'b'] }, + { path: '..a..b..', expected: ['a', 'b'] }, + { path: 'a..b.', expected: ['a', 'b'] }, + { path: 'a..b..', expected: ['a', 'b'] }, + { path: '.a..b..', expected: ['a', 'b'] }, + { path: '..a..b.', expected: ['a', 'b'] }, + { path: '..a.....b.c..d....', expected: ['a', 'b', 'c', 'd'] } + ])('normalizes path correctly', async ({ path, expected }) => { + expect(normalizePagePath(path)).toStrictEqual(expected); + }); + }); - await goToSettingsPage(settingsPath); - expect(pushRoute).toHaveBeenCalledWith(expectedRoute); - pushRoute.mockClear(); + describe('useSettingsPage', () => { + describe('goToSettingsPage', () => { + test('pushes correct route', async () => { + const { goToSettingsPage } = useSettingsPage(); + await goToSettingsPage('..a.b...c.d..e......'); + expect(pushRoute).toHaveBeenCalledWith({ + name: 'settings', + params: { + rest: ['a', 'b', 'c', 'd', 'e'] + } + }); + }); }); }); }); \ No newline at end of file diff --git a/src/features/settings/composables/useSettingsPage.js b/src/features/settings/composables/useSettingsPage.js index 31f387a..f97ca11 100644 --- a/src/features/settings/composables/useSettingsPage.js +++ b/src/features/settings/composables/useSettingsPage.js @@ -16,7 +16,7 @@ limitations under the License. import { useRouter } from 'vue-router'; -const normalizePagePath = function normalizePagePath (path) { +export const normalizePagePath = function normalizePagePath (path) { return path .replace(/\.+/g, '.') .replace(/^\.+|\.+$/g, '')