diff options
author | Stas Vilchik <vilchiks@gmail.com> | 2015-08-26 14:57:51 +0200 |
---|---|---|
committer | Stas Vilchik <vilchiks@gmail.com> | 2015-08-26 15:12:30 +0200 |
commit | 0629a1049e4c0b022cb8bcc5def2c4ffc4a6916c (patch) | |
tree | 4348386a5dbfd710ed5f7ac14cb843d6288d10f7 /server/sonar-web | |
parent | d42ad40824b6b8739cf68a97f59ff331c46588a2 (diff) | |
download | sonarqube-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')
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') |