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

describe('docuware download()', () => {
    const userId = 9;
    const ticketId = 1;
    const ctx = {
        req: {

            accessToken: {userId: userId},
            headers: {origin: 'http://localhost:5000'},
        }
    };

    const docuwareModel = models.Docuware;
    const fileCabinetName = 'deliveryNote';

    beforeAll(() => {
        spyOn(docuwareModel, 'getFileCabinet').and.returnValue((new Promise(resolve => resolve(Math.random()))));
        spyOn(docuwareModel, 'getDialog').and.returnValue((new Promise(resolve => resolve(Math.random()))));
    });

    it('should return error if file not exist', async() => {
        spyOn(docuwareModel, 'checkFile').and.returnValue(false);
        spyOn(axios, 'get').and.returnValue(new stream.PassThrough({objectMode: true}));

        let error;
        try {
            await models.Docuware.download(ctx, ticketId, fileCabinetName);
        } catch (e) {
            error = e.message;
        }

        expect(error).toEqual('The DOCUWARE PDF document does not exists');
    });

    it('should return the downloaded file if exist file ', async() => {
        spyOn(docuwareModel, 'checkFile').and.returnValue({});
        spyOn(axios, 'get').and.returnValue(new stream.PassThrough({objectMode: true}));

        const result = await models.Docuware.download(ctx, ticketId, fileCabinetName);

        expect(result[1]).toEqual('application/pdf');
        expect(result[2]).toEqual(`filename="${ticketId}.pdf"`);
    });
});