import './spinner.js';

describe('Component vnSpinner', () => {
    let $scope;
    let $element;
    let controller;

    beforeEach(ngModule('vnCore'));

    beforeEach(angular.mock.inject(($componentController, $rootScope) => {
        $scope = $rootScope.$new();
        $element = angular.element('<div><div></div></div>');
        controller = $componentController('vnSpinner', {$scope, $element});
    }));

    describe('enable()', () => {
        it(`should call start() based on a boolean value passed as argument`, () => {
            spyOn(controller, 'start');
            spyOn(controller, 'stop');
            controller.enable = true;

            expect(controller.start).toHaveBeenCalledWith();
            expect(controller.stop).not.toHaveBeenCalledWith();
        });

        it(`should call stop() based on a boolean value passed as argument`, () => {
            spyOn(controller, 'start');
            spyOn(controller, 'stop');
            controller.enable = false;

            expect(controller.start).not.toHaveBeenCalledWith();
            expect(controller.stop).toHaveBeenCalledWith();
        });
    });

    describe('start()', () => {
        it(`should call start() on the controller.materialSpinner then set controllers._enable to be truthy`, () => {
            controller.spinner = {MaterialSpinner: {start: () => {}}};
            spyOn(controller.spinner.MaterialSpinner, 'start');
            controller._enable = false;
            controller.start();

            expect(controller.spinner.MaterialSpinner.start).toHaveBeenCalledWith();
            expect(controller._enable).toBeTruthy();
        });
    });

    describe('stop()', () => {
        it(`should call stop() on the controller.materialSpinner then set controllers._enable to be truthy`, () => {
            controller.spinner = {MaterialSpinner: {stop: () => {}}};
            spyOn(controller.spinner.MaterialSpinner, 'stop');
            controller._enable = true;
            controller.stop();

            expect(controller.spinner.MaterialSpinner.stop).toHaveBeenCalledWith();
            expect(controller._enable).toBeFalsy();
        });
    });
});