From d30ed4e72eae69ff58caf08fbf249e6ebe9037b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Jasikowski?= Date: Thu, 26 Sep 2024 15:05:40 +0200 Subject: [PATCH] Added more media caching tests to ExpensiMark --- __tests__/ExpensiMark-Markdown-test.js | 13 ++++++- __tests__/ExpensiMark-test.js | 53 ++++++++++++++++++++++++++ lib/ExpensiMark.ts | 4 +- 3 files changed, 68 insertions(+), 2 deletions(-) diff --git a/__tests__/ExpensiMark-Markdown-test.js b/__tests__/ExpensiMark-Markdown-test.js index 6daaab21..0a70d3de 100644 --- a/__tests__/ExpensiMark-Markdown-test.js +++ b/__tests__/ExpensiMark-Markdown-test.js @@ -926,7 +926,7 @@ describe('Video tag conversion to markdown', () => { expect(parser.htmlToMarkdown(testString)).toBe(resultString); }) - test('While convert video, cache some extra attributes from the video tag', () => { + test('Video with extra attributes to be cached with cacheVideoAttributes', () => { const cacheVideoAttributes = jest.fn(); const testString = ''; const resultString = '![video](https://example.com/video.mp4)'; @@ -936,6 +936,17 @@ describe('Video tag conversion to markdown', () => { expect(parser.htmlToMarkdown(testString, extras)).toBe(resultString); expect(cacheVideoAttributes).toHaveBeenCalledWith("https://example.com/video.mp4", ' data-expensify-width="100" data-expensify-height="500" data-expensify-thumbnail-url="https://image.com/img.jpg"') }) + + test('Video with extra attributes to be cached with mediaAttributeCachingFn', () => { + const mediaAttributeCachingFn = jest.fn(); + const testString = ''; + const resultString = '![video](https://example.com/video.mp4)'; + const extras = { + mediaAttributeCachingFn, + }; + expect(parser.htmlToMarkdown(testString, extras)).toBe(resultString); + expect(mediaAttributeCachingFn).toHaveBeenCalledWith("https://example.com/video.mp4", ' data-expensify-width="100" data-expensify-height="500" data-expensify-thumbnail-url="https://image.com/img.jpg"') + }) }) describe('Tag names starting with common charaters', () => { diff --git a/__tests__/ExpensiMark-test.js b/__tests__/ExpensiMark-test.js index 31983401..41c0a2c9 100644 --- a/__tests__/ExpensiMark-test.js +++ b/__tests__/ExpensiMark-test.js @@ -1,6 +1,7 @@ /* eslint-disable max-len */ import ExpensiMark from '../lib/ExpensiMark'; import * as Utils from '../lib/utils'; +import {any, string} from "prop-types"; const parser = new ExpensiMark(); @@ -48,3 +49,55 @@ test('Test extract link from Markdown link syntax', () => { const links = ['https://new.expensify.com/']; expect(parser.extractLinksInMarkdownComment(comment)).toStrictEqual(links); }); + +describe('Test ExpensiMark getAttributeCache', () => { + const expensiMark = new ExpensiMark(); + + describe('For attrCachingFn', () => { + test('If mediaAttributeCachingFn is provided, returns it', () => { + const extras = { + mediaAttributeCachingFn: jest.fn(), + } + expect(expensiMark.getAttributeCache(extras).attrCachingFn).toBe(extras.mediaAttributeCachingFn); + }) + + test('If mediaAttributeCachingFn is not provided, returns cacheVideoAttributes', () => { + const extras = { + cacheVideoAttributes: jest.fn(), + } + expect(expensiMark.getAttributeCache(extras).attrCachingFn).toBe(extras.cacheVideoAttributes); + }) + + test('If mediaAttributeCachingFn and cacheVideoAttributes are not provided, returns undefined', () => { + const extras = {} + expect(expensiMark.getAttributeCache(extras).attrCachingFn).toBe(undefined); + }) + }); + + describe('For attrCache', () => { + test('If mediaAttributeCache is provided, returns it', () => { + const extras = { + mediaAttributeCache: jest.fn(), + } + expect(expensiMark.getAttributeCache(extras).attrCache).toBe(extras.mediaAttributeCache); + }) + + test('If mediaAttributeCache is not provided, returns videoAttributeCache', () => { + const extras = { + videoAttributeCache: jest.fn(), + } + expect(expensiMark.getAttributeCache(extras).attrCache).toBe(extras.videoAttributeCache); + }) + + test('If mediaAttributeCache and videoAttributeCache are not provided, returns undefined', () => { + const extras = {} + expect(expensiMark.getAttributeCache(extras).attrCache).toBe(undefined); + }) + }); + + test('If no extras are undefined, returns undefined for both attrCachingFn and attrCache', () => { + const {attrCachingFn, attrCache} = expensiMark.getAttributeCache(undefined); + expect(attrCachingFn).toBe(undefined); + expect(attrCache).toBe(undefined); + }) +}); diff --git a/lib/ExpensiMark.ts b/lib/ExpensiMark.ts index 6ab7a7e5..74299cad 100644 --- a/lib/ExpensiMark.ts +++ b/lib/ExpensiMark.ts @@ -30,6 +30,8 @@ type Extras = { */ mediaAttributeCache?: Record; }; +export type {Extras}; + const EXTRAS_DEFAULT = {}; type ReplacementFn = (extras: Extras, ...matches: string[]) => string; @@ -83,7 +85,7 @@ export default class ExpensiMark { getAttributeCache = (extras?: Extras) => { if (!extras) { - return { attrCachingFn: undefined, attrCache: undefined }; + return {attrCachingFn: undefined, attrCache: undefined}; } return {