(function(require) { 'use strict'; require( ['video/00_resizer.js', 'underscore'], function(Resizer, _) { describe('Resizer', function() { var html = [ '
', '
', 'Content', '
', '
' ].join(''), config, $container, $element; beforeEach(function() { setFixtures(html); $container = $('.rszr-wrapper'); $element = $('.rszr-el'); config = { container: $container, element: $element }; spyOn(console, 'log'); }); it('When Initialize without required parameters, log message is shown', function() { // eslint-disable-next-line no-new new Resizer({ }); expect(console.log).toHaveBeenCalled(); } ); it('`alignByWidthOnly` works correctly', function() { var resizer = new Resizer(config).alignByWidthOnly(), expectedWidth = $container.width(), realWidth = $element.width(); expect(realWidth).toBe(expectedWidth); }); it('`alignByHeightOnly` works correctly', function() { var resizer = new Resizer(config).alignByHeightOnly(), expectedHeight = $container.height(), realHeight = $element.height(); expect(realHeight).toBe(expectedHeight); }); it('`align` works correctly', function() { var resizer = new Resizer(config).align(), expectedHeight = $container.height(), realHeight = $element.height(), expectedWidth = 50, realWidth; // containerRatio >= elementRatio expect(realHeight).toBe(expectedHeight); // containerRatio < elementRatio $container.width(expectedWidth); resizer.align(); realWidth = $element.width(); expect(realWidth).toBe(expectedWidth); }); it('`setMode` works correctly', function() { var resizer = new Resizer(config).setMode('height'), expectedHeight = $container.height(), realHeight = $element.height(), expectedWidth = 50, realWidth; // containerRatio >= elementRatio expect(realHeight).toBe(expectedHeight); // containerRatio < elementRatio $container.width(expectedWidth); resizer.setMode('width'); realWidth = $element.width(); expect(realWidth).toBe(expectedWidth); }); it('`setElement` works correctly', function() { var $newElement, expectedHeight; $container.append('
'); $newElement = $('#Another-el'); expectedHeight = $container.height(); new Resizer(config).setElement($newElement).alignByHeightOnly(); expect($element.height()).not.toBe(expectedHeight); expect($newElement.height()).toBe(expectedHeight); }); describe('Callbacks', function() { var resizer, spiesList = []; beforeEach(function() { var spiesCount = _.range(3); spiesList = $.map(spiesCount, function() { return jasmine.createSpy(); }); resizer = new Resizer(config); }); it('callbacks are called', function() { $.each(spiesList, function(index, spy) { resizer.callbacks.add(spy); }); resizer.align(); $.each(spiesList, function(index, spy) { expect(spy).toHaveBeenCalled(); }); }); it('callback called just once', function() { resizer.callbacks.once(spiesList[0]); resizer .align() .alignByHeightOnly(); expect(spiesList[0].calls.count()).toEqual(1); }); it('all callbacks are removed', function() { $.each(spiesList, function(index, spy) { resizer.callbacks.add(spy); }); resizer.callbacks.removeAll(); resizer.align(); $.each(spiesList, function(index, spy) { expect(spy).not.toHaveBeenCalled(); }); }); it('specific callback is removed', function() { $.each(spiesList, function(index, spy) { resizer.callbacks.add(spy); }); resizer.callbacks.remove(spiesList[1]); resizer.align(); expect(spiesList[1]).not.toHaveBeenCalled(); }); it( 'Error message is shown when wrong argument type is passed', function() { var methods = ['add', 'once'], errorMessage = '[Video info]: TypeError: Argument is not a function.', arg = {}; spyOn(console, 'error'); $.each(methods, function(index, methodName) { resizer.callbacks[methodName](arg); expect(console.error).toHaveBeenCalledWith(errorMessage); // reset spy console.log.calls.reset(); }); }); }); describe('Delta', function() { var resizer; beforeEach(function() { resizer = new Resizer(config); }); it('adding delta align correctly by height', function() { var delta = 100, expectedHeight = $container.height() + delta, realHeight; resizer .delta.add(delta, 'height') .setMode('height'); realHeight = $element.height(); expect(realHeight).toBe(expectedHeight); }); it('adding delta align correctly by width', function() { var delta = 100, expectedWidth = $container.width() + delta, realWidth; resizer .delta.add(delta, 'width') .setMode('width'); realWidth = $element.width(); expect(realWidth).toBe(expectedWidth); }); it('substract delta align correctly by height', function() { var delta = 100, expectedHeight = $container.height() - delta, realHeight; resizer .delta.substract(delta, 'height') .setMode('height'); realHeight = $element.height(); expect(realHeight).toBe(expectedHeight); }); it('substract delta align correctly by width', function() { var delta = 100, expectedWidth = $container.width() - delta, realWidth; resizer .delta.substract(delta, 'width') .setMode('width'); realWidth = $element.width(); expect(realWidth).toBe(expectedWidth); }); it('reset delta', function() { var delta = 100, expectedWidth = $container.width(), realWidth; resizer .delta.substract(delta, 'width') .delta.reset() .setMode('width'); realWidth = $element.width(); expect(realWidth).toBe(expectedWidth); }); }); }); }); }(require));