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

describe('state isEditable()', () => {
    it('should return false if the state is not editable by a specific role', async() => {
        const salesPersonRole = 18;
        const onDeliveryState = 13;
        let ctx = {req: {accessToken: {userId: salesPersonRole}}};
        let result = await app.models.State.isEditable(ctx, onDeliveryState);

        expect(result).toBe(false);
    });

    it('should return true if the state is editable by a specific role', async() => {
        const salesPersonRole = 18;
        const asignedState = 20;
        let ctx = {req: {accessToken: {userId: salesPersonRole}}};
        let result = await app.models.State.isEditable(ctx, asignedState);

        expect(result).toBe(true);
    });

    it('should return true again if the state is editable by a specific role', async() => {
        const employeeRole = 1;
        const fixingState = 1;
        let ctx = {req: {accessToken: {userId: employeeRole}}};
        let result = await app.models.State.isEditable(ctx, fixingState);

        expect(result).toBe(true);
    });

    it('should return false if the state is not editable for the given role', async() => {
        const employeeRole = 1;
        const asignedState = 13;
        let ctx = {req: {accessToken: {userId: employeeRole}}};
        let result = await app.models.State.isEditable(ctx, asignedState);

        expect(result).toBe(false);
    });

    it('should return true if the state is editable for the given role', async() => {
        const productionRole = 49;
        const onDeliveryState = 13;
        let ctx = {req: {accessToken: {userId: productionRole}}};
        let result = await app.models.State.isEditable(ctx, onDeliveryState);

        expect(result).toBe(true);
    });

    it('should return true if the ticket is editable, the role is salesPerson and the ticket state is printed', async() => {
        const salesPersonRole = 18;
        const printedState = 4;
        const okState = 3;
        const ctx = {req: {accessToken: {userId: salesPersonRole}}};

        let canEditCurrent = await app.models.State.isEditable(ctx, printedState);
        let canAsignNew = await app.models.State.isEditable(ctx, okState);
        let result = canEditCurrent && canAsignNew;

        expect(result).toBe(true);
    });
});