diff options
author | Georg Ehrke <developer@georgehrke.com> | 2017-04-24 22:34:33 +0200 |
---|---|---|
committer | Georg Ehrke <developer@georgehrke.com> | 2017-04-26 09:28:15 +0200 |
commit | 99b201a188a346c6af832e0d083cc4a958bbb32e (patch) | |
tree | d478ef08fd8b3117178ddb74e0ca0d3197c61cca /core/js | |
parent | 6d7714f1826f443ec9395b4d1c630c3ad44dc7ef (diff) | |
download | nextcloud-server-99b201a188a346c6af832e0d083cc4a958bbb32e.tar.gz nextcloud-server-99b201a188a346c6af832e0d083cc4a958bbb32e.zip |
unit test jquery.contactsmenu
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
Diffstat (limited to 'core/js')
-rw-r--r-- | core/js/tests/specs/jquery.contactsmenuSpec.js | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/core/js/tests/specs/jquery.contactsmenuSpec.js b/core/js/tests/specs/jquery.contactsmenuSpec.js new file mode 100644 index 00000000000..b979be8883f --- /dev/null +++ b/core/js/tests/specs/jquery.contactsmenuSpec.js @@ -0,0 +1,198 @@ +/** + * 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.remove(); + $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()).toEqual('<div class="menu popovermenu bubble 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() { + $('#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": [] + }) + ); + expect(fakeServer.requests[0].method).toEqual('POST'); + expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne'); + + expect($appendTo.html()).toEqual('<div class="menu popovermenu bubble 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>'); + }); + + it('load topaction and more actions', function() { + $('#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'); + + expect($appendTo.html()).toEqual('<div class="menu popovermenu bubble 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>'); + }); + + it('load no actions', function() { + $('#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'); + + expect($appendTo.html()).toEqual('<div class="menu popovermenu bubble 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>'); + }); + + it('should throw an error', function() { + $('#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'); + + expect($appendTo.html()).toEqual('<div class="menu popovermenu bubble 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>'); + }); + }); + + 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); + }); +}); |