Home Reference Source Test

test/specs/generic/utils/Services.spec.js

describe('Services', () => {

    it('is initialized to NONE if no parameters are passed to the constructor', () => {
        const services = new Services();
        expect(services.provided).toBe(Services.NONE);
        expect(services.accepted).toBe(Services.NONE);
    });

    it('is initialized correctly to the parameters that are passed to the constructor', () => {
        const services = new Services(Services.FLAG_FULL, Services.FLAG_FULL | Services.FLAG_NANO);
        expect(services.provided).toBe(Services.FLAG_FULL);
        expect(services.accepted).toBe(Services.FLAG_FULL | Services.FLAG_NANO);
    });

    it('has working getter and setter for provided services', () => {
        const services = new Services();
        services.provided = Services.FLAG_LIGHT;
        expect(services.provided).toBe(Services.FLAG_LIGHT);
    });

    it('has working getter and setter for accepted services', () => {
        const services = new Services();
        services.accepted = Services.FLAG_FULL | Services.FLAG_LIGHT | Services.FLAG_NANO;
        expect(services.accepted).toBe(Services.FLAG_FULL | Services.FLAG_LIGHT | Services.FLAG_NANO);
    });

    it('correctly identifies Full Nodes', () => {
        expect(Services.isFullNode(Services.FLAG_FULL)).toBe(true);
        expect(Services.isFullNode(Services.FLAG_LIGHT)).toBe(false);
        expect(Services.isFullNode(Services.FLAG_NANO)).toBe(false);
    });

    it('correctly identifies Light Nodes', () => {
        expect(Services.isLightNode(Services.FLAG_LIGHT)).toBe(true);
        expect(Services.isLightNode(Services.FLAG_FULL)).toBe(false);
        expect(Services.isLightNode(Services.FLAG_NANO)).toBe(false);
    });

    it('correctly identifies Nano Nodes', () => {
        expect(Services.isNanoNode(Services.FLAG_NANO)).toBe(true);
        expect(Services.isNanoNode(Services.FLAG_FULL)).toBe(false);
        expect(Services.isNanoNode(Services.FLAG_LIGHT)).toBe(false);
    });

    it('correctly identifies provided features', () => {
        expect(Services.providesServices(Services.FLAG_FULL, Services.BLOCK_HISTORY, Services.TRANSACTION_INDEX, Services.BLOCK_PROOF)).toBe(true);
        expect(Services.providesServices(Services.FLAG_LIGHT, Services.ACCOUNTS_CHUNKS, Services.CHAIN_PROOF, Services.MEMPOOL, Services.ACCOUNTS_PROOF)).toBe(true);
        expect(Services.providesServices(Services.FLAG_NANO, Services.CHAIN_PROOF)).toBe(true);
    });
});