5180 fichiers 38.5 Mo 0 téléchargements 221 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / api / wired / WiredWebApi.test.ts
WiredWebApi.test.ts 4.4 Ko Télécharger le fichier
import { describe, expect, it } from 'vitest';
import {
    buildWebApiBoxParams,
    canAllowBulkDelete,
    expandLocalizedText,
    isWebApiBoxClassName,
    parseWebApiBoxParams,
    resolveWebApiDocsUrl,
    resolveWebApiHotels,
    webApiBaseFromSocketUrl
} from './WiredWebApi';

describe('web api box params', () => {
    it('reads both keys and the bulk delete flag', () => {
        expect(parseWebApiBoxParams('READ\tWRITE', [1])).toEqual({ readKey: 'READ', writeKey: 'WRITE', bulkDelete: true });
    });

    it('drops bulk delete without a write key', () => {
        expect(parseWebApiBoxParams('READ\t', [1])).toEqual({ readKey: 'READ', writeKey: '', bulkDelete: false });
        expect(parseWebApiBoxParams('', [])).toEqual({ readKey: '', writeKey: '', bulkDelete: false });
        expect(parseWebApiBoxParams(null, null)).toEqual({ readKey: '', writeKey: '', bulkDelete: false });
    });

    it('writes the string and int params the server expects', () => {
        expect(buildWebApiBoxParams({ readKey: 'READ', writeKey: 'WRITE', bulkDelete: true })).toEqual({ stringParam: '*\t*', intParams: [1] });
        expect(buildWebApiBoxParams({ readKey: '', writeKey: 'WRITE', bulkDelete: false })).toEqual({ stringParam: '\t*', intParams: [0] });
    });

    it('never saves bulk delete without a write key', () => {
        expect(canAllowBulkDelete('')).toBe(false);
        expect(canAllowBulkDelete('WRITE')).toBe(true);
        expect(buildWebApiBoxParams({ readKey: 'READ', writeKey: '', bulkDelete: true }).intParams).toEqual([0]);
    });

    it('never puts a key in the save packet', () => {
        const built = buildWebApiBoxParams({ readKey: 'a'.repeat(43), writeKey: 'b'.repeat(43), bulkDelete: true });

        expect(built.stringParam).not.toContain('a'.repeat(43));
        expect(built.stringParam).not.toContain('b'.repeat(43));
        expect(parseWebApiBoxParams(built.stringParam, built.intParams).bulkDelete).toBe(true);
    });

    it('knows the box by its classname', () => {
        expect(isWebApiBoxClassName('wf_xtra_var_web_api')).toBe(true);
        expect(isWebApiBoxClassName('WF_XTRA_VAR_WEB_API')).toBe(true);
        expect(isWebApiBoxClassName('wf_xtra_var_fx_user')).toBe(false);
        expect(isWebApiBoxClassName(undefined)).toBe(false);
    });
});

describe('expandLocalizedText', () => {
    const texts: Record<string, string> = { 'wiredfurni.danger.1.change.confirm.title': 'Are you sure?' };
    const resolve = (key: string) => texts[key] ?? null;

    it('resolves a text that points at another text', () => {
        expect(expandLocalizedText('${wiredfurni.danger.1.change.confirm.title}', resolve)).toBe('Are you sure?');
    });

    it('keeps an unknown reference and turns escaped newlines into real ones', () => {
        expect(expandLocalizedText('${missing.key}', resolve)).toBe('${missing.key}');
        expect(expandLocalizedText('one\\ntwo', resolve)).toBe('one\ntwo');
    });
});

describe('web api hotel configuration', () => {
    it('derives the api base from the websocket url', () => {
        expect(webApiBaseFromSocketUrl('wss://game.example.com:2096')).toBe('https://game.example.com:2096');
        expect(webApiBaseFromSocketUrl('ws://localhost:2096/ws')).toBe('http://localhost:2096');
        expect(webApiBaseFromSocketUrl('ftp://nope')).toBeNull();
        expect(webApiBaseFromSocketUrl('')).toBeNull();
    });

    it('keeps configured http(s) hotels and falls back to the current one', () => {
        const fallback = { name: 'Here', url: 'https://here.example:2096' };

        expect(
            resolveWebApiHotels(
                [{ name: 'Main', url: 'https://main.example/' }, { name: 'Bad', url: 'javascript:alert(1)' }, { url: 'https://user:pw@x.example' }, 'nope'],
                fallback
            )
        ).toEqual([{ name: 'Main', url: 'https://main.example' }]);
        expect(resolveWebApiHotels(null, fallback)).toEqual([{ name: 'Here', url: 'https://here.example:2096' }]);
        expect(resolveWebApiHotels([], null)).toEqual([]);
    });

    it('links the docs under the api base unless configured', () => {
        expect(resolveWebApiDocsUrl('', 'https://here.example:2096')).toBe('https://here.example:2096/api/public/api-docs/');
        expect(resolveWebApiDocsUrl('https://docs.example/api/', 'https://here.example')).toBe('https://docs.example/api/');
        expect(resolveWebApiDocsUrl('', null)).toBe('');
    });
});
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