import {BX24Dev} from '../index';
import axios from 'axios';
import MockAdapter from "axios-mock-adapter";
import batch from './mocks/batch'
import leadList from './mocks/leadList';
import batchAppOption from './mocks/batchAppOption';
import auth from './mocks/auth';
import authExample from './constants/authExample'


let mock:MockAdapter;
let bx24:BX24Dev;
beforeAll(async () => {
    mock = new MockAdapter(axios);
    mock.onPost('https://oauth.bitrix.info/oauth/token/').reply(201, auth);
    mock.onPost('https://example.bitrix24.ru/rest/batch.json').reply(200, batchAppOption);
    await new Promise(resolve=>{
        bx24=new BX24Dev(authExample, ()=>{
            resolve(true);
        });
    });
    mock.reset();
});

afterEach(() => {
    mock.reset();
});

test('Test callMethod Promise', async () => {
    mock.onPost('https://example.bitrix24.ru/rest/batch.json').reply(200, batch);
    const promise= bx24.callBatch({
        getDeals:['crm.deal.list', {}],
        getLeads:['crm.lead.list', {}],
        getByID:['crm.deal.get', {id:123123}]
    });
    // .data()).toEqual();
    const result=await promise;

    for (const request in result){
        switch (request) {
            case 'getDeals':
                expect(result[request].data()).toEqual(batch.result.result.getDeals);
                expect(result[request].total()).toEqual(batch.result.result_total.getDeals);
                expect(result[request].error()).toBeUndefined();
                break;
            case 'getLeads':
                expect(result[request].data()).toEqual(leadList.result);
                expect(result[request].total()).toEqual(leadList.total);
                expect(result[request].error()).toBeUndefined();
                break;
            case 'getByID':{
                expect(result[request].error()).toEqual({
                    status: 200,
                    ex: { error: '', error_description: 'Not found' }
                });
                break;
            }
            default:
                break;
        }
    }

    
    
    // expect(result).toEqual(batchFormated);
    // expect(result.total()).toEqual(dealList.total);
});