const models = require('vn-loopback/server/server').models;

describe('ticket editableStates()', () => {
    const filter = {where: {name: {like: '%%'}}};
    it('should return the expected state for the given role', async() => {
        const tx = await models.State.beginTransaction({});

        try {
            const options = {transaction: tx};

            const productionRole = 49;
            const ctx = {req: {accessToken: {userId: productionRole}}};

            const editableStates = await models.State.editableStates(ctx, filter, options);

            const deliveredState = editableStates.some(state => state.code == 'DELIVERED');

            expect(deliveredState).toBeTruthy();

            await tx.rollback();
        } catch (e) {
            await tx.rollback();
            throw e;
        }
    });

    it(`should return again the expected state by a specific role`, async() => {
        const tx = await models.State.beginTransaction({});

        try {
            const options = {transaction: tx};

            const employeeRole = 1;
            const ctx = {req: {accessToken: {userId: employeeRole}}};

            const editableStates = await models.State.editableStates(ctx, filter, options);

            const pickerDesignedState = editableStates.some(state => state.code == 'PICKER_DESIGNED');

            expect(pickerDesignedState).toBeTruthy();

            await tx.rollback();
        } catch (e) {
            await tx.rollback();
            throw e;
        }
    });

    it(`should return the expected state matching with the name`, async() => {
        const tx = await models.State.beginTransaction({});

        try {
            const options = {transaction: tx};

            const employeeRole = 1;
            const ctx = {req: {accessToken: {userId: employeeRole}}};
            const filter = {where: {name: {like: '%Previa OK%'}}};

            const [editableStates] = await models.State.editableStates(ctx, filter, options);

            expect(editableStates.name).toBe('Previa OK');

            await tx.rollback();
        } catch (e) {
            await tx.rollback();
            throw e;
        }
    });
});