From 4afafc946891df2429b57d8e55914e7940efbb67 Mon Sep 17 00:00:00 2001 From: Becky Siegel Date: Tue, 28 Nov 2017 13:56:34 -0800 Subject: [PATCH 01/17] Fix group member URL Group member URLs are included as part of the getIncludedGroups rest API call, however a different (incorrect) URL was trying to get computed. This change fixes the URL issue and also does some HTML clean up. Bug: Issue 7819 Change-Id: I73bdf4aecc2584f60d888fd04951915705bde255 (cherry picked from commit 7f6b15d6546863c5c47c63eb69e4e7d73db90ade) --- .../gr-group-members/gr-group-members.html | 169 +++++++++--------- .../gr-group-members/gr-group-members.js | 15 +- .../gr-group-members_test.html | 46 ++++- polygerrit-ui/app/styles/gr-form-styles.html | 4 +- 4 files changed, 140 insertions(+), 94 deletions(-) diff --git a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.html b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.html index 9e08381723..e7e5f176db 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.html +++ b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.html @@ -85,99 +85,92 @@ limitations under the License.

[[_groupName]]

+

Members

-

Members

-
- - - - - - Add - -
- - - - - + + + + + + Add + +
NameEmail AddressDelete Member
+ + + + + + + + +
NameEmail AddressDelete Member
+

Included Groups

-

Included Groups

-
- - - - - - Add - -
- - - - - + + + + + + Add + +
Group NameDescription - Delete Included Group -
+ + + + + + + + +
Group NameDescription + Delete Group +
diff --git a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.js b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.js index 81bb9021da..0105a0cbc5 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.js +++ b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.js @@ -16,6 +16,8 @@ const SUGGESTIONS_LIMIT = 15; + const URL_REGEX = '^(?:[a-z]+:)?//'; + Polymer({ is: 'gr-group-members', @@ -109,8 +111,17 @@ return this._loading || this._loading === undefined; }, - _groupUrl(item) { - return this.getBaseUrl() + '/admin/groups/' + this.encodeURL(item, true); + _computeGroupUrl(url) { + const r = new RegExp(URL_REGEX, 'i'); + if (r.test(url)) { + return url; + } + + // For GWT compatibility + if (url.startsWith('#')) { + return this.getBaseUrl() + url.slice(1); + } + return this.getBaseUrl() + url; }, _handleSavingGroupMember() { diff --git a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.html b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.html index ef89e37be1..04b8351714 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.html +++ b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.html @@ -37,6 +37,7 @@ limitations under the License. let sandbox; let groups; let groupMembers; + let includedGroups; setup(() => { sandbox = sinon.sandbox.create(); @@ -67,6 +68,26 @@ limitations under the License. }, ]; + includedGroups = [{ + url: 'https://group/url', + options: {}, + id: 'testId', + name: 'testName', + }, + { + url: '/group/url', + options: {}, + id: 'testId2', + name: 'testName2', + }, + { + url: '#/group/url', + options: {}, + id: 'testId3', + name: 'testName3', + }, + ]; + stub('gr-rest-api-interface', { getSuggestedAccounts(input) { if (input.startsWith('test')) { @@ -94,6 +115,9 @@ limitations under the License. } }, getLoggedIn() { return Promise.resolve(true); }, + getConfig() { + return Promise.resolve(); + }, getGroupConfig() { return Promise.resolve(groups); }, @@ -103,15 +127,35 @@ limitations under the License. getIsGroupOwner() { return Promise.resolve(true); }, + getIncludedGroup() { + return Promise.resolve(includedGroups); + }, + getAccountCapabilities() { + return Promise.resolve(); + }, }); - element = fixture('basic'); + sandbox.stub(element, 'getBaseUrl').returns('https://test/site'); + element.groupId = 1; + return element._loadGroupDetails(); }); teardown(() => { sandbox.restore(); }); + test('_includedGroups', () => { + assert.equal(element._includedGroups.length, 3); + assert.equal(Polymer.dom(element.root) + .querySelectorAll('.nameColumn a')[0].href, includedGroups[0].url); + assert.equal(Polymer.dom(element.root) + .querySelectorAll('.nameColumn a')[1].href, + 'https://test/site/group/url'); + assert.equal(Polymer.dom(element.root) + .querySelectorAll('.nameColumn a')[2].href, + 'https://test/site/group/url'); + }); + test('save correctly', () => { element._groupOwner = true; diff --git a/polygerrit-ui/app/styles/gr-form-styles.html b/polygerrit-ui/app/styles/gr-form-styles.html index 603f610261..823fee67e5 100644 --- a/polygerrit-ui/app/styles/gr-form-styles.html +++ b/polygerrit-ui/app/styles/gr-form-styles.html @@ -16,9 +16,7 @@ limitations under the License.