From 5559a9bc06b8f84900a8cdfe2b2653f31ba4b516 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 19 Jan 2021 03:18:51 +0100 Subject: [PATCH] detect languages removes html tags before detection --- backend/src/middleware/languages/languages.js | 10 ++- .../middleware/languages/languages.spec.js | 61 +++++++++++++------ 2 files changed, 51 insertions(+), 20 deletions(-) diff --git a/backend/src/middleware/languages/languages.js b/backend/src/middleware/languages/languages.js index b82470885..7b9678bbc 100644 --- a/backend/src/middleware/languages/languages.js +++ b/backend/src/middleware/languages/languages.js @@ -1,9 +1,17 @@ import LanguageDetect from 'languagedetect' +import sanitizeHtml from 'sanitize-html' + +const removeHtmlTags = (input) => { + return sanitizeHtml(input, { + allowedTags: [], + allowedAttributes: {}, + }) +} const setPostLanguage = (text) => { const lngDetector = new LanguageDetect() lngDetector.setLanguageType('iso2') - const result = lngDetector.detect(text, 2) + const result = lngDetector.detect(removeHtmlTags(text), 2) return result[0][0] } diff --git a/backend/src/middleware/languages/languages.spec.js b/backend/src/middleware/languages/languages.spec.js index 432cb0508..a2f264d40 100644 --- a/backend/src/middleware/languages/languages.spec.js +++ b/backend/src/middleware/languages/languages.spec.js @@ -4,7 +4,6 @@ import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' - let mutate let authenticatedUser let variables @@ -25,12 +24,10 @@ beforeAll(async () => { mutate = createTestClient(server).mutate }) - afterAll(async () => { - //await cleanDatabase() + // await cleanDatabase() }) - const createPostMutation = gql` mutation($title: String!, $content: String!, $categoryIds: [ID]) { CreatePost(title: $title, content: $content, categoryIds: $categoryIds) { @@ -55,16 +52,18 @@ describe('languagesMiddleware', () => { icon: 'university', }) }) - + it('detects German', async () => { variables = { ...variables, content: 'Jeder sollte vor seiner eigenen Tür kehren.', } - await expect(mutate({ - mutation: createPostMutation, - variables, - })).resolves.toMatchObject({ + await expect( + mutate({ + mutation: createPostMutation, + variables, + }), + ).resolves.toMatchObject({ data: { CreatePost: { language: 'de', @@ -72,16 +71,18 @@ describe('languagesMiddleware', () => { }, }) }) - + it('detects English', async () => { variables = { ...variables, content: 'A journey of a thousand miles begins with a single step.', } - await expect(mutate({ - mutation: createPostMutation, - variables, - })).resolves.toMatchObject({ + await expect( + mutate({ + mutation: createPostMutation, + variables, + }), + ).resolves.toMatchObject({ data: { CreatePost: { language: 'en', @@ -95,15 +96,37 @@ describe('languagesMiddleware', () => { ...variables, content: 'A caballo regalado, no le mires el diente.', } - await expect(mutate({ - mutation: createPostMutation, - variables, - })).resolves.toMatchObject({ + await expect( + mutate({ + mutation: createPostMutation, + variables, + }), + ).resolves.toMatchObject({ data: { CreatePost: { language: 'es', }, }, }) - }) + }) + + it('detects German in between lots of html tags', async () => { + variables = { + ...variables, + content: + 'Jeder sollte vor seiner eigenen
Tür
kehren.', + } + await expect( + mutate({ + mutation: createPostMutation, + variables, + }), + ).resolves.toMatchObject({ + data: { + CreatePost: { + language: 'de', + }, + }, + }) + }) })