5180 fichiers 38.5 Mo 0 téléchargements 202 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / api / utils / InternalHtmlLinks.test.tsx
InternalHtmlLinks.test.tsx 1.7 Ko Télécharger le fichier
import { fireEvent, render } from '@testing-library/react';
import { beforeEach, describe, expect, it, vi } from 'vitest';

const links = vi.hoisted(() => [] as string[]);

vi.mock('@octane/renderer', async (importOriginal) => ({
    ...(await importOriginal<typeof import('@octane/renderer')>()),
    CreateLinkEvent: (link: string) => links.push(link)
}));

import { handleInternalLinkClick, SanitizeHtmlWithInternalLinks } from './InternalHtmlLinks';

describe('internal html links (AIR link_target internal)', () => {
    beforeEach(() => {
        links.length = 0;
    });

    it('keeps event: links and opens them in the client', () => {
        const html = SanitizeHtmlWithInternalLinks('1. <a href="event:habbopages/wired_actie.html" style="color:#000;font-weight:bold;" >Wired Acties</a>.');
        const { getByText } = render(<div onClick={handleInternalLinkClick} dangerouslySetInnerHTML={{ __html: html }} />);

        fireEvent.click(getByText('Wired Acties'));

        expect(links).toEqual(['habbopages/wired_actie.html']);
    });

    it('still removes scripts and handlers', () => {
        const html = SanitizeHtmlWithInternalLinks('<a href="javascript:alert(1)" onclick="x()">x</a><script>bad()</script>');

        expect(html).not.toContain('javascript:');
        expect(html).not.toContain('onclick');
        expect(html).not.toContain('<script');
    });

    it('leaves ordinary links alone', () => {
        const html = SanitizeHtmlWithInternalLinks('<a href="https://hotel.example/">site</a>');
        const { getByText } = render(<div onClick={handleInternalLinkClick} dangerouslySetInnerHTML={{ __html: html }} />);

        fireEvent.click(getByText('site'));

        expect(links).toEqual([]);
    });
});
15Sujets
1Dépôts
20Membres
2En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser