5180 fichiers 38.5 Mo 0 téléchargements 227 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / css / room / AvatarActionMenuClassic.test.ts
AvatarActionMenuClassic.test.ts 5.5 Ko Télécharger le fichier
/* @vitest-environment jsdom */
import { readFileSync } from 'node:fs';
import { resolve } from 'node:path';
import { afterEach, describe, expect, it } from 'vitest';

const roomWidgetsCss = readFileSync(resolve(process.cwd(), 'src/css/room/RoomWidgets.css'), 'utf8');
const avatarMenuCss = roomWidgetsCss.slice(roomWidgetsCss.indexOf('.octane-avatar-action-menu {'), roomWidgetsCss.indexOf('.octane-context-menu.name-only'));

afterEach(() => {
    document.body.replaceChildren();
    document.head.replaceChildren();
});

describe('AIR own_avatar_menu bubble', () => {
    it('matches the 115px shell, header, 26px rows, and 18px footer from the XML', () => {
        const stylesheet = document.createElement('style');
        const menu = document.createElement('div');
        const header = document.createElement('div');
        const buttons = document.createElement('div');
        const item = document.createElement('div');
        const footer = document.createElement('div');

        stylesheet.textContent = avatarMenuCss;
        menu.className = 'octane-context-menu octane-avatar-action-menu octane-avatar-action-menu--own';
        header.className = 'octane-context-menu-header';
        buttons.className = 'air-avatar-menu-buttons';
        item.className = 'octane-context-menu-item';
        footer.className = 'octane-context-menu-footer';
        buttons.append(item);
        menu.append(header, buttons, footer);
        document.head.append(stylesheet);
        document.body.append(menu);

        const menuStyle = getComputedStyle(menu);
        const headerStyle = getComputedStyle(header);
        const buttonsStyle = getComputedStyle(buttons);
        const itemStyle = getComputedStyle(item);
        const footerStyle = getComputedStyle(footer);

        expect(menuStyle.width).toBe('115px');
        expect(menuStyle.minWidth).toBe('115px');
        expect(menuStyle.maxWidth).toBe('115px');
        expect(menuStyle.padding).toBe('11px 0px 10px');
        expect(menuStyle.borderWidth).toBe('0px');
        expect(menuStyle.textShadow).toBe('rgba(0, 0, 0, 0)');
        expect(headerStyle.width).toBe('107px');
        expect(headerStyle.height).toBe('16px');
        expect(headerStyle.marginLeft).toBe('4px');
        expect(headerStyle.marginBottom).toBe('5px');
        expect(headerStyle.fontWeight).toBe('700');
        expect(buttonsStyle.width).toBe('105px');
        expect(buttonsStyle.marginLeft).toBe('5px');
        expect(buttonsStyle.gap).toBe('1px');
        expect(itemStyle.width).toBe('103px');
        expect(itemStyle.height).toBe('26px');
        expect(itemStyle.marginLeft).toBe('1px');
        expect(itemStyle.backgroundColor).toBe('rgba(0, 0, 0, 0)');
        expect(itemStyle.borderWidth).toBe('0px');
        expect(footerStyle.width).toBe('100px');
        expect(footerStyle.height).toBe('18px');
        expect(footerStyle.marginLeft).toBe('8px');
    });

    it('matches the 45 by 35 minimized bubble and 38 by 30 expand region', () => {
        const stylesheet = document.createElement('style');
        const menu = document.createElement('div');
        const footer = document.createElement('div');

        stylesheet.textContent = avatarMenuCss;
        menu.className = 'octane-context-menu octane-avatar-action-menu octane-avatar-action-menu--own menu-hidden';
        footer.className = 'octane-context-menu-footer';
        menu.append(footer);
        document.head.append(stylesheet);
        document.body.append(menu);

        const menuStyle = getComputedStyle(menu);
        const footerStyle = getComputedStyle(footer);

        expect(menuStyle.width).toBe('45px');
        expect(menuStyle.minWidth).toBe('45px');
        expect(menuStyle.height).toBe('35px');
        expect(menuStyle.minHeight).toBe('35px');
        expect(menuStyle.padding).toBe('0px');
        expect(footerStyle.width).toBe('38px');
        expect(footerStyle.height).toBe('30px');
        expect(footerStyle.marginTop).toBe('4px');
        expect(footerStyle.marginLeft).toBe('4px');
    });

});

describe('AIR decorate and use-product bubbles', () => {
    const mount = (variant: string) => {
        const stylesheet = document.createElement('style');
        const menu = document.createElement('div');
        const buttons = document.createElement('div');
        const item = document.createElement('div');

        stylesheet.textContent = avatarMenuCss;
        menu.className = `octane-context-menu octane-avatar-action-menu octane-avatar-action-menu--own octane-avatar-action-menu--${variant}`;
        buttons.className = 'air-avatar-menu-buttons';
        item.className = 'octane-context-menu-item';
        buttons.append(item);
        menu.append(buttons);
        document.head.append(stylesheet);
        document.body.append(menu);

        return { menu: getComputedStyle(menu), buttons: getComputedStyle(buttons), item: getComputedStyle(item) };
    };

    it('draws own_avatar_decorating with one 101px button in a 103px list', () => {
        const { menu, buttons, item } = mount('decorate');

        expect(menu.width).toBe('115px');
        expect(menu.padding).toBe('11px 0px 12px');
        expect(buttons.width).toBe('103px');
        expect(buttons.marginLeft).toBe('6px');
        expect(item.width).toBe('101px');
        expect(item.marginLeft).toBe('0px');
    });

    it('draws use_product_menu with 102px buttons in a 104px list', () => {
        const { buttons, item } = mount('use-product');

        expect(buttons.width).toBe('104px');
        expect(item.width).toBe('102px');
    });
});
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