summaryrefslogtreecommitdiffstats
path: root/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.html
diff options
context:
space:
mode:
Diffstat (limited to 'polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.html')
-rw-r--r--polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.html281
1 files changed, 211 insertions, 70 deletions
diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.html b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.html
index cb471d4393..01a3dc2dea 100644
--- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.html
+++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.html
@@ -20,8 +20,7 @@ limitations under the License.
<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<script src="../../../bower_components/web-component-tester/browser.js"></script>
-
-<link rel="import" href="../../../bower_components/iron-test-helpers/iron-test-helpers.html">
+<link rel="import" href="../../../test/common-test-setup.html"/>
<link rel="import" href="gr-settings-view.html">
<script>void(0);</script>
@@ -39,20 +38,20 @@ limitations under the License.
</test-fixture>
<script>
- suite('gr-settings-view tests', function() {
- var element;
- var account;
- var preferences;
- var diffPreferences;
- var config;
- var sandbox;
+ suite('gr-settings-view tests', () => {
+ let element;
+ let account;
+ let preferences;
+ let diffPreferences;
+ let config;
+ let sandbox;
function valueOf(title, fieldsetid) {
- var sections = element.$[fieldsetid].querySelectorAll('section');
- var titleEl;
- for (var i = 0; i < sections.length; i++) {
+ const sections = element.$[fieldsetid].querySelectorAll('section');
+ let titleEl;
+ for (let i = 0; i < sections.length; i++) {
titleEl = sections[i].querySelector('.title');
- if (titleEl.textContent === title) {
+ if (titleEl.textContent.trim() === title) {
return sections[i].querySelector('.value');
}
}
@@ -61,7 +60,7 @@ limitations under the License.
// Because deepEqual isn't behaving in Safari.
function assertMenusEqual(actual, expected) {
assert.equal(actual.length, expected.length);
- for (var i = 0; i < actual.length; i++) {
+ for (let i = 0; i < actual.length; i++) {
assert.equal(actual[i].name, expected[i].name);
assert.equal(actual[i].url, expected[i].url);
}
@@ -69,10 +68,10 @@ limitations under the License.
function stubAddAccountEmail(statusCode) {
return sandbox.stub(element.$.restAPI, 'addAccountEmail',
- function() { return Promise.resolve({status: statusCode}); });
+ () => { return Promise.resolve({status: statusCode}); });
}
- setup(function(done) {
+ setup(done => {
sandbox = sinon.sandbox.create();
account = {
_account_id: 123,
@@ -109,23 +108,23 @@ limitations under the License.
syntax_highlighting: true,
auto_hide_diff_table_header: true,
theme: 'DEFAULT',
- ignore_whitespace: 'IGNORE_NONE'
+ ignore_whitespace: 'IGNORE_NONE',
};
config = {auth: {editable_account_fields: []}};
stub('gr-rest-api-interface', {
- getLoggedIn: function() { return Promise.resolve(true); },
- getAccount: function() { return Promise.resolve(account); },
- getPreferences: function() { return Promise.resolve(preferences); },
- getDiffPreferences: function() {
+ getLoggedIn() { return Promise.resolve(true); },
+ getAccount() { return Promise.resolve(account); },
+ getPreferences() { return Promise.resolve(preferences); },
+ getDiffPreferences() {
return Promise.resolve(diffPreferences);
},
- getWatchedProjects: function() {
+ getWatchedProjects() {
return Promise.resolve([]);
},
- getAccountEmails: function() { return Promise.resolve(); },
- getConfig: function() { return Promise.resolve(config); },
- getAccountGroups: function() { return Promise.resolve([]); },
+ getAccountEmails() { return Promise.resolve(); },
+ getConfig() { return Promise.resolve(config); },
+ getAccountGroups() { return Promise.resolve([]); },
});
element = fixture('basic');
@@ -133,19 +132,19 @@ limitations under the License.
element._loadingPromise.then(done);
});
- teardown(function() {
+ teardown(() => {
sandbox.restore();
});
- test('calls the title-change event', function() {
- var titleChangedStub = sandbox.stub();
+ test('calls the title-change event', () => {
+ const titleChangedStub = sandbox.stub();
// Create a new view.
- var newElement = document.createElement('gr-settings-view');
+ const newElement = document.createElement('gr-settings-view');
newElement.addEventListener('title-change', titleChangedStub);
// Attach it to the fixture.
- var blank = fixture('blank');
+ const blank = fixture('blank');
blank.appendChild(newElement);
Polymer.dom.flush();
@@ -155,7 +154,7 @@ limitations under the License.
'Settings');
});
- test('user preferences', function(done) {
+ test('user preferences', done => {
// Rendered with the expected preferences selected.
assert.equal(valueOf('Changes per page', 'preferences')
.firstElementChild.bindValue, preferences.changes_per_page);
@@ -171,15 +170,23 @@ limitations under the License.
.firstElementChild.bindValue, preferences.diff_view);
assert.equal(valueOf('Expand inline diffs', 'preferences')
.firstElementChild.checked, false);
+ assert.equal(valueOf('Publish comments on push', 'preferences')
+ .firstElementChild.checked, false);
+ assert.equal(valueOf(
+ 'Set new changes to "work in progress" by default', 'preferences')
+ .firstElementChild.checked, false);
+ assert.equal(valueOf(
+ 'Insert Signed-off-by Footer For Inline Edit Changes', 'preferences')
+ .firstElementChild.checked, false);
assert.isFalse(element._prefsChanged);
assert.isFalse(element._menuChanged);
// Change the diff view element.
- var diffSelect = valueOf('Diff view', 'preferences').firstElementChild;
+ const diffSelect = valueOf('Diff view', 'preferences').firstElementChild;
diffSelect.bindValue = 'SIDE_BY_SIDE';
- var expandInlineDiffs =
+ const expandInlineDiffs =
valueOf('Expand inline diffs', 'preferences').firstElementChild;
diffSelect.fire('change');
@@ -189,23 +196,70 @@ limitations under the License.
assert.isFalse(element._menuChanged);
stub('gr-rest-api-interface', {
- savePreferences: function(prefs) {
+ savePreferences(prefs) {
assert.equal(prefs.diff_view, 'SIDE_BY_SIDE');
assertMenusEqual(prefs.my, preferences.my);
assert.equal(prefs.expand_inline_diffs, true);
return Promise.resolve();
- }
+ },
+ });
+
+ // Save the change.
+ element._handleSavePreferences().then(() => {
+ assert.isFalse(element._prefsChanged);
+ assert.isFalse(element._menuChanged);
+ done();
+ });
+ });
+
+ test('publish comments on push', done => {
+ const publishCommentsOnPush =
+ valueOf('Publish comments on push', 'preferences').firstElementChild;
+ MockInteractions.tap(publishCommentsOnPush);
+
+ assert.isFalse(element._menuChanged);
+ assert.isTrue(element._prefsChanged);
+
+ stub('gr-rest-api-interface', {
+ savePreferences(prefs) {
+ assert.equal(prefs.publish_comments_on_push, true);
+ return Promise.resolve();
+ },
+ });
+
+ // Save the change.
+ element._handleSavePreferences().then(() => {
+ assert.isFalse(element._prefsChanged);
+ assert.isFalse(element._menuChanged);
+ done();
+ });
+ });
+
+ test('set new changes work-in-progress', done => {
+ const newChangesWorkInProgress =
+ valueOf('Set new changes to "work in progress" by default',
+ 'preferences').firstElementChild;
+ MockInteractions.tap(newChangesWorkInProgress);
+
+ assert.isFalse(element._menuChanged);
+ assert.isTrue(element._prefsChanged);
+
+ stub('gr-rest-api-interface', {
+ savePreferences(prefs) {
+ assert.equal(prefs.work_in_progress_by_default, true);
+ return Promise.resolve();
+ },
});
// Save the change.
- element._handleSavePreferences().then(function() {
+ element._handleSavePreferences().then(() => {
assert.isFalse(element._prefsChanged);
assert.isFalse(element._menuChanged);
done();
});
});
- test('diff preferences', function(done) {
+ test('diff preferences', done => {
// Rendered with the expected preferences selected.
assert.equal(valueOf('Context', 'diffPreferences')
.firstElementChild.bindValue, diffPreferences.context);
@@ -224,7 +278,7 @@ limitations under the License.
assert.isFalse(element._diffPrefsChanged);
- var showTabsCheckbox = valueOf('Show tabs', 'diffPreferences')
+ const showTabsCheckbox = valueOf('Show tabs', 'diffPreferences')
.firstElementChild;
showTabsCheckbox.checked = false;
element._handleShowTabsChanged();
@@ -232,20 +286,20 @@ limitations under the License.
assert.isTrue(element._diffPrefsChanged);
stub('gr-rest-api-interface', {
- saveDiffPreferences: function(prefs) {
+ saveDiffPreferences(prefs) {
assert.equal(prefs.show_tabs, false);
return Promise.resolve();
- }
+ },
});
// Save the change.
- element._handleSaveDiffPreferences().then(function() {
+ element._handleSaveDiffPreferences().then(() => {
assert.isFalse(element._diffPrefsChanged);
done();
});
});
- test('columns input is hidden with fit to scsreen is selected', function() {
+ test('columns input is hidden with fit to scsreen is selected', () => {
assert.isFalse(element.$.columnsPref.hidden);
MockInteractions.tap(element.$.lineWrapping);
@@ -255,14 +309,14 @@ limitations under the License.
assert.isFalse(element.$.columnsPref.hidden);
});
- test('menu', function(done) {
+ test('menu', done => {
assert.isFalse(element._menuChanged);
assert.isFalse(element._prefsChanged);
assertMenusEqual(element._localMenu, preferences.my);
- var menu = element.$.menu.firstElementChild;
- var tableRows = Polymer.dom(menu.root).querySelectorAll('tbody tr');
+ const menu = element.$.menu.firstElementChild;
+ let tableRows = Polymer.dom(menu.root).querySelectorAll('tbody tr');
assert.equal(tableRows.length, preferences.my.length);
// Add a menu item:
@@ -276,13 +330,13 @@ limitations under the License.
assert.isFalse(element._prefsChanged);
stub('gr-rest-api-interface', {
- savePreferences: function(prefs) {
+ savePreferences(prefs) {
assertMenusEqual(prefs.my, element._localMenu);
return Promise.resolve();
- }
+ },
});
- element._handleSaveMenu().then(function() {
+ element._handleSaveMenu().then(() => {
assert.isFalse(element._menuChanged);
assert.isFalse(element._prefsChanged);
assertMenusEqual(element.prefs.my, element._localMenu);
@@ -290,7 +344,7 @@ limitations under the License.
});
});
- test('add email validation', function() {
+ test('add email validation', () => {
assert.isFalse(element._isNewEmailValid('invalid email'));
assert.isTrue(element._isNewEmailValid('vaguely@valid.email'));
@@ -302,8 +356,8 @@ limitations under the License.
element._computeAddEmailButtonEnabled('vaguely@valid.email', false));
});
- test('add email does not save invalid', function() {
- var addEmailStub = stubAddAccountEmail(201);
+ test('add email does not save invalid', () => {
+ const addEmailStub = stubAddAccountEmail(201);
assert.isFalse(element._addingEmail);
assert.isNotOk(element._lastSentVerificationEmail);
@@ -318,8 +372,8 @@ limitations under the License.
assert.isFalse(addEmailStub.called);
});
- test('add email does save valid', function(done) {
- var addEmailStub = stubAddAccountEmail(201);
+ test('add email does save valid', done => {
+ const addEmailStub = stubAddAccountEmail(201);
assert.isFalse(element._addingEmail);
assert.isNotOk(element._lastSentVerificationEmail);
@@ -331,14 +385,14 @@ limitations under the License.
assert.isTrue(addEmailStub.called);
assert.isTrue(addEmailStub.called);
- addEmailStub.lastCall.returnValue.then(function() {
+ addEmailStub.lastCall.returnValue.then(() => {
assert.isOk(element._lastSentVerificationEmail);
done();
});
});
- test('add email does not set last-email if error', function(done) {
- var addEmailStub = stubAddAccountEmail(500);
+ test('add email does not set last-email if error', done => {
+ const addEmailStub = stubAddAccountEmail(500);
assert.isNotOk(element._lastSentVerificationEmail);
element._newEmail = 'valid@email.com';
@@ -346,58 +400,145 @@ limitations under the License.
element._handleAddEmailButton();
assert.isTrue(addEmailStub.called);
- addEmailStub.lastCall.returnValue.then(function() {
+ addEmailStub.lastCall.returnValue.then(() => {
assert.isNotOk(element._lastSentVerificationEmail);
done();
});
});
- test('emails are loaded without emailToken', function() {
+ test('emails are loaded without emailToken', () => {
sandbox.stub(element.$.emailEditor, 'loadData');
element.params = {};
element.attached();
assert.isTrue(element.$.emailEditor.loadData.calledOnce);
});
- suite('when email verification token is provided', function() {
- var resolveConfirm;
+ test('_handleSaveChangeTable', () => {
+ let newColumns = ['Owner', 'Project', 'Branch'];
+ element._localChangeTableColumns = newColumns.slice(0);
+ element._showNumber = false;
+ const cloneStub = sandbox.stub(element, '_cloneChangeTableColumns');
+ element._handleSaveChangeTable();
+ assert.isTrue(cloneStub.calledOnce);
+ assert.deepEqual(element.prefs.change_table, newColumns);
+ assert.isNotOk(element.prefs.legacycid_in_change_table);
+
+ newColumns = ['Size'];
+ element._localChangeTableColumns = newColumns;
+ element._showNumber = true;
+ element._handleSaveChangeTable();
+ assert.isTrue(cloneStub.calledTwice);
+ assert.deepEqual(element.prefs.change_table, newColumns);
+ assert.isTrue(element.prefs.legacycid_in_change_table);
+ });
- setup(function() {
+ test('reset menu item back to default', done => {
+ const originalMenu = {
+ my: [
+ {url: '/first/url', name: 'first name', target: '_blank'},
+ {url: '/second/url', name: 'second name', target: '_blank'},
+ {url: '/third/url', name: 'third name', target: '_blank'},
+ ],
+ };
+
+ stub('gr-rest-api-interface', {
+ getDefaultPreferences() { return Promise.resolve(originalMenu); },
+ });
+
+ const updatedMenu = [
+ {url: '/first/url', name: 'first name', target: '_blank'},
+ {url: '/second/url', name: 'second name', target: '_blank'},
+ {url: '/third/url', name: 'third name', target: '_blank'},
+ {url: '/fourth/url', name: 'fourth name', target: '_blank'},
+ ];
+
+ element.set('_localMenu', updatedMenu);
+
+ element._handleResetMenuButton().then(() => {
+ assertMenusEqual(element._localMenu, originalMenu.my);
+ done();
+ });
+ });
+
+ test('test that reset button is called', () => {
+ const overlayOpen = sandbox.stub(element, '_handleResetMenuButton');
+
+ MockInteractions.tap(element.$.resetMenu);
+
+ assert.isTrue(overlayOpen.called);
+ });
+
+ suite('_getFilterDocsLink', () => {
+ test('with http: docs base URL', () => {
+ const base = 'http://example.com/';
+ const result = element._getFilterDocsLink(base);
+ assert.equal(result, 'http://example.com/user-notify.html');
+ });
+
+ test('with http: docs base URL without slash', () => {
+ const base = 'http://example.com';
+ const result = element._getFilterDocsLink(base);
+ assert.equal(result, 'http://example.com/user-notify.html');
+ });
+
+ test('with https: docs base URL', () => {
+ const base = 'https://example.com/';
+ const result = element._getFilterDocsLink(base);
+ assert.equal(result, 'https://example.com/user-notify.html');
+ });
+
+ test('without docs base URL', () => {
+ const result = element._getFilterDocsLink(null);
+ assert.equal(result, 'https://gerrit-review.googlesource.com/' +
+ 'Documentation/user-notify.html');
+ });
+
+ test('ignores non HTTP links', () => {
+ const base = 'javascript://alert("evil");';
+ const result = element._getFilterDocsLink(base);
+ assert.equal(result, 'https://gerrit-review.googlesource.com/' +
+ 'Documentation/user-notify.html');
+ });
+ });
+
+ suite('when email verification token is provided', () => {
+ let resolveConfirm;
+
+ setup(() => {
sandbox.stub(element.$.emailEditor, 'loadData');
- sandbox.stub(element.$.restAPI, 'confirmEmail', function() {
- return new Promise(function(resolve) { resolveConfirm = resolve; });
+ sandbox.stub(element.$.restAPI, 'confirmEmail', () => {
+ return new Promise(resolve => { resolveConfirm = resolve; });
});
element.params = {emailToken: 'foo'};
element.attached();
});
- test('it is used to confirm email via rest API', function() {
+ test('it is used to confirm email via rest API', () => {
assert.isTrue(element.$.restAPI.confirmEmail.calledOnce);
assert.isTrue(element.$.restAPI.confirmEmail.calledWith('foo'));
});
- test('emails are not loaded initially', function() {
+ test('emails are not loaded initially', () => {
assert.isFalse(element.$.emailEditor.loadData.called);
});
- test('user emails are loaded after email confirmed', function(done) {
- element._loadingPromise.then(function() {
+ test('user emails are loaded after email confirmed', done => {
+ element._loadingPromise.then(() => {
assert.isTrue(element.$.emailEditor.loadData.calledOnce);
done();
});
resolveConfirm();
});
- test('show-alert is fired when email is confirmed', function(done) {
+ test('show-alert is fired when email is confirmed', done => {
sandbox.spy(element, 'fire');
- element._loadingPromise.then(function() {
+ element._loadingPromise.then(() => {
assert.isTrue(
element.fire.calledWith('show-alert', {message: 'bar'}));
done();
});
resolveConfirm('bar');
});
-
});
});
</script>