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

describe('claimstate isEditable()', () => {
    const salesPersonId = 18;
    const claimManagerId = 72;
    it('should return false if the given state does not exist', async() => {
        const tx = await app.models.Claim.beginTransaction({});

        try {
            const options = {transaction: tx};

            const ctx = {req: {accessToken: {userId: claimManagerId}}};
            const result = await app.models.ClaimState.isEditable(ctx, 9999, options);

            expect(result).toEqual(false);

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

    it('should not be able to edit a resolved claim for a salesPerson', async() => {
        const tx = await app.models.Claim.beginTransaction({});

        try {
            const options = {transaction: tx};

            const ctx = {req: {accessToken: {userId: salesPersonId}}};
            const result = await app.models.ClaimState.isEditable(ctx, 3, options);

            expect(result).toEqual(false);

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

    it('should be able to edit a resolved claim for a claimManager', async() => {
        const tx = await app.models.Claim.beginTransaction({});

        try {
            const options = {transaction: tx};

            const ctx = {req: {accessToken: {userId: claimManagerId}}};
            const result = await app.models.ClaimState.isEditable(ctx, 3, options);

            expect(result).toEqual(true);

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

    it('should be able to edit a claim for a claimManager', async() => {
        const tx = await app.models.Claim.beginTransaction({});

        try {
            const options = {transaction: tx};

            const ctx = {req: {accessToken: {userId: claimManagerId}}};
            const result = await app.models.ClaimState.isEditable(ctx, 5, options);

            expect(result).toEqual(true);

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