generated from Seekra/repository-template
fix(settings): omit leading/trailing and consecuting dots in noralizePagePath
This commit is contained in:
@@ -26,11 +26,34 @@ vi.mock('vue-router', () => ({
|
|||||||
|
|
||||||
describe('useSettingsPage', () => {
|
describe('useSettingsPage', () => {
|
||||||
describe('goToSettingsPage', () => {
|
describe('goToSettingsPage', () => {
|
||||||
test('goes to correct route', async () => {
|
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();
|
const { goToSettingsPage } = useSettingsPage();
|
||||||
|
|
||||||
await goToSettingsPage('a.b.c');
|
await goToSettingsPage(settingsPath);
|
||||||
expect(pushRoute).toHaveBeenCalledWith('/settings/a/b/c');
|
expect(pushRoute).toHaveBeenCalledWith(expectedRoute);
|
||||||
|
pushRoute.mockClear();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -17,7 +17,10 @@ limitations under the License.
|
|||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
|
|
||||||
const normalizePagePath = function normalizePagePath (path) {
|
const normalizePagePath = function normalizePagePath (path) {
|
||||||
return path.replaceAll('.', '/');
|
return path
|
||||||
|
.replace(/\.+/g, '.')
|
||||||
|
.replace(/^\.+|\.+$/g, '')
|
||||||
|
.replaceAll('.', '/');
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useSettingsPage = function useSettingsPage () {
|
export const useSettingsPage = function useSettingsPage () {
|
||||||
|
|||||||
Reference in New Issue
Block a user