123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- /**
- * Copyright (c) 2015 Roeland Jago Douma <roeland@famdouma.nl>
- *
- * 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 id="avatardiv">'));
- $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();
- });
- });
- });
|