123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- /**
- * Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
- *
- * This file is licensed under the Affero General Public License version 3
- * or later.
- *
- * See the COPYING-README file.
- *
- */
- describe('jquery.contactsMenu tests', function() {
- var $selector1, $selector2, $appendTo;
- beforeEach(function() {
- $('#testArea').append($('<div id="selector1">'));
- $('#testArea').append($('<div id="selector2">'));
- $('#testArea').append($('<div id="appendTo">'));
- $selector1 = $('#selector1');
- $selector2 = $('#selector2');
- $appendTo = $('#appendTo');
- });
- afterEach(function() {
- $selector1.off();
- $selector1.remove();
- $selector2.off();
- $selector2.remove();
- $appendTo.remove();
- });
- describe('shareType', function() {
- it('stops if type not supported', function() {
- $selector1.contactsMenu('user', 1, $appendTo);
- expect($appendTo.children().length).toEqual(0);
- $selector1.contactsMenu('user', 2, $appendTo);
- expect($appendTo.children().length).toEqual(0);
- $selector1.contactsMenu('user', 3, $appendTo);
- expect($appendTo.children().length).toEqual(0);
- $selector1.contactsMenu('user', 5, $appendTo);
- expect($appendTo.children().length).toEqual(0);
- });
- it('append list if shareType supported', function() {
- $selector1.contactsMenu('user', 0, $appendTo);
- expect($appendTo.children().length).toEqual(1);
- expect($appendTo.html().replace(/[\r\n\t]?(\ \ +)?/g, '')).toEqual('<div class="menu popovermenu menu-left hidden contactsmenu-popover"><ul><li><a><span class="icon-loading-small"></span></a></li></ul></div>');
- });
- });
- describe('open on click', function() {
- it('with one selector', function() {
- $selector1.contactsMenu('user', 0, $appendTo);
- expect($appendTo.children().length).toEqual(1);
- expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(true);
- $selector1.click();
- expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(false);
- });
- it('with multiple selectors - 1', function() {
- $('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
- expect($appendTo.children().length).toEqual(1);
- expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(true);
- $selector1.click();
- expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(false);
- });
- it('with multiple selectors - 2', function() {
- $('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
- expect($appendTo.children().length).toEqual(1);
- expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(true);
- $selector2.click();
- expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(false);
- });
- it ('should close when clicking the selector again - 1', function() {
- $('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
- expect($appendTo.children().length).toEqual(1);
- expect($appendTo.find('div').hasClass('hidden')).toEqual(true);
- $selector1.click();
- expect($appendTo.find('div').hasClass('hidden')).toEqual(false);
- $selector1.click();
- expect($appendTo.find('div').hasClass('hidden')).toEqual(true);
- });
- it ('should close when clicking the selector again - 1', function() {
- $('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
- expect($appendTo.children().length).toEqual(1);
- expect($appendTo.find('div').hasClass('hidden')).toEqual(true);
- $selector1.click();
- expect($appendTo.find('div').hasClass('hidden')).toEqual(false);
- $selector2.click();
- expect($appendTo.find('div').hasClass('hidden')).toEqual(true);
- });
- });
- describe('send requests to the server and render', function() {
- it('load a topaction only', function(done) {
- $('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
- $selector1.click();
- expect(fakeServer.requests[0].method).toEqual('POST');
- expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne');
- fakeServer.requests[0].respond(
- 200,
- { 'Content-Type': 'application/json; charset=utf-8' },
- JSON.stringify({
- "id": null,
- "fullName": "Name 123",
- "topAction": {
- "title": "bar@baz.wtf",
- "icon": "foo.svg",
- "hyperlink": "mailto:bar%40baz.wtf"},
- "actions": []
- })
- );
- $selector1.on('load', function() {
- // FIXME: don't compare HTML one to one but check specific text in the output
- expect($appendTo.html().replace(/[\r\n\t]?(\ \ +)?/g, '')).toEqual('<div class="menu popovermenu menu-left contactsmenu-popover loaded" style="display: block;"><ul><li class="hidden"><a><span class="icon-loading-small"></span></a></li><li><a href="mailto:bar%40baz.wtf"><img src="foo.svg"><span>bar@baz.wtf</span></a></li></ul></div>');
- done();
- });
- });
- it('load topaction and more actions', function(done) {
- $('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
- $selector1.click();
- fakeServer.requests[0].respond(
- 200,
- { 'Content-Type': 'application/json; charset=utf-8' },
- JSON.stringify({
- "id": null,
- "fullName": "Name 123",
- "topAction": {
- "title": "bar@baz.wtf",
- "icon": "foo.svg",
- "hyperlink": "mailto:bar%40baz.wtf"},
- "actions": [{
- "title": "Details",
- "icon": "details.svg",
- "hyperlink": "http:\/\/localhost\/index.php\/apps\/contacts"
- }]
- })
- );
- expect(fakeServer.requests[0].method).toEqual('POST');
- expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne');
- $selector1.on('load', function() {
- // FIXME: don't compare HTML one to one but check specific text in the output
- expect($appendTo.html().replace(/[\r\n\t]?(\ \ +)?/g, '')).toEqual('<div class="menu popovermenu menu-left contactsmenu-popover loaded" style="display: block;"><ul><li class="hidden"><a><span class="icon-loading-small"></span></a></li><li><a href="mailto:bar%40baz.wtf"><img src="foo.svg"><span>bar@baz.wtf</span></a></li><li><a href="http://localhost/index.php/apps/contacts"><img src="details.svg"><span>Details</span></a></li></ul></div>');
- done();
- });
- });
- it('load no actions', function(done) {
- $('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
- $selector1.click();
- fakeServer.requests[0].respond(
- 200,
- { 'Content-Type': 'application/json; charset=utf-8' },
- JSON.stringify({
- "id": null,
- "fullName": "Name 123",
- "topAction": null,
- "actions": []
- })
- );
- expect(fakeServer.requests[0].method).toEqual('POST');
- expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne');
- $selector1.on('load', function() {
- // FIXME: don't compare HTML one to one but check specific text in the output
- expect($appendTo.html().replace(/[\r\n\t]?(\ \ +)?/g, '')).toEqual('<div class="menu popovermenu menu-left contactsmenu-popover loaded" style="display: block;"><ul><li class="hidden"><a><span class="icon-loading-small"></span></a></li><li><a href="#"><span>No action available</span></a></li></ul></div>');
- done();
- });
- });
- it('should throw an error', function(done) {
- $('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
- $selector1.click();
- fakeServer.requests[0].respond(
- 400,
- { 'Content-Type': 'application/json; charset=utf-8' },
- JSON.stringify([])
- );
- expect(fakeServer.requests[0].method).toEqual('POST');
- expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne');
- $selector1.on('loaderror', function() {
- // FIXME: don't compare HTML one to one but check specific text in the output
- expect($appendTo.html().replace(/[\r\n\t]?(\ \ +)?/g, '')).toEqual('<div class="menu popovermenu menu-left contactsmenu-popover loaded" style="display: block;"><ul><li class="hidden"><a><span class="icon-loading-small"></span></a></li><li><a href="#"><span>Error fetching contact actions</span></a></li></ul></div>');
- done();
- });
- });
- it('should handle 404', function(done) {
- $('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
- $selector1.click();
- fakeServer.requests[0].respond(
- 404,
- { 'Content-Type': 'application/json; charset=utf-8' },
- JSON.stringify([])
- );
- expect(fakeServer.requests[0].method).toEqual('POST');
- expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne');
- $selector1.on('loaderror', function() {
- // FIXME: don't compare HTML one to one but check specific text in the output
- expect($appendTo.html().replace(/[\r\n\t]?(\ \ +)?/g, '')).toEqual('<div class="menu popovermenu menu-left contactsmenu-popover loaded" style="display: block;"><ul><li class="hidden"><a><span class="icon-loading-small"></span></a></li><li><a href="#"><span>No action available</span></a></li></ul></div>');
- done();
- });
- });
- it('click anywhere else to close the menu', function() {
- $('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
- expect($appendTo.find('div').hasClass('hidden')).toEqual(true);
- $selector1.click();
- expect($appendTo.find('div').hasClass('hidden')).toEqual(false);
- $(document).click();
- expect($appendTo.find('div').hasClass('hidden')).toEqual(true);
- });
- });
- });
|