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

interface PendingImage {
    resolve: (image: HTMLImageElement) => void;
}

const pendingImages: PendingImage[] = [];

vi.mock('@octane/renderer', () => ({
    GetRoomEngine: () => ({
        getRoomObjectPetImage: () => {
            let resolve: PendingImage['resolve'];
            const image = new Promise<HTMLImageElement>((complete) => {
                resolve = complete;
            });

            pendingImages.push({ resolve });

            return { getImage: () => image };
        }
    }),
    PetFigureData: class {},
    TextureUtils: { generateImageUrl: vi.fn() },
    Vector3d: class {}
}));

const createImage = (src: string) => ({ height: 64, src, width: 64 }) as HTMLImageElement;

beforeEach(() => {
    pendingImages.length = 0;
});

describe('LayoutPetImageView', () => {
    it('keeps the default parts stable across parent renders', async () => {
        const { rerender } = render(<LayoutPetImageView typeId={1} />);

        rerender(<LayoutPetImageView typeId={1} className="selected" />);
        await act(async () => pendingImages[0].resolve(createImage('pet.png')));

        expect(pendingImages).toHaveLength(1);
    });

    it('ignores an older image request that completes after the selected pet changes', async () => {
        const { container, rerender } = render(<LayoutPetImageView paletteId={1} typeId={1} />);

        rerender(<LayoutPetImageView paletteId={2} typeId={2} />);
        expect(pendingImages).toHaveLength(2);

        await act(async () => pendingImages[1].resolve(createImage('new-pet.png')));
        await waitFor(() => expect((container.firstElementChild as HTMLElement).style.backgroundImage).toContain('new-pet.png'));

        await act(async () => pendingImages[0].resolve(createImage('old-pet.png')));
        expect((container.firstElementChild as HTMLElement).style.backgroundImage).toContain('new-pet.png');
    });
});
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