From e22e15bc77b2b2b734ccb6b6378f4f93eff168e6 Mon Sep 17 00:00:00 2001 From: Brandon Tripp Date: Thu, 17 Dec 2020 20:03:21 -0700 Subject: [PATCH 1/7] Changed the uniqueSlug setting to include the deutsch locale to properly handle umlauts and tests. --- backend/src/middleware/slugify/uniqueSlug.js | 1 + backend/src/middleware/slugify/uniqueSlug.spec.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/backend/src/middleware/slugify/uniqueSlug.js b/backend/src/middleware/slugify/uniqueSlug.js index ca37cd562..abab3851a 100644 --- a/backend/src/middleware/slugify/uniqueSlug.js +++ b/backend/src/middleware/slugify/uniqueSlug.js @@ -2,6 +2,7 @@ import slugify from 'slug' export default async function uniqueSlug(string, isUnique) { const slug = slugify(string || 'anonymous', { lower: true, + locale: 'de', }) if (await isUnique(slug)) return slug diff --git a/backend/src/middleware/slugify/uniqueSlug.spec.js b/backend/src/middleware/slugify/uniqueSlug.spec.js index ff14a56ef..684f70015 100644 --- a/backend/src/middleware/slugify/uniqueSlug.spec.js +++ b/backend/src/middleware/slugify/uniqueSlug.spec.js @@ -19,3 +19,17 @@ describe('uniqueSlug', () => { expect(uniqueSlug(string, isUnique)).resolves.toEqual('anonymous') }) }) + +describe('Slug is transliterated correctly', () => { + it('Converts umlaut to two letter equivalent', () => { + const umlaut = 'ä'; + const isUnique = jest.fn().mockResolvedValue(true) + expect(uniqueSlug(string, isUnique)).resolves.toEqual('ae'); + }) + + it('Removes Spanish enya ', () => { + const enya = 'ñ'; + const isUnique = jest.fn().mockResolvedValue(true) + expect(uniqueSlug(string, isUnique)).resolves.toEqual('n'); + }) +}) From a5da718bb02a02d25f7ab5fadecad7ed8e012e79 Mon Sep 17 00:00:00 2001 From: Brandon Tripp Date: Tue, 29 Dec 2020 13:33:10 -0700 Subject: [PATCH 2/7] A slight change to the test cases to make sure the encoding is working for German and Spanish. --- backend/src/middleware/slugify/uniqueSlug.spec.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/middleware/slugify/uniqueSlug.spec.js b/backend/src/middleware/slugify/uniqueSlug.spec.js index 684f70015..0ee9faf42 100644 --- a/backend/src/middleware/slugify/uniqueSlug.spec.js +++ b/backend/src/middleware/slugify/uniqueSlug.spec.js @@ -21,15 +21,15 @@ describe('uniqueSlug', () => { }) describe('Slug is transliterated correctly', () => { - it('Converts umlaut to two letter equivalent', () => { + it('Converts umlaut to a two letter equivalent', () => { const umlaut = 'ä'; const isUnique = jest.fn().mockResolvedValue(true) - expect(uniqueSlug(string, isUnique)).resolves.toEqual('ae'); + expect(uniqueSlug(umlaut, isUnique)).resolves.toEqual('ae'); }) it('Removes Spanish enya ', () => { const enya = 'ñ'; const isUnique = jest.fn().mockResolvedValue(true) - expect(uniqueSlug(string, isUnique)).resolves.toEqual('n'); + expect(uniqueSlug(enya, isUnique)).resolves.toEqual('n'); }) }) From 9d19eab35bae729ef0ef7d4d82f56523360b55d7 Mon Sep 17 00:00:00 2001 From: Brandon Tripp Date: Wed, 6 Jan 2021 13:13:14 -0700 Subject: [PATCH 3/7] linting adjustment. --- backend/src/middleware/slugify/uniqueSlug.spec.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/middleware/slugify/uniqueSlug.spec.js b/backend/src/middleware/slugify/uniqueSlug.spec.js index 0ee9faf42..842dffe2c 100644 --- a/backend/src/middleware/slugify/uniqueSlug.spec.js +++ b/backend/src/middleware/slugify/uniqueSlug.spec.js @@ -22,14 +22,14 @@ describe('uniqueSlug', () => { describe('Slug is transliterated correctly', () => { it('Converts umlaut to a two letter equivalent', () => { - const umlaut = 'ä'; + const umlaut = 'ä' const isUnique = jest.fn().mockResolvedValue(true) - expect(uniqueSlug(umlaut, isUnique)).resolves.toEqual('ae'); + expect(uniqueSlug(umlaut, isUnique)).resolves.toEqual('ae') }) it('Removes Spanish enya ', () => { - const enya = 'ñ'; + const enya = 'ñ' const isUnique = jest.fn().mockResolvedValue(true) - expect(uniqueSlug(enya, isUnique)).resolves.toEqual('n'); + expect(uniqueSlug(enya, isUnique)).resolves.toEqual('n') }) }) From 4c8eeb506eaa1b4952552e329a7c939e9515e2ac Mon Sep 17 00:00:00 2001 From: Brandon Tripp Date: Thu, 14 Jan 2021 17:04:15 -0700 Subject: [PATCH 4/7] A charmap added for slug to transliterate the german umlauts and the spanish enya. The package was updated but does not accept the setting properly. --- backend/src/middleware/slugify/uniqueSlug.js | 2 +- backend/src/middleware/slugify/uniqueSlug.spec.js | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/backend/src/middleware/slugify/uniqueSlug.js b/backend/src/middleware/slugify/uniqueSlug.js index abab3851a..e547db124 100644 --- a/backend/src/middleware/slugify/uniqueSlug.js +++ b/backend/src/middleware/slugify/uniqueSlug.js @@ -2,7 +2,7 @@ import slugify from 'slug' export default async function uniqueSlug(string, isUnique) { const slug = slugify(string || 'anonymous', { lower: true, - locale: 'de', + charmap: { Ä: 'AE', ä: 'ae', Ö: 'OE', ö: 'oe', Ü: 'UE', ü: 'ue', ñ: 'n' }, }) if (await isUnique(slug)) return slug diff --git a/backend/src/middleware/slugify/uniqueSlug.spec.js b/backend/src/middleware/slugify/uniqueSlug.spec.js index 842dffe2c..e0d9a256f 100644 --- a/backend/src/middleware/slugify/uniqueSlug.spec.js +++ b/backend/src/middleware/slugify/uniqueSlug.spec.js @@ -18,18 +18,17 @@ describe('uniqueSlug', () => { const isUnique = jest.fn().mockResolvedValue(true) expect(uniqueSlug(string, isUnique)).resolves.toEqual('anonymous') }) -}) - -describe('Slug is transliterated correctly', () => { - it('Converts umlaut to a two letter equivalent', () => { + + it('Converts umlaut to a two letter equivalent', async () => { const umlaut = 'ä' const isUnique = jest.fn().mockResolvedValue(true) - expect(uniqueSlug(umlaut, isUnique)).resolves.toEqual('ae') + await expect(uniqueSlug(umlaut, isUnique)).resolves.toEqual('ae') }) - it('Removes Spanish enya ', () => { + it('Removes Spanish enya ', async () => { const enya = 'ñ' const isUnique = jest.fn().mockResolvedValue(true) - expect(uniqueSlug(enya, isUnique)).resolves.toEqual('n') + await expect(uniqueSlug(enya, isUnique)).resolves.toEqual('n') }) }) + From da99ee596ecfa73cadf7413bb2343945ab8556a1 Mon Sep 17 00:00:00 2001 From: Brandon Tripp Date: Thu, 14 Jan 2021 17:30:17 -0700 Subject: [PATCH 5/7] Linting for code changes. --- backend/src/middleware/slugify/uniqueSlug.spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/src/middleware/slugify/uniqueSlug.spec.js b/backend/src/middleware/slugify/uniqueSlug.spec.js index e0d9a256f..38f8063f2 100644 --- a/backend/src/middleware/slugify/uniqueSlug.spec.js +++ b/backend/src/middleware/slugify/uniqueSlug.spec.js @@ -30,5 +30,4 @@ describe('uniqueSlug', () => { const isUnique = jest.fn().mockResolvedValue(true) await expect(uniqueSlug(enya, isUnique)).resolves.toEqual('n') }) -}) - +}) \ No newline at end of file From c8ac972e207361b9eb4be667d06a59520cb65368 Mon Sep 17 00:00:00 2001 From: Brandon Tripp Date: Tue, 19 Jan 2021 15:38:21 -0700 Subject: [PATCH 6/7] Linting fix. --- backend/src/middleware/slugify/uniqueSlug.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/middleware/slugify/uniqueSlug.spec.js b/backend/src/middleware/slugify/uniqueSlug.spec.js index 38f8063f2..53c21d2ef 100644 --- a/backend/src/middleware/slugify/uniqueSlug.spec.js +++ b/backend/src/middleware/slugify/uniqueSlug.spec.js @@ -18,7 +18,7 @@ describe('uniqueSlug', () => { const isUnique = jest.fn().mockResolvedValue(true) expect(uniqueSlug(string, isUnique)).resolves.toEqual('anonymous') }) - + it('Converts umlaut to a two letter equivalent', async () => { const umlaut = 'ä' const isUnique = jest.fn().mockResolvedValue(true) @@ -30,4 +30,4 @@ describe('uniqueSlug', () => { const isUnique = jest.fn().mockResolvedValue(true) await expect(uniqueSlug(enya, isUnique)).resolves.toEqual('n') }) -}) \ No newline at end of file +}) From 00e0ccd7a426595d0cfd44fcc7a82f78b21bf945 Mon Sep 17 00:00:00 2001 From: Brandon Tripp Date: Wed, 20 Jan 2021 18:49:04 -0700 Subject: [PATCH 7/7] The uniqueSlug charmap option was set to the multicharmap in order to keep the modified german umlaut settings to overide the internal settings for other diacritics. The test cases strings were extended to improve coverage of diacritic removal. --- backend/src/middleware/slugify/uniqueSlug.js | 2 +- backend/src/middleware/slugify/uniqueSlug.spec.js | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/src/middleware/slugify/uniqueSlug.js b/backend/src/middleware/slugify/uniqueSlug.js index e547db124..7cfb89c19 100644 --- a/backend/src/middleware/slugify/uniqueSlug.js +++ b/backend/src/middleware/slugify/uniqueSlug.js @@ -2,7 +2,7 @@ import slugify from 'slug' export default async function uniqueSlug(string, isUnique) { const slug = slugify(string || 'anonymous', { lower: true, - charmap: { Ä: 'AE', ä: 'ae', Ö: 'OE', ö: 'oe', Ü: 'UE', ü: 'ue', ñ: 'n' }, + multicharmap: { Ä: 'AE', ä: 'ae', Ö: 'OE', ö: 'oe', Ü: 'UE', ü: 'ue', ß: 'ss' }, }) if (await isUnique(slug)) return slug diff --git a/backend/src/middleware/slugify/uniqueSlug.spec.js b/backend/src/middleware/slugify/uniqueSlug.spec.js index 53c21d2ef..d002eae03 100644 --- a/backend/src/middleware/slugify/uniqueSlug.spec.js +++ b/backend/src/middleware/slugify/uniqueSlug.spec.js @@ -20,14 +20,14 @@ describe('uniqueSlug', () => { }) it('Converts umlaut to a two letter equivalent', async () => { - const umlaut = 'ä' + const umlaut = 'ÄÖÜäöüß' const isUnique = jest.fn().mockResolvedValue(true) - await expect(uniqueSlug(umlaut, isUnique)).resolves.toEqual('ae') + await expect(uniqueSlug(umlaut, isUnique)).resolves.toEqual('aeoeueaeoeuess') }) - it('Removes Spanish enya ', async () => { - const enya = 'ñ' + it('Removes Spanish enya and diacritics', async () => { + const diacritics = 'áàéèíìóòúùñçÁÀÉÈÍÌÓÒÚÙÑÇ' const isUnique = jest.fn().mockResolvedValue(true) - await expect(uniqueSlug(enya, isUnique)).resolves.toEqual('n') + await expect(uniqueSlug(diacritics, isUnique)).resolves.toEqual('aaeeiioouuncaaeeiioouunc') }) })