5180 fichiers 38.5 Mo 0 téléchargements 218 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / api / inventory / WiredTradingUtilities.test.ts
WiredTradingUtilities.test.ts 6.5 Ko Télécharger le fichier
import { describe, expect, it } from 'vitest';
import {
    canOfferToWiredTrade,
    groupWiredTradeItems,
    isWiredTradePaymentOnly,
    IWiredTradeCandidate,
    WIRED_TRADE_ANY,
    WIRED_TRADE_ANY_COINS,
    WIRED_TRADE_ANY_FURNI,
    WIRED_TRADE_ERROR_ALREADY_MET,
    WIRED_TRADE_ERROR_EXCEEDS_REQUIREMENTS,
    WIRED_TRADE_ERROR_ICON,
    WIRED_TRADE_RULES,
    wiredTradeErrorMessage,
    wiredTradeInitialSecondsLeft,
    wiredTradePaymentLayout,
    wiredTradeTimeLeft,
} from './WiredTradingUtilities';

const chair: IWiredTradeCandidate = { className: 'chair_basic', isWallItem: false, typeId: 30, posterId: '', isPoster: false, unlockedCount: 3 };
const goldBar: IWiredTradeCandidate = { className: 'CF_50_goldbar', isWallItem: false, typeId: 90, posterId: '', isPoster: false, unlockedCount: 2 };
const poster: IWiredTradeCandidate = { className: 'poster', isWallItem: true, typeId: 4001, posterId: '23', isPoster: true, unlockedCount: 1 };

describe('wired trade: what may go on the table', () => {
    it('a furni chest deposit takes any furni but credit furni', () => {
        expect(canOfferToWiredTrade(WIRED_TRADE_ANY_FURNI, null, chair)).toBe(true);
        expect(canOfferToWiredTrade(WIRED_TRADE_ANY_FURNI, null, goldBar)).toBe(false);
    });

    it('a coin chest deposit takes credit furni only', () => {
        expect(canOfferToWiredTrade(WIRED_TRADE_ANY_COINS, null, goldBar)).toBe(true);
        expect(canOfferToWiredTrade(WIRED_TRADE_ANY_COINS, null, { ...goldBar, className: 'CFC_200_moneybag' })).toBe(true);
        expect(canOfferToWiredTrade(WIRED_TRADE_ANY_COINS, null, chair)).toBe(false);
    });

    it('a donation takes anything, but nothing that is all locked', () => {
        expect(canOfferToWiredTrade(WIRED_TRADE_ANY, null, chair)).toBe(true);
        expect(canOfferToWiredTrade(WIRED_TRADE_ANY, null, { ...chair, unlockedCount: 0 })).toBe(false);
    });

    it('a contract takes the furni types and coins its rules name', () => {
        const rules = [
            { nodes: [{ type: 1, itemType: { isWallItem: false, typeId: 30, legacyPosterId: '' } }] },
            { nodes: [{ type: 1, itemType: { isWallItem: true, typeId: 4001, legacyPosterId: '23' } }] },
        ];

        expect(canOfferToWiredTrade(WIRED_TRADE_RULES, rules, chair)).toBe(true);
        expect(canOfferToWiredTrade(WIRED_TRADE_RULES, rules, { ...chair, typeId: 31 })).toBe(false);
        expect(canOfferToWiredTrade(WIRED_TRADE_RULES, rules, poster)).toBe(true);
        expect(canOfferToWiredTrade(WIRED_TRADE_RULES, rules, { ...poster, posterId: '24' })).toBe(false);
        expect(canOfferToWiredTrade(WIRED_TRADE_RULES, rules, goldBar)).toBe(false);
        expect(canOfferToWiredTrade(WIRED_TRADE_RULES, [{ nodes: [{ type: 0 }] }], goldBar)).toBe(true);
    });
});

describe('wired trade: the panel', () => {
    it('a deposit or a rules trade without a reward is a payment', () => {
        expect(isWiredTradePaymentOnly(WIRED_TRADE_ANY_FURNI, null)).toBe(true);
        expect(isWiredTradePaymentOnly(WIRED_TRADE_ANY_COINS, null)).toBe(true);
        expect(isWiredTradePaymentOnly(WIRED_TRADE_RULES, null)).toBe(true);
        expect(isWiredTradePaymentOnly(WIRED_TRADE_RULES, { nodes: [] })).toBe(true);
        expect(isWiredTradePaymentOnly(WIRED_TRADE_RULES, { nodes: [{ type: 0 }] })).toBe(false);
    });

    it('shows AIR\'s games payment picture only for the games layout', () => {
        expect(wiredTradePaymentLayout('games')).toBe('games');
        expect(wiredTradePaymentLayout('generic')).toBe('generic');
        expect(wiredTradePaymentLayout('')).toBe('generic');
    });

    it('shows the time left under two minutes only', () => {
        expect(wiredTradeTimeLeft(300)).toBeNull();
        expect(wiredTradeTimeLeft(-1)).toBeNull();
        expect(wiredTradeTimeLeft(65)).toEqual({ minutes: '1', seconds: '05', time: '1:05' });
        expect(wiredTradeTimeLeft(0)).toEqual({ minutes: '0', seconds: '00', time: '0:00' });
    });

    it('a trade without a timeout never shows 0:00 left', () => {
        // Initiate Transaction with its timeout off sends 0: AIR's secondsLeft is -1 then and hides the text.
        expect(wiredTradeInitialSecondsLeft(0)).toBe(-1);
        expect(wiredTradeInitialSecondsLeft(-5)).toBe(-1);
        expect(wiredTradeTimeLeft(wiredTradeInitialSecondsLeft(0))).toBeNull();
        expect(wiredTradeInitialSecondsLeft(90)).toBe(90);
        expect(wiredTradeTimeLeft(wiredTradeInitialSecondsLeft(90))).toEqual({ minutes: '1', seconds: '30', time: '1:30' });
    });

    it('groups the table into a slot per kind', () => {
        const slots = groupWiredTradeItems([
            { itemId: 1, isWallItem: false, spriteId: 30, isGroupable: true },
            { itemId: 2, isWallItem: false, spriteId: 30, isGroupable: true },
            { itemId: 3, isWallItem: true, spriteId: 30, isGroupable: true },
            { itemId: 4, isWallItem: false, spriteId: 30, isGroupable: false },
            { itemId: 5, isWallItem: true, spriteId: 4001, isGroupable: true, posterId: '23' },
            { itemId: 6, isWallItem: true, spriteId: 4001, isGroupable: true, posterId: '24' },
        ]);

        expect(slots.map((slot) => slot.items.map((item) => item.itemId))).toEqual([[1, 2], [3], [4], [5], [6]]);
    });
});

describe('wired trade: refused offers (AIR onWiredTradeError)', () => {
    const texts: Record<string, string> = {
        'wired_transactions.notification.trade_error': 'Wired ruil error: %error%',
        'wired_transactions.notification.trade_error.4': 'Je hebt al voldaan aan de ruil vereisten',
        'wired_transactions.notification.trade_error.5': 'Overschrijdt de aanbiedings vereisten'
    };
    const localize = (key: string, parameters: string[] = [], replacements: string[] = []) =>
        (parameters ?? []).reduce((text, parameter, index) => text.replace(`%${ parameter }%`, replacements[index]), texts[key] ?? key);

    it('error 5 reads "exceeds the offering requirements" inside the trade error text', () => {
        expect(WIRED_TRADE_ERROR_EXCEEDS_REQUIREMENTS).toBe(5);
        expect(wiredTradeErrorMessage(5, localize)).toBe('Wired ruil error: Overschrijdt de aanbiedings vereisten');
    });

    it('error 4 reads "already met"', () => {
        expect(WIRED_TRADE_ERROR_ALREADY_MET).toBe(4);
        expect(wiredTradeErrorMessage(4, localize)).toBe('Wired ruil error: Je hebt al voldaan aan de ruil vereisten');
    });

    it('the bubble carries AIR\'s trading error icon', () => {
        expect(WIRED_TRADE_ERROR_ICON).toContain('chests_icon_trading_error');
    });
});
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