5180 fichiers 38.5 Mo 0 téléchargements 236 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / api / inventory / FurnitureUtilities.test.ts
FurnitureUtilities.test.ts 3.2 Ko Télécharger le fichier
/* @vitest-environment jsdom */
import { StringDataType } from '@octane/renderer';
import { describe, expect, it } from 'vitest';
import { FurniCategory } from './FurniCategory';
import { getGroupItemKey } from './FurnitureUtilities';
import { GroupItem } from './GroupItem';

class FakeStringData extends StringDataType {
    constructor(private readonly values: string[]) {
        super();
    }

    public getValue(index: number): string {
        return this.values[index] || '';
    }

    public getLegacyString(): string {
        return this.values[0] ?? '';
    }
}

const makeGroup = (overrides: {
    type: number;
    category: number;
    stuffData: unknown;
    isGroupable: boolean;
    isWallItem?: boolean;
    lastItemId?: number;
}): GroupItem =>
    ({
        type: overrides.type,
        category: overrides.category,
        stuffData: overrides.stuffData,
        isGroupable: overrides.isGroupable,
        isWallItem: overrides.isWallItem ?? false,
        getLastItem: () => (overrides.lastItemId == null ? null : { id: overrides.lastItemId })
    }) as unknown as GroupItem;

const guildData = (guildId: string) => new FakeStringData(['0', guildId, 'badge', 'ffffff', '000000']);

describe('getGroupItemKey', () => {
    it('gives guild furni of the same type but different guilds distinct keys', () => {
        const a = makeGroup({ type: 5426, category: FurniCategory.GUILD_FURNI, stuffData: guildData('11'), isGroupable: true });
        const b = makeGroup({ type: 5426, category: FurniCategory.GUILD_FURNI, stuffData: guildData('22'), isGroupable: true });

        expect(getGroupItemKey(a)).not.toBe(getGroupItemKey(b));
        expect(getGroupItemKey(a)).toContain('5426:0:0');
        expect(getGroupItemKey(b)).toContain('5426:0:0');
    });

    it('keeps the key stable for the same guild furni group', () => {
        const a = makeGroup({ type: 5426, category: FurniCategory.GUILD_FURNI, stuffData: guildData('11'), isGroupable: true });
        const b = makeGroup({ type: 5426, category: FurniCategory.GUILD_FURNI, stuffData: guildData('11'), isGroupable: true });

        expect(getGroupItemKey(a)).toBe(getGroupItemKey(b));
    });

    it('leaves ordinary groupable furni on the plain type:wall:legacy key', () => {
        const group = makeGroup({ type: 5426, category: FurniCategory.DEFAULT, stuffData: new FakeStringData(['0']), isGroupable: true });

        expect(getGroupItemKey(group)).toBe('5426:0:0');
    });

    it('appends the item id for non-groupable furni', () => {
        const group = makeGroup({ type: 5426, category: FurniCategory.DEFAULT, stuffData: new FakeStringData(['0']), isGroupable: false, lastItemId: 77 });

        expect(getGroupItemKey(group)).toBe('5426:0:0:77');
    });

    it('applies both the guild discriminator and the item id for non-groupable guild furni', () => {
        const a = makeGroup({ type: 5426, category: FurniCategory.GUILD_FURNI, stuffData: guildData('11'), isGroupable: false, lastItemId: 1 });
        const b = makeGroup({ type: 5426, category: FurniCategory.GUILD_FURNI, stuffData: guildData('11'), isGroupable: false, lastItemId: 2 });

        expect(getGroupItemKey(a)).not.toBe(getGroupItemKey(b));
        expect(getGroupItemKey(a)).toContain(',11,');
    });
});
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