aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web
diff options
context:
space:
mode:
authorStas Vilchik <vilchiks@gmail.com>2015-08-26 14:57:51 +0200
committerStas Vilchik <vilchiks@gmail.com>2015-08-26 15:12:30 +0200
commit0629a1049e4c0b022cb8bcc5def2c4ffc4a6916c (patch)
tree4348386a5dbfd710ed5f7ac14cb843d6288d10f7 /server/sonar-web
parentd42ad40824b6b8739cf68a97f59ff331c46588a2 (diff)
downloadsonarqube-0629a1049e4c0b022cb8bcc5def2c4ffc4a6916c.tar.gz
sonarqube-0629a1049e4c0b022cb8bcc5def2c4ffc4a6916c.zip
fix SONAR-6249 Non favorite issue filters cannot be loaded by Issues page
Diffstat (limited to 'server/sonar-web')
-rw-r--r--server/sonar-web/src/main/js/apps/issues/controller.js19
-rw-r--r--server/sonar-web/src/main/js/apps/issues/filters-view.js5
-rw-r--r--server/sonar-web/src/main/js/apps/issues/models/filters.js10
-rw-r--r--server/sonar-web/src/main/js/apps/main/app.jsx2
-rw-r--r--server/sonar-web/src/test/json/issues-spec/issue-filters.json31
-rw-r--r--server/sonar-web/test/medium/issues.spec.js46
6 files changed, 79 insertions, 34 deletions
diff --git a/server/sonar-web/src/main/js/apps/issues/controller.js b/server/sonar-web/src/main/js/apps/issues/controller.js
index c0467e9b6a1..29ae5db89f3 100644
--- a/server/sonar-web/src/main/js/apps/issues/controller.js
+++ b/server/sonar-web/src/main/js/apps/issues/controller.js
@@ -7,8 +7,8 @@ define([
var $ = jQuery,
FIELDS = 'component,componentId,project,subProject,rule,status,resolution,author,reporter,assignee,debt,line,' +
- 'message,severity,actionPlan,creationDate,updateDate,closeDate,tags,comments,attr,actions,transitions,' +
- 'actionPlanName',
+ 'message,severity,actionPlan,creationDate,updateDate,closeDate,tags,comments,attr,actions,transitions,' +
+ 'actionPlanName',
FACET_DATA_FIELDS = ['components', 'users', 'rules', 'actionPlans', 'languages'];
return Controller.extend({
@@ -90,13 +90,14 @@ define([
fetchFilters: function () {
var that = this;
- return $.get(baseUrl + '/api/issue_filters/app', function (r) {
- that.options.app.state.set({
- canBulkChange: r.canBulkChange,
- canManageFilters: r.canManageFilters
- });
- return that.options.app.filters.reset(r.favorites);
- });
+ return $.when(
+ that.options.app.filters.fetch(),
+ $.get(baseUrl + '/api/issue_filters/app', function (r) {
+ that.options.app.state.set({
+ canBulkChange: r.canBulkChange,
+ canManageFilters: r.canManageFilters
+ });
+ }));
},
_mergeCollections: function (a, b) {
diff --git a/server/sonar-web/src/main/js/apps/issues/filters-view.js b/server/sonar-web/src/main/js/apps/issues/filters-view.js
index 568402c3582..896a3d3abb7 100644
--- a/server/sonar-web/src/main/js/apps/issues/filters-view.js
+++ b/server/sonar-web/src/main/js/apps/issues/filters-view.js
@@ -51,9 +51,8 @@ define([
var that = this;
var id = $(e.currentTarget).data('id'),
filter = this.collection.get(id);
- return filter.fetch().done(function () {
- return that.options.app.controller.applyFilter(filter);
- });
+ return that.options.app.controller.applyFilter(filter);
+
},
saveAs: function () {
diff --git a/server/sonar-web/src/main/js/apps/issues/models/filters.js b/server/sonar-web/src/main/js/apps/issues/models/filters.js
index cde0286b159..98c5507c645 100644
--- a/server/sonar-web/src/main/js/apps/issues/models/filters.js
+++ b/server/sonar-web/src/main/js/apps/issues/models/filters.js
@@ -4,7 +4,15 @@ define([
], function (Backbone, Filter) {
return Backbone.Collection.extend({
- model: Filter
+ model: Filter,
+
+ url: function () {
+ return window.baseUrl + '/api/issue_filters/search';
+ },
+
+ parse: function (r) {
+ return r.issueFilters;
+ }
});
});
diff --git a/server/sonar-web/src/main/js/apps/main/app.jsx b/server/sonar-web/src/main/js/apps/main/app.jsx
index 25c2d1dff30..97c3d781c2f 100644
--- a/server/sonar-web/src/main/js/apps/main/app.jsx
+++ b/server/sonar-web/src/main/js/apps/main/app.jsx
@@ -15,7 +15,7 @@ const APP_URL_MAPPING = {
'dashboard': 'dashboard/app',
'drilldown': 'drilldown/app',
'groups': 'groups/app',
- 'issues': 'issues/app',
+ 'issues/search': 'issues/app',
'maintenance': { name: 'maintenance/app', options: { setup: false } },
'markdown': 'markdown/app',
'measures': 'measures/app',
diff --git a/server/sonar-web/src/test/json/issues-spec/issue-filters.json b/server/sonar-web/src/test/json/issues-spec/issue-filters.json
new file mode 100644
index 00000000000..a4eb6979edd
--- /dev/null
+++ b/server/sonar-web/src/test/json/issues-spec/issue-filters.json
@@ -0,0 +1,31 @@
+{
+ "issueFilters": [
+ {
+ "id": "1",
+ "name": "Unresolved Issues",
+ "user": "[SonarQube]",
+ "shared": true,
+ "query": "resolved=false",
+ "canModify": true,
+ "favourite": false
+ },
+ {
+ "id": "2",
+ "name": "False Positive and Won't Fix Issues",
+ "user": "[SonarQube]",
+ "shared": true,
+ "query": "resolutions=FALSE-POSITIVE,WONTFIX",
+ "canModify": true,
+ "favourite": false
+ },
+ {
+ "id": "3",
+ "name": "My Unresolved Issues",
+ "user": "[SonarQube]",
+ "shared": true,
+ "query": "resolved=false|assignees=__me__",
+ "canModify": true,
+ "favourite": false
+ }
+ ]
+}
diff --git a/server/sonar-web/test/medium/issues.spec.js b/server/sonar-web/test/medium/issues.spec.js
index 791025f15d5..ea15c739adb 100644
--- a/server/sonar-web/test/medium/issues.spec.js
+++ b/server/sonar-web/test/medium/issues.spec.js
@@ -7,13 +7,15 @@ define(function (require) {
bdd.it('should show list of saved searches', function () {
return this.remote
.open()
- .mockFromString('/api/l10n/index', '{}')
.mockFromFile('/api/issue_filters/app', 'issues-spec/app.json')
+ .mockFromFile('/api/issue_filters/search', 'issues-spec/issue-filters.json')
.mockFromFile('/api/issues/search', 'issues-spec/search.json')
.startApp('issues/app')
- .checkElementCount('.js-filter', 2)
- .checkElementCount('.js-filter[data-id="31"]', 1)
- .checkElementCount('.js-filter[data-id="32"]', 1);
+ .clickElement('.js-new-search')
+ .checkElementCount('.js-filter', 3)
+ .checkElementCount('.js-filter[data-id="1"]', 1)
+ .checkElementCount('.js-filter[data-id="2"]', 1)
+ .checkElementCount('.js-filter[data-id="3"]', 1);
});
bdd.it('should load a saved search', function () {
@@ -21,17 +23,16 @@ define(function (require) {
.open()
.mockFromString('/api/l10n/index', '{}')
.mockFromFile('/api/issue_filters/app', 'issues-spec/app.json')
+ .mockFromFile('/api/issue_filters/search', 'issues-spec/issue-filters.json')
.mockFromFile('/api/issues/search', 'issues-spec/search.json')
- .mockFromFile('/api/issue_filters/show/31', 'issues-spec/filter.json')
.startApp('issues/app')
+ .clickElement('.js-new-search')
.clickElement('.search-navigator-filters-show-list')
- .clickElement('.js-filter[data-id="31"]')
+ .clickElement('.js-filter[data-id="2"]')
.checkElementCount('.js-filter-copy', 1)
.checkElementCount('.js-filter-edit', 1)
- .checkElementInclude('.issues-filters-name', 'Critical and Blocker Issues')
- .checkElementCount('.js-facet.active[data-value="BLOCKER"]', 1)
- .checkElementCount('.js-facet.active[data-value="CRITICAL"]', 1)
- .checkElementCount('.js-facet.active[data-unresolved]', 1);
+ .checkElementInclude('.issues-filters-name', 'False Positive and Won\'t Fix Issues')
+ .checkElementCount('.js-facet.active[data-value="FALSE-POSITIVE"]', 1);
});
bdd.it('should load a saved search and then resets it by new search', function () {
@@ -39,22 +40,19 @@ define(function (require) {
.open()
.mockFromString('/api/l10n/index', '{}')
.mockFromFile('/api/issue_filters/app', 'issues-spec/app.json')
+ .mockFromFile('/api/issue_filters/search', 'issues-spec/issue-filters.json')
.mockFromFile('/api/issues/search', 'issues-spec/search.json')
- .mockFromFile('/api/issue_filters/show/31', 'issues-spec/filter.json')
.startApp('issues/app')
+ .clickElement('.js-new-search')
.clickElement('.search-navigator-filters-show-list')
- .clickElement('.js-filter[data-id="31"]')
+ .clickElement('.js-filter[data-id="2"]')
.checkElementCount('.js-filter-copy', 1)
.checkElementCount('.js-filter-edit', 1)
- .checkElementInclude('.issues-filters-name', 'Critical and Blocker Issues')
- .checkElementCount('.js-facet.active[data-value="BLOCKER"]', 1)
- .checkElementCount('.js-facet.active[data-value="CRITICAL"]', 1)
- .checkElementCount('.js-facet.active[data-unresolved]', 1)
+ .checkElementInclude('.issues-filters-name', 'False Positive and Won\'t Fix Issues')
+ .checkElementCount('.js-facet.active[data-value="FALSE-POSITIVE"]', 1)
.clickElement('.js-new-search')
- .checkElementCount('.js-facet[data-value="BLOCKER"]:not(.active)', 1)
- .checkElementCount('.js-facet[data-value="CRITICAL"]:not(.active)', 1)
- .checkElementCount('.js-facet.active[data-unresolved]', 1)
- .checkElementNotInclude('.issues-filters-name', 'Critical and Blocker Issues');
+ .checkElementCount('.js-facet[data-value="FALSE-POSITIVE"]:not(.active)', 1)
+ .checkElementNotInclude('.issues-filters-name', 'False Positive and Won\'t Fix Issues');
});
});
@@ -63,6 +61,7 @@ define(function (require) {
.open()
.mockFromString('/api/l10n/index', '{}')
.mockFromFile('/api/issue_filters/app', 'issues-spec/app.json')
+ .mockFromFile('/api/issue_filters/search', 'issues-spec/issue-filters.json')
.mockFromFile('/api/issues/search', 'issues-spec/search.json')
.startApp('issues/app')
.clickElement('.js-new-search')
@@ -102,6 +101,7 @@ define(function (require) {
.open()
.mockFromString('/api/l10n/index', '{}')
.mockFromFile('/api/issue_filters/app', 'issues-spec/app.json')
+ .mockFromFile('/api/issue_filters/search', 'issues-spec/issue-filters.json')
.mockFromFile('/api/issues/search', 'issues-spec/search.json')
.startApp('issues/app')
.clickElement('.js-new-search')
@@ -120,6 +120,7 @@ define(function (require) {
.open()
.mockFromString('/api/l10n/index', '{}')
.mockFromFile('/api/issue_filters/app', 'issues-spec/app.json')
+ .mockFromFile('/api/issue_filters/search', 'issues-spec/issue-filters.json')
.mockFromFile('/api/issues/search', 'issues-spec/search.json')
.startApp('issues/app')
.clickElement('.js-new-search')
@@ -144,6 +145,7 @@ define(function (require) {
.open()
.mockFromString('/api/l10n/index', '{}')
.mockFromFile('/api/issue_filters/app', 'issues-spec/app.json')
+ .mockFromFile('/api/issue_filters/search', 'issues-spec/issue-filters.json')
.mockFromFile('/api/issues/search', 'issues-spec/search.json')
.mockFromString('/issues/bulk_change_form*',
'<div id="bulk-change-form">bulk change form</div>', { contentType: 'text/plain' })
@@ -163,6 +165,7 @@ define(function (require) {
.open()
.mockFromString('/api/l10n/index', '{}')
.mockFromFile('/api/issue_filters/app', 'issues-spec/app.json')
+ .mockFromFile('/api/issue_filters/search', 'issues-spec/issue-filters.json')
.mockFromFile('/api/issues/search', 'issues-spec/search.json')
.mockFromString('/issues/bulk_change_form*',
'<div id="bulk-change-form">bulk change form</div>', { contentType: 'text/plain' })
@@ -193,6 +196,7 @@ define(function (require) {
.open()
.mockFromString('/api/l10n/index', '{}')
.mockFromFile('/api/issue_filters/app', 'issues-spec/app.json')
+ .mockFromFile('/api/issue_filters/search', 'issues-spec/issue-filters.json')
.mockFromFile('/api/issues/search', 'issues-spec/search-filter-similar-issues.json')
.startApp('issues/app')
.clickElement('.js-new-search')
@@ -224,6 +228,7 @@ define(function (require) {
.open('#issues=' + issueKey)
.mockFromString('/api/l10n/index', '{}')
.mockFromFile('/api/issue_filters/app', 'issues-page-should-open-issue-permalink/app.json')
+ .mockFromFile('/api/issue_filters/search', 'issues-spec/issue-filters.json')
//.mockFromString('/api/issues/search', '{}', { data: { issues: issueKey, p: 2 } })
.mockFromFile('/api/issues/search', 'issues-page-should-open-issue-permalink/search.json', { data: { issues: issueKey } })
.mockFromFile('/api/components/app', 'issues-page-should-open-issue-permalink/components-app.json')
@@ -240,6 +245,7 @@ define(function (require) {
.open()
.mockFromString('/api/l10n/index', '{}')
.mockFromFile('/api/issue_filters/app', 'issues-spec/app.json')
+ .mockFromFile('/api/issue_filters/search', 'issues-spec/issue-filters.json')
.mockFromFile('/api/issues/search', 'issues-spec/search-rules-facet.json', { data: { facets: 'rules' } })
.mockFromFile('/api/issues/search', 'issues-spec/search.json')
.startApp('issues/app')