From 3ac01df4883d3ec99e268d77d7d2c69311b8032d Mon Sep 17 00:00:00 2001 From: Alexander Lichter Date: Wed, 20 Mar 2019 17:46:09 +0100 Subject: [PATCH] fix(vue-app): decode router base to support unicode characters (#5297) --- packages/vue-app/template/router.js | 2 +- test/fixtures/unicode-base/nuxt.config.js | 5 ++++ test/fixtures/unicode-base/pages/index.vue | 3 ++ .../unicode-base/unicode-base.test.js | 3 ++ test/unit/unicode-base.test.js | 30 +++++++++++++++++++ 5 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/unicode-base/nuxt.config.js create mode 100644 test/fixtures/unicode-base/pages/index.vue create mode 100644 test/fixtures/unicode-base/unicode-base.test.js create mode 100644 test/unit/unicode-base.test.js diff --git a/packages/vue-app/template/router.js b/packages/vue-app/template/router.js index 520f563807..5c7dc98a35 100644 --- a/packages/vue-app/template/router.js +++ b/packages/vue-app/template/router.js @@ -154,7 +154,7 @@ const scrollBehavior = function (to, from, savedPosition) { export function createRouter() { return new Router({ mode: '<%= router.mode %>', - base: '<%= router.base %>', + base: decodeURI('<%= router.base %>'), linkActiveClass: '<%= router.linkActiveClass %>', linkExactActiveClass: '<%= router.linkExactActiveClass %>', scrollBehavior, diff --git a/test/fixtures/unicode-base/nuxt.config.js b/test/fixtures/unicode-base/nuxt.config.js new file mode 100644 index 0000000000..00456d9717 --- /dev/null +++ b/test/fixtures/unicode-base/nuxt.config.js @@ -0,0 +1,5 @@ +export default { + router: { + base: '/%C3%B6/' + } +} diff --git a/test/fixtures/unicode-base/pages/index.vue b/test/fixtures/unicode-base/pages/index.vue new file mode 100644 index 0000000000..27507953b2 --- /dev/null +++ b/test/fixtures/unicode-base/pages/index.vue @@ -0,0 +1,3 @@ + diff --git a/test/fixtures/unicode-base/unicode-base.test.js b/test/fixtures/unicode-base/unicode-base.test.js new file mode 100644 index 0000000000..68eaa70c38 --- /dev/null +++ b/test/fixtures/unicode-base/unicode-base.test.js @@ -0,0 +1,3 @@ +import { buildFixture } from '../../utils/build' + +buildFixture('unicode-base') diff --git a/test/unit/unicode-base.test.js b/test/unit/unicode-base.test.js new file mode 100644 index 0000000000..c6da4a7d8f --- /dev/null +++ b/test/unit/unicode-base.test.js @@ -0,0 +1,30 @@ +import { getPort, loadFixture, Nuxt } from '../utils' + +let port +const url = route => 'http://localhost:' + port + route + +let nuxt = null + +describe('unicode-base', () => { + beforeAll(async () => { + const config = await loadFixture('unicode-base') + nuxt = new Nuxt(config) + await nuxt.ready() + + port = await getPort() + await nuxt.server.listen(port, 'localhost') + }) + + test('/ö/ (router base)', async () => { + const window = await nuxt.server.renderAndGetWindow(url('/ö/')) + + const html = window.document.body.innerHTML + // important to have the actual page transition classes here -> page works, no hydration error + expect(html).toContain('

Unicode base works!

') + }) + + // Close server and ask nuxt to stop listening to file changes + afterAll(async () => { + await nuxt.close() + }) +})