diff options
author | Stas Vilchik <vilchiks@gmail.com> | 2015-03-12 15:37:55 +0100 |
---|---|---|
committer | Stas Vilchik <vilchiks@gmail.com> | 2015-03-12 16:32:53 +0100 |
commit | 667e63f9c3cfb922447d856250d59da4eb5621d0 (patch) | |
tree | bd4efd4e8e92c8be0388fc2a691cd85f82e8261c /server/sonar-web | |
parent | 9f51efc78fd01b5485bcccffdace91a5c3666054 (diff) | |
download | sonarqube-667e63f9c3cfb922447d856250d59da4eb5621d0.tar.gz sonarqube-667e63f9c3cfb922447d856250d59da4eb5621d0.zip |
add nav web tests
Diffstat (limited to 'server/sonar-web')
-rw-r--r-- | server/sonar-web/src/main/hbs/nav/nav-global-navbar.hbs | 4 | ||||
-rw-r--r-- | server/sonar-web/src/test/js/nav-spec.js | 367 | ||||
-rw-r--r-- | server/sonar-web/src/test/json/nav-spec/search.json | 34 | ||||
-rw-r--r-- | server/sonar-web/src/test/views/nav.jade | 5 |
4 files changed, 408 insertions, 2 deletions
diff --git a/server/sonar-web/src/main/hbs/nav/nav-global-navbar.hbs b/server/sonar-web/src/main/hbs/nav/nav-global-navbar.hbs index 88b6e8edbc5..6a630910b68 100644 --- a/server/sonar-web/src/main/hbs/nav/nav-global-navbar.hbs +++ b/server/sonar-web/src/main/hbs/nav/nav-global-navbar.hbs @@ -11,7 +11,7 @@ </div> <ul class="nav navbar-nav"> - <li class="dropdown"> + <li class="dropdown t-dashboards"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> {{t 'layout.dashboards'}} <span class="icon-dropdown"></span> </a> @@ -49,7 +49,7 @@ <a class="navbar-admin-link" href="{{link '/settings'}}">{{t 'layout.settings'}}</a> </li> {{/if}} - <li class="dropdown"> + <li class="dropdown t-more"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">{{t 'more'}} <i class="icon-dropdown"></i></a> <ul class="dropdown-menu"> <li> diff --git a/server/sonar-web/src/test/js/nav-spec.js b/server/sonar-web/src/test/js/nav-spec.js new file mode 100644 index 00000000000..41b9c8e0ea3 --- /dev/null +++ b/server/sonar-web/src/test/js/nav-spec.js @@ -0,0 +1,367 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +/* globals casper: false */ + +var lib = require('../lib'), + testName = lib.testName('Navigation'); + + +lib.initMessages(); +lib.changeWorkingDirectory('nav-spec'); +lib.configureCasper(); + + +casper.test.begin(testName('Global Spaces'), 8, function (test) { + casper + .start(lib.buildUrl('nav'), function () { + lib.setDefaultViewport(); + }) + + .then(function () { + casper.evaluate(function () { + window.SS.isUserAdmin = false; + window.navbarOptions = new Backbone.Model(); + require(['/js/nav/app.js']); + }); + }) + + .then(function () { + casper.waitForSelector('.navbar-global .nav'); + }) + + .then(function () { + // check global spaces + test.assertExists('.navbar-global a[href*="/issues"]'); + test.assertExists('.navbar-global a[href*="/measures"]'); + test.assertExists('.navbar-global a[href*="/coding_rules"]'); + test.assertExists('.navbar-global a[href*="/profiles"]'); + test.assertExists('.navbar-global a[href*="/quality_gates"]'); + + // should not see settings + test.assertDoesntExist('.navbar-global a[href*="/settings"]'); + + // check "more" + test.assertExists('.navbar-global a[href*="/comparison"]'); + test.assertExists('.navbar-global a[href*="/dependencies"]'); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); + + +casper.test.begin(testName('Global Dashboards'), 12, function (test) { + casper + .start(lib.buildUrl('nav'), function () { + lib.setDefaultViewport(); + }) + + .then(function () { + casper.evaluate(function () { + window.SS.isUserAdmin = false; + window.navbarOptions = new Backbone.Model(); + window.navbarOptions.set({ + globalDashboards: [ + { url: '/dashboard/?did=1', name: 'First Global Dashboard' }, + { url: '/dashboard/?did=2', name: 'Second Global Dashboard' }, + { url: '/dashboard/?did=3', name: 'Third Global Dashboard' } + ] + }); + + require(['/js/nav/app.js']); + }); + }) + + .then(function () { + casper.waitForSelector('.navbar-global .nav'); + }) + + .then(function () { + // check links existence + test.assertExists('.navbar-global a[href*="/dashboard/?did=1"]'); + test.assertSelectorContains('.navbar-global a[href*="/dashboard/?did=1"]', 'First Global Dashboard'); + test.assertExists('.navbar-global a[href*="/dashboard/?did=2"]'); + test.assertSelectorContains('.navbar-global a[href*="/dashboard/?did=2"]', 'Second Global Dashboard'); + test.assertExists('.navbar-global a[href*="/dashboard/?did=3"]'); + test.assertSelectorContains('.navbar-global a[href*="/dashboard/?did=3"]', 'Third Global Dashboard'); + }) + + .then(function () { + // check that dashboards are not visible by default + test.assertNotVisible('.navbar-global a[href*="/dashboard/?did=1"]'); + test.assertNotVisible('.navbar-global a[href*="/dashboard/?did=2"]'); + test.assertNotVisible('.navbar-global a[href*="/dashboard/?did=3"]'); + + // check dropdown + casper.click('.navbar-global .t-dashboards [data-toggle="dropdown"]'); + test.assertVisible('.navbar-global a[href*="/dashboard/?did=1"]'); + test.assertVisible('.navbar-global a[href*="/dashboard/?did=2"]'); + test.assertVisible('.navbar-global a[href*="/dashboard/?did=3"]'); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); + + +casper.test.begin(testName('Global Plugin Pages'), 12, function (test) { + casper + .start(lib.buildUrl('nav'), function () { + lib.setDefaultViewport(); + }) + + .then(function () { + casper.evaluate(function () { + window.SS.isUserAdmin = false; + window.navbarOptions = new Backbone.Model(); + window.navbarOptions.set({ + globalPages: [ + { url: '/page/1', name: 'First Global Page' }, + { url: '/page/2', name: 'Second Global Page' }, + { url: '/page/3', name: 'Third Global Page' } + ] + }); + + require(['/js/nav/app.js']); + }); + }) + + .then(function () { + casper.waitForSelector('.navbar-global .nav'); + }) + + .then(function () { + // check links existence + test.assertExists('.navbar-global a[href*="/page/1"]'); + test.assertSelectorContains('.navbar-global a[href*="/page/1"]', 'First Global Page'); + test.assertExists('.navbar-global a[href*="/page/2"]'); + test.assertSelectorContains('.navbar-global a[href*="/page/2"]', 'Second Global Page'); + test.assertExists('.navbar-global a[href*="/page/3"]'); + test.assertSelectorContains('.navbar-global a[href*="/page/3"]', 'Third Global Page'); + }) + + .then(function () { + // check that pages are not visible by default + test.assertNotVisible('.navbar-global a[href*="/page/1"]'); + test.assertNotVisible('.navbar-global a[href*="/page/2"]'); + test.assertNotVisible('.navbar-global a[href*="/page/3"]'); + + // check dropdown + casper.click('.navbar-global .t-more [data-toggle="dropdown"]'); + test.assertVisible('.navbar-global a[href*="/page/1"]'); + test.assertVisible('.navbar-global a[href*="/page/2"]'); + test.assertVisible('.navbar-global a[href*="/page/3"]'); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); + + +casper.test.begin(testName('Login'), 3, function (test) { + casper + .start(lib.buildUrl('nav#anchor'), function () { + lib.setDefaultViewport(); + }) + + .then(function () { + casper.evaluate(function () { + window.SS.isUserAdmin = false; + window.navbarOptions = new Backbone.Model(); + + require(['/js/nav/app.js']); + }); + }) + + .then(function () { + casper.waitForSelector('.navbar-global .nav'); + }) + + .then(function () { + test.assertExists('.navbar-global .js-login'); + casper.click('.navbar-global .js-login'); + casper.waitForUrl('/sessions/new?return_to=', function () { + test.assertUrlMatches('/pages/nav'); + test.assertUrlMatches('#anchor'); + }); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); + + +casper.test.begin(testName('Search'), 16, function (test) { + casper + .start(lib.buildUrl('nav'), function () { + lib.setDefaultViewport(); + + lib.mockRequestFromFile('/api/components/suggestions', 'search.json'); + }) + + .then(function () { + casper.evaluate(function () { + window.SS.isUserAdmin = false; + window.navbarOptions = new Backbone.Model(); + window.navbarOptions.set({ qualifiers: ['TRK', 'VW', 'DEV'] }); + window.localStorage.setItem('sonar_recent_history', + '[{"key":"localhistoryproject","name":"Local History Project","icon":"trk"}]'); + + require(['/js/nav/app.js']); + }); + }) + + .then(function () { + casper.waitForSelector('.navbar-global .nav'); + }) + + .then(function () { + test.assertExists('.navbar-global .js-search-dropdown-toggle'); + casper.click('.navbar-global .js-search-dropdown-toggle'); + casper.waitForSelector('.navbar-search'); + }) + + .then(function () { + // for top-level qualifiers + test.assertExists('.js-search-results a[href*="/all_projects?qualifier=TRK"]'); + test.assertExists('.js-search-results a[href*="/all_projects?qualifier=VW"]'); + test.assertExists('.js-search-results a[href*="/all_projects?qualifier=DEV"]'); + + // browsed recently + test.assertExists('.js-search-results a[href*="localhistoryproject"]'); + test.assertSelectorContains('.js-search-results a[href*="localhistoryproject"]', 'Local History Project'); + }) + + .then(function () { + casper.fill('.navbar-search', { q: 'search query' }, true); + casper.evaluate(function () { + jQuery('.navbar-search [name="q"]').keyup(); + }); + casper.waitForSelectorTextChange('.js-search-results'); + }) + + .then(function () { + test.assertElementCount('.js-search-results a', 3); + test.assertSelectorContains('.js-search-results a', 'SonarQube Java'); + test.assertSelectorContains('.js-search-results a', 'SonarQube Java :: Squid'); + test.assertSelectorContains('.js-search-results a', 'SonarQube Java :: Checks'); + }) + + .then(function () { + // should reset search results + casper.fill('.navbar-search', { q: '' }, true); + casper.evaluate(function () { + jQuery('.navbar-search [name="q"]').keyup(); + }); + casper.waitForSelectorTextChange('.js-search-results'); + }) + + .then(function () { + test.assertSelectorDoesntContain('.js-search-results a', 'SonarQube Java'); + test.assertExists('.js-search-results a[href*="/all_projects?qualifier=TRK"]'); + test.assertExists('.js-search-results a[href*="/all_projects?qualifier=VW"]'); + test.assertExists('.js-search-results a[href*="/all_projects?qualifier=DEV"]'); + + test.assertExists('.js-search-results a[href*="localhistoryproject"]'); + test.assertSelectorContains('.js-search-results a[href*="localhistoryproject"]', 'Local History Project'); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); + + +casper.test.begin(testName('Context'), function (test) { + casper + .start(lib.buildUrl('nav'), function () { + lib.setDefaultViewport(); + }) + + .then(function () { + casper.evaluate(function () { + window.SS.isUserAdmin = false; + window.navbarOptions = new Backbone.Model(); + window.navbarOptions.set({ + contextId: '1', + contextKey: 'org.codehaus.sonar-plugins.java:java', + contextUuid: 'acfc6a2d-d28c-4302-987c-697544fb096e', + contextComparable: true, + canFavoriteContext: false, + isContextFavorite: false, + contextVersion: '2.9-SNAPSHOT', + contextDate: '2015-03-03T09:43:37+01:00' + }); + window.navbarOptions.set({ + contextBreadcrumbs: [ + { + q: 'TRK', + url: '/dashboard/index?id=org.codehaus.sonar-plugins.java%3Ajava', + name: 'SonarQube Java' + } + ] + }); + + require(['/js/nav/app.js']); + }); + }) + + .then(function () { + casper.waitForSelector('.navbar-context .nav'); + }) + + .then(function () { + test.assertSelectorContains('.navbar-context .nav-crumbs', 'SonarQube Java'); + test.assertSelectorContains('.navbar-context .navbar-context-meta', '2.9-SNAPSHOT'); + test.assertSelectorContains('.navbar-context .navbar-context-meta', 'March 3 2015 9:43 AM'); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); diff --git a/server/sonar-web/src/test/json/nav-spec/search.json b/server/sonar-web/src/test/json/nav-spec/search.json new file mode 100644 index 00000000000..7596000da7b --- /dev/null +++ b/server/sonar-web/src/test/json/nav-spec/search.json @@ -0,0 +1,34 @@ +{ + "total": 3, + "results": [ + { + "q": "TRK", + "name": "Projects", + "items": [ + { + "key": "org.codehaus.sonar-plugins.java:java", + "name": "SonarQube Java" + } + ] + }, + { + "q": "BRC", + "name": "Sub-projects", + "items": [ + { + "key": "org.codehaus.sonar-plugins.java:java-squid", + "name": "SonarQube Java :: Squid" + }, + { + "key": "org.codehaus.sonar-plugins.java:java-checks", + "name": "SonarQube Java :: Checks" + } + ] + }, + { + "q": "DIR", + "name": "Directories", + "items": [] + } + ] +} diff --git a/server/sonar-web/src/test/views/nav.jade b/server/sonar-web/src/test/views/nav.jade new file mode 100644 index 00000000000..6980b5e34ad --- /dev/null +++ b/server/sonar-web/src/test/views/nav.jade @@ -0,0 +1,5 @@ +extends layouts/main + +block body + .navbar.navbar-global + .navbar.navbar-context |