/** * Copyright (c) 2015 Roeland Jago Douma * * This file is licensed under the Affero General Public License version 3 * or later. * * See the COPYING-README file. * */ describe('jquery.avatar tests', function() { var $div; var devicePixelRatio; beforeEach(function() { $('#testArea').append($('
')); $div = $('#avatardiv'); devicePixelRatio = window.devicePixelRatio; window.devicePixelRatio = 1; spyOn(window, 'Image').and.returnValue({ onload: function() { }, onerror: function() { } }); }); afterEach(function() { $div.remove(); window.devicePixelRatio = devicePixelRatio; }); describe('size', function() { it('undefined', function() { $div.avatar('foo'); expect($div.height()).toEqual(64); expect($div.width()).toEqual(64); }); it('undefined but div has height', function() { $div.height(9); $div.avatar('foo'); expect(window.Image).toHaveBeenCalled(); window.Image().onerror(); expect($div.height()).toEqual(9); expect($div.width()).toEqual(9); }); it('undefined but data size is set', function() { $div.data('size', 10); $div.avatar('foo'); expect(window.Image).toHaveBeenCalled(); window.Image().onerror(); expect($div.height()).toEqual(10); expect($div.width()).toEqual(10); }); it('defined', function() { $div.avatar('foo', 8); expect(window.Image).toHaveBeenCalled(); window.Image().onerror(); expect($div.height()).toEqual(8); expect($div.width()).toEqual(8); }); }); it('undefined user', function() { spyOn($div, 'imageplaceholder'); spyOn($div, 'css'); $div.avatar(); expect($div.imageplaceholder).toHaveBeenCalledWith('?'); expect($div.css).toHaveBeenCalledWith('background-color', '#b9b9b9'); }); describe('no avatar', function() { it('show placeholder for existing user', function() { spyOn($div, 'imageplaceholder'); $div.avatar('foo', undefined, undefined, undefined, undefined, 'bar'); expect(window.Image).toHaveBeenCalled(); window.Image().onerror(); expect($div.imageplaceholder).toHaveBeenCalledWith('foo', 'bar'); }); it('show placeholder for non existing user', function() { spyOn($div, 'imageplaceholder'); spyOn($div, 'css'); $div.avatar('foo'); expect(window.Image).toHaveBeenCalled(); window.Image().onerror(); expect($div.imageplaceholder).toHaveBeenCalledWith('?'); expect($div.css).toHaveBeenCalledWith('background-color', '#b9b9b9'); }); it('show no placeholder is ignored', function() { spyOn($div, 'imageplaceholder'); spyOn($div, 'css'); $div.avatar('foo', undefined, undefined, true); expect(window.Image).toHaveBeenCalled(); window.Image().onerror(); expect($div.imageplaceholder).toHaveBeenCalledWith('?'); expect($div.css).toHaveBeenCalledWith('background-color', '#b9b9b9'); }); }); describe('url generation', function() { beforeEach(function() { window.devicePixelRatio = 1; }); it('default', function() { window.devicePixelRatio = 1; $div.avatar('foo', 32); expect(window.Image).toHaveBeenCalled(); expect(window.Image().src).toEqual('http://localhost/index.php/avatar/foo/32'); }); it('high DPI icon', function() { window.devicePixelRatio = 4; $div.avatar('foo', 32); expect(window.Image).toHaveBeenCalled(); expect(window.Image().src).toEqual('http://localhost/index.php/avatar/foo/128'); }); it('high DPI icon round up size', function() { window.devicePixelRatio = 1.9; $div.avatar('foo', 32); expect(window.Image).toHaveBeenCalled(); expect(window.Image().src).toEqual('http://localhost/index.php/avatar/foo/61'); }); }); describe('valid avatar', function() { beforeEach(function() { window.devicePixelRatio = 1; }); it('default (no ie8 fix)', function() { $div.avatar('foo', 32); expect(window.Image).toHaveBeenCalled(); window.Image().onload(); expect(window.Image().height).toEqual(32); expect(window.Image().width).toEqual(32); expect(window.Image().src).toEqual('http://localhost/index.php/avatar/foo/32'); }); it('default high DPI icon', function() { window.devicePixelRatio = 1.9; $div.avatar('foo', 32); expect(window.Image).toHaveBeenCalled(); window.Image().onload(); expect(window.Image().height).toEqual(32); expect(window.Image().width).toEqual(32); expect(window.Image().src).toEqual('http://localhost/index.php/avatar/foo/61'); }); it('with ie8 fix (ignored)', function() { $div.avatar('foo', 32, true); expect(window.Image).toHaveBeenCalled(); window.Image().onload(); expect(window.Image().height).toEqual(32); expect(window.Image().width).toEqual(32); expect(window.Image().src).toEqual('http://localhost/index.php/avatar/foo/32'); }); it('unhide div', function() { $div.hide(); $div.avatar('foo', 32); expect(window.Image).toHaveBeenCalled(); window.Image().onload(); expect(window.Image().height).toEqual(32); expect(window.Image().width).toEqual(32); expect(window.Image().src).toEqual('http://localhost/index.php/avatar/foo/32'); }); it('callback called', function() { var observer = {callback: function() { dump("FOO"); }}; spyOn(observer, 'callback'); $div.avatar('foo', 32, undefined, undefined, function() { observer.callback(); }); expect(window.Image).toHaveBeenCalled(); window.Image().onload(); expect(window.Image().height).toEqual(32); expect(window.Image().width).toEqual(32); expect(window.Image().src).toEqual('http://localhost/index.php/avatar/foo/32'); expect(observer.callback).toHaveBeenCalled(); }); }); });