Fix type errors on related change results

When results resolve for any of the five different types of related
changes, an observer is called which updates the hidden attribute of the
entire related changes UI. Over time, the type of value resolved for two
of these types of related changes evolved, but this code didn't evolve
with them. This resulted in a bug where in certain cases the related
changes section would not appear when it should.

Bug: Issue 9925
Change-Id: If8e390d7561a114bcad69c9316d0c9f31a3cb3cb
This commit is contained in:
Logan Hanks
2018-11-07 09:23:40 -08:00
parent 89151b05e9
commit afe4b4ab24
2 changed files with 62 additions and 27 deletions

View File

@@ -290,14 +290,14 @@
_resultsChanged(related, submittedTogether, conflicts,
cherryPicks, sameTopic) {
const results = [
related,
submittedTogether,
related && related.changes,
submittedTogether && submittedTogether.changes,
conflicts,
cherryPicks,
sameTopic,
];
for (let i = 0; i < results.length; i++) {
if (results[i].length > 0) {
if (results[i] && results[i].length > 0) {
this.hidden = false;
this.fire('update', null, {bubbles: false});
return;

View File

@@ -382,7 +382,7 @@ limitations under the License.
true);
});
test('clear and empties', () => {
suite('hidden attribute and update event', () => {
const changes = [{
project: 'foo/bar',
change_id: 'Ideadbeef',
@@ -397,33 +397,68 @@ limitations under the License.
_current_revision_number: 1,
status: 'NEW',
}];
element._relatedResponse = {changes};
element._submittedTogether = {changes};
element._conflicts = changes;
element._cherryPicks = changes;
element._sameTopic = changes;
element.hidden = false;
element.clear();
assert.isTrue(element.hidden);
assert.equal(element._relatedResponse.changes.length, 0);
assert.equal(element._submittedTogether.changes.length, 0);
assert.equal(element._conflicts.length, 0);
assert.equal(element._cherryPicks.length, 0);
assert.equal(element._sameTopic.length, 0);
});
test('clear and empties', () => {
element._relatedResponse = {changes};
element._submittedTogether = {changes};
element._conflicts = changes;
element._cherryPicks = changes;
element._sameTopic = changes;
test('update fires', () => {
const updateHandler = sandbox.stub();
element.addEventListener('update', updateHandler);
element.hidden = false;
element.clear();
assert.isTrue(element.hidden);
assert.equal(element._relatedResponse.changes.length, 0);
assert.equal(element._submittedTogether.changes.length, 0);
assert.equal(element._conflicts.length, 0);
assert.equal(element._cherryPicks.length, 0);
assert.equal(element._sameTopic.length, 0);
});
element._resultsChanged([], [], [], [], []);
assert.isTrue(element.hidden);
assert.isFalse(updateHandler.called);
test('update fires', () => {
const updateHandler = sandbox.stub();
element.addEventListener('update', updateHandler);
element._resultsChanged([], [], [], [], ['test']);
assert.isFalse(element.hidden);
assert.isTrue(updateHandler.called);
element._resultsChanged({}, {}, [], [], []);
assert.isTrue(element.hidden);
assert.isFalse(updateHandler.called);
element._resultsChanged({}, {}, [], [], ['test']);
assert.isFalse(element.hidden);
assert.isTrue(updateHandler.called);
});
suite('hiding and unhiding', () => {
test('related response', () => {
assert.isTrue(element.hidden);
element._resultsChanged({changes}, {}, [], [], []);
assert.isFalse(element.hidden);
});
test('submitted together', () => {
assert.isTrue(element.hidden);
element._resultsChanged({}, {changes}, [], [], []);
assert.isFalse(element.hidden);
});
test('conflicts', () => {
assert.isTrue(element.hidden);
element._resultsChanged({}, {}, changes, [], []);
assert.isFalse(element.hidden);
});
test('cherrypicks', () => {
assert.isTrue(element.hidden);
element._resultsChanged({}, {}, [], changes, []);
assert.isFalse(element.hidden);
});
test('same topic', () => {
assert.isTrue(element.hidden);
element._resultsChanged({}, {}, [], [], changes);
assert.isFalse(element.hidden);
});
});
});
test('_computeChangeURL uses Gerrit.Nav', () => {