import './index.js';

describe('Component vnInputNumber', () => {
    let $scope;
    let $attrs;
    let $timeout;
    let $element;
    let controller;

    beforeEach(ngModule('vnCore'));

    beforeEach(angular.mock.inject(($componentController, $rootScope) => {
        $scope = $rootScope.$new();
        $attrs = {};
        $element = angular.element('<div><input><div class="infix invalid validated"><div class="rightIcons"></div></div>');
        controller = $componentController('vnInputNumber', {$element, $scope, $attrs, $timeout, $transclude: () => {}});
    }));

    describe('value() setter', () => {
        it(`should set _value to a given value, add the class not-empty and remove invalid and validated`, () => {
            controller.value = 'pepino';
            let classes = controller.element.classList.toString();

            expect(classes).toContain('not-empty');
            expect(controller._value).toEqual('pepino');

            classes = controller.element.querySelector('.infix').classList.toString();

            expect(classes).not.toContain('invalid validated');
        });

        it(`should set _value to a given value and not add the class not-empty if the given value is null`, () => {
            controller.value = null;
            let classes = controller.element.classList.toString();

            expect(classes).not.toContain('not-empty');
            expect(controller._value).toEqual(null);
        });
    });

    describe('step() setter/getter', () => {
        it(`should set input.step to a given value`, () => {
            controller.step = 50;

            expect(controller.input.step).toEqual('50');
        });

        it(`should return a number`, () => {
            controller.step = 50;

            expect(controller.step).toEqual(50);
            expect(typeof controller.step).toEqual('number');
        });
    });
});