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',
+ );
+ });
+ });
});