Remove deleted rules for the new added section
Bug: Issue 11339
Change-Id: Ief0944afe03c55a3ee48b7ed23a3997c569b3354
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.js b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.js
index 61362a8..5459749 100644
--- a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.js
+++ b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.js
@@ -344,6 +344,12 @@
} else if (obj[k].added) {
this._updateAddRemoveObj(addRemoveObj,
path.concat(ref), 'add', obj[k]);
+ /**
+ * As add / delete both can happen in the new section,
+ * so here to make sure it will remove the deleted ones.
+ * @see Issue 11339
+ */
+ this._recursivelyRemoveDeleted(addRemoveObj.add[k]);
continue;
}
this._recursivelyUpdateAddRemoveObj(obj[k], addRemoveObj,
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.html b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.html
index abd11d6..8b1de6e 100644
--- a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.html
+++ b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.html
@@ -416,6 +416,72 @@
assert.deepEqual(obj, expectedResult);
});
+ test('_recursivelyUpdateAddRemoveObj on new added section', () => {
+ const obj = {
+ 'refs/for/*': {
+ permissions: {
+ 'label-Code-Review': {
+ rules: {
+ e798fed07afbc9173a587f876ef8760c78d240c1: {
+ min: -2,
+ max: 2,
+ action: 'ALLOW',
+ added: true,
+ },
+ },
+ added: true,
+ label: 'Code-Review',
+ },
+ 'labelAs-Code-Review': {
+ rules: {
+ 'ldap:gerritcodereview-eng': {
+ min: -2,
+ max: 2,
+ action: 'ALLOW',
+ added: true,
+ deleted: true,
+ },
+ },
+ added: true,
+ label: 'Code-Review',
+ },
+ },
+ added: true,
+ },
+ };
+
+ const expectedResult = {
+ add: {
+ 'refs/for/*': {
+ permissions: {
+ 'label-Code-Review': {
+ rules: {
+ e798fed07afbc9173a587f876ef8760c78d240c1: {
+ min: -2,
+ max: 2,
+ action: 'ALLOW',
+ added: true,
+ },
+ },
+ added: true,
+ label: 'Code-Review',
+ },
+ 'labelAs-Code-Review': {
+ rules: {},
+ added: true,
+ label: 'Code-Review',
+ },
+ },
+ added: true,
+ },
+ },
+ remove: {},
+ };
+ const updateObj = {add: {}, remove: {}};
+ element._recursivelyUpdateAddRemoveObj(obj, updateObj);
+ assert.deepEqual(updateObj, expectedResult);
+ });
+
test('_handleSaveForReview with no changes', () => {
assert.deepEqual(element._computeAddAndRemove(), {add: {}, remove: {}});
});