diff --git a/plugins/techdocs/src/reader/transformers/html/transformer.test.tsx b/plugins/techdocs/src/reader/transformers/html/transformer.test.tsx new file mode 100644 index 0000000000..ab64eccaa4 --- /dev/null +++ b/plugins/techdocs/src/reader/transformers/html/transformer.test.tsx @@ -0,0 +1,84 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React, { FC } from 'react'; +import { renderHook } from '@testing-library/react-hooks'; + +import { ConfigReader } from '@backstage/core-app-api'; +import { ConfigApi, configApiRef } from '@backstage/core-plugin-api'; +import { TestApiProvider } from '@backstage/test-utils'; + +import { useHtmlTransformer } from './transformer'; + +const configApiMock: ConfigApi = new ConfigReader({ + techdocs: { + sanitizer: { + allowedIframeHosts: ['docs.google.com'], + }, + }, +}); + +const wrapper: FC = ({ children }) => ( + + {children} + +); + +describe('Transformers > Html', () => { + it('should return a function that removes unsafe links from a given dom element', async () => { + const { result } = renderHook(() => useHtmlTransformer(), { wrapper }); + + const dirtyDom = document.createElement('html'); + dirtyDom.innerHTML = ` + + + + + + + `; + const clearDom = await result.current(dirtyDom); // calling html transformer + + const links = Array.from( + clearDom.querySelectorAll('head > link'), + ); + expect(links).toHaveLength(3); + expect(links[0].href).toMatch('assets/stylesheets/main.50e68009.min.css'); + expect(links[1].href).toMatch('https://fonts.googleapis.com'); + expect(links[2].href).toMatch('https://fonts.gstatic.com'); + }); + + it('should return a function that removes unsafe iframes from a given dom element', async () => { + const { result } = renderHook(() => useHtmlTransformer(), { wrapper }); + + const dirtyDom = document.createElement('html'); + dirtyDom.innerHTML = ` + + + + + + `; + const clearDom = await result.current(dirtyDom); // calling html transformer + + const iframes = Array.from( + clearDom.querySelectorAll('body > iframe'), + ); + + expect(iframes).toHaveLength(1); + expect(iframes[0].src).toMatch('docs.google.com'); + }); +});