diff --git a/app/utils/replace-meta-tag.js b/app/utils/replace-meta-tag.js index 755999d9ab..d735f14bb8 100644 --- a/app/utils/replace-meta-tag.js +++ b/app/utils/replace-meta-tag.js @@ -21,3 +21,24 @@ export default function replaceMetaTag(text, idAttrName, idAttrValue, newContent ` + ['property', 'og:title', pageTitle], + ['property', 'og:description', pageDescription], + ['property', 'og:image', pageImageUrl], + ['name', 'twitter:title', pageTitle], + ['name', 'twitter:description', pageDescription], + ['name', 'twitter:image', pageImageUrl], + ].reduce((text, args) => replaceMetaTag(text, ...args), text); +} diff --git a/middleware.js b/middleware.js index 034cb2aa0f..1015278189 100644 --- a/middleware.js +++ b/middleware.js @@ -16,7 +16,7 @@ */ import { next } from '@vercel/edge'; -import replaceMetaTag from './app/utils/replace-meta-tag'; +import { replaceAllMetaTags } from './app/utils/replace-meta-tag'; export const config = { // Limit the middleware to run only for user profile and concept routes @@ -130,18 +130,8 @@ export default async function middleware(request) { // Read contents of `/dist/_empty.html` const indexFileText = await fetch(indexFileURL).then((res) => res.text()); - // Overwrite content of required meta tags with user-profile specific ones, - // by sequentially calling `replaceMetaTag` against `indexFileText`, - // and passing it arguments from the following list: - const responseText = [ - ['name', 'description', pageDescription], // - ['property', 'og:title', pageTitle], - ['property', 'og:description', pageDescription], - ['property', 'og:image', pageImageUrl], - ['name', 'twitter:title', pageTitle], - ['name', 'twitter:description', pageDescription], - ['name', 'twitter:image', pageImageUrl], - ].reduce((text, args) => replaceMetaTag(text, ...args), indexFileText); + // Overwrite content of required meta tags with newer ones + const responseText = replaceAllMetaTags(indexFileText, pageTitle, pageDescription, pageImageUrl); // Serve the result as HTML return new Response(responseText, { headers: { 'Content-Type': 'text/html' } }); diff --git a/tests/unit/utils/replace-meta-tag-test.ts b/tests/unit/utils/replace-meta-tag-test.ts index 28a32bf854..d0993bdddd 100644 --- a/tests/unit/utils/replace-meta-tag-test.ts +++ b/tests/unit/utils/replace-meta-tag-test.ts @@ -1,12 +1,7 @@ -import replaceMetaTag from 'codecrafters-frontend/utils/replace-meta-tag'; +import replaceMetaTag, { replaceAllMetaTags } from 'codecrafters-frontend/utils/replace-meta-tag'; import { module, test } from 'qunit'; module('Unit | Utility | replace-meta-tag', function () { - test('it exists and is a function', function (assert) { - assert.ok(replaceMetaTag, 'it exists'); - assert.ok(replaceMetaTag instanceof Function, 'it is an instance of Function'); - }); - test('it overwrites content of specified meta tags in passed text', function (assert) { assert.strictEqual( replaceMetaTag('', 'property', 'og:image', 'new image'), @@ -55,4 +50,19 @@ module('Unit | Utility | replace-meta-tag', function () { 'content around replaced tags is preserved', ); }); + + module('replaceAllMetaTags', function () { + test('it overwrites content of all specified meta tags in passed text', function (assert) { + assert.strictEqual( + replaceAllMetaTags( + '', + 'new title', + 'new description', + 'new image url', + ), + '', + 'all old content is replaced with new content', + ); + }); + }); });