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



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', async () => {
    mock.onPost('https://example.bitrix24.ru/rest/crm.deal.list.json').reply(201, dealList);
    const promise= bx24.callMethod('crm.deal.list', {});

    const result=await promise;
    
    expect(result.data()).toEqual(dealList.result);
    expect(result.total()).toEqual(dealList.total);
    expect(result.error()).toBeUndefined();
});