import './index.js';
import crudModel from 'core/mocks/crud-model';

describe('AgencyTerm', () => {
    describe('Component vnAgencyTermIndex', () => {
        let controller;
        let $window;

        beforeEach(ngModule('route'));

        beforeEach(inject(($componentController, _$window_) => {
            $window = _$window_;
            const $element = angular.element('<vn-agency-term-index></vn-agency-term-index>');
            controller = $componentController('vnAgencyTermIndex', {$element});
            controller.$.model = crudModel;
            controller.$.model.data = [
                {supplierFk: 1, totalPrice: null},
                {supplierFk: 1},
                {supplierFk: 2}
            ];
        }));

        describe('checked() getter', () => {
            it('should return the checked lines', () => {
                const data = controller.$.model.data;
                data[0].checked = true;

                const checkedRows = controller.checked;

                const firstCheckedRow = checkedRows[0];

                expect(firstCheckedRow.supplierFk).toEqual(1);
            });
        });

        describe('totalCheked() getter', () => {
            it('should return the total checked lines', () => {
                const data = controller.$.model.data;
                data[0].checked = true;

                const checkedRows = controller.totalChecked;

                expect(checkedRows).toEqual(1);
            });
        });

        describe('preview()', () => {
            it('should show the summary dialog', () => {
                controller.$.summary = {show: () => {}};
                jest.spyOn(controller.$.summary, 'show');

                let event = new MouseEvent('click', {
                    view: $window,
                    bubbles: true,
                    cancelable: true
                });
                const route = {id: 1};

                controller.preview(event, route);

                expect(controller.$.summary.show).toHaveBeenCalledWith();
            });
        });

        describe('createInvoiceIn()', () => {
            it('should throw an error if more than one autonomous are checked', () => {
                jest.spyOn(controller.vnApp, 'showError');
                const data = controller.$.model.data;
                data[0].checked = true;
                data[2].checked = true;

                controller.createInvoiceIn();

                expect(controller.vnApp.showError).toHaveBeenCalled();
            });

            it('should call the function go() on $state to go to the file management', () => {
                jest.spyOn(controller.$state, 'go');
                const data = controller.$.model.data;
                data[0].checked = true;

                controller.createInvoiceIn();

                delete data[0].checked;
                const params = JSON.stringify({
                    supplierName: data[0].supplierName,
                    rows: [data[0]]
                });

                expect(controller.$state.go).toHaveBeenCalledWith('route.agencyTerm.createInvoiceIn', {q: params});
            });
        });
    });
});