| <!DOCTYPE html> |
| <!-- |
| Copyright (C) 2016 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> |
| <title>gr-account-entry</title> |
| |
| <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> |
| <script src="../../../bower_components/web-component-tester/browser.js"></script> |
| <script src="../../../scripts/util.js"></script> |
| |
| <link rel="import" href="../../../bower_components/iron-test-helpers/iron-test-helpers.html"> |
| <link rel="import" href="gr-account-entry.html"> |
| |
| <script>void(0);</script> |
| |
| <test-fixture id="basic"> |
| <template> |
| <gr-account-entry></gr-account-entry> |
| </template> |
| </test-fixture> |
| |
| <script> |
| suite('gr-account-entry tests', function() { |
| var sandbox; |
| var _nextAccountId = 0; |
| var makeAccount = function(opt_status) { |
| var accountId = ++_nextAccountId; |
| return { |
| _account_id: accountId, |
| name: 'name ' + accountId, |
| email: 'email ' + accountId, |
| status: opt_status, |
| }; |
| }; |
| |
| var owner; |
| var existingReviewer1; |
| var existingReviewer2; |
| var suggestion1; |
| var suggestion2; |
| var suggestion3; |
| var element; |
| |
| setup(function() { |
| owner = makeAccount(); |
| existingReviewer1 = makeAccount(); |
| existingReviewer2 = makeAccount(); |
| suggestion1 = {account: makeAccount()}; |
| suggestion2 = {account: makeAccount()}; |
| suggestion3 = { |
| group: { |
| id: 'suggested group id', |
| name: 'suggested group', |
| }, |
| }; |
| |
| element = fixture('basic'); |
| element.change = { |
| owner: owner, |
| reviewers: { |
| CC: [existingReviewer1], |
| REVIEWER: [existingReviewer2], |
| }, |
| }; |
| sandbox = sinon.sandbox.create(); |
| }); |
| |
| teardown(function() { |
| sandbox.restore(); |
| }); |
| |
| suite('stubbed values for _getReviewerSuggestions', function() { |
| setup(function() { |
| stub('gr-rest-api-interface', { |
| getChangeSuggestedReviewers: function() { |
| var redundantSuggestion1 = {account: existingReviewer1}; |
| var redundantSuggestion2 = {account: existingReviewer2}; |
| var redundantSuggestion3 = {account: owner}; |
| return Promise.resolve([redundantSuggestion1, redundantSuggestion2, |
| redundantSuggestion3, suggestion1, suggestion2, suggestion3]); |
| }, |
| }); |
| }); |
| |
| test('_makeSuggestion formats account or group accordingly', function() { |
| var account = makeAccount(); |
| var suggestion = element._makeSuggestion({account: account}); |
| assert.deepEqual(suggestion, { |
| name: account.name + ' <' + account.email + '>', |
| value: {account: account}, |
| }); |
| |
| var group = {name: 'test'}; |
| suggestion = element._makeSuggestion({group: group}); |
| assert.deepEqual(suggestion, { |
| name: group.name + ' (group)', |
| value: {group: group}, |
| }); |
| |
| suggestion = element._makeSuggestion(account); |
| assert.deepEqual(suggestion, { |
| name: account.name + ' <' + account.email + '>', |
| value: {account: account, count: 1}, |
| }); |
| |
| account = makeAccount('OOO'); |
| |
| suggestion = element._makeSuggestion({account: account}); |
| assert.deepEqual(suggestion, { |
| name: account.name + ' <' + account.email + '> (OOO)', |
| value: {account: account}, |
| }); |
| |
| suggestion = element._makeSuggestion(account); |
| assert.deepEqual(suggestion, { |
| name: account.name + ' <' + account.email + '> (OOO)', |
| value: {account: account, count: 1}, |
| }); |
| }); |
| |
| test('_getReviewerSuggestions excludes owner+reviewers', function(done) { |
| element._getReviewerSuggestions().then(function(reviewers) { |
| // Default is no filtering. |
| assert.equal(reviewers.length, 6); |
| |
| // Set up filter that only accepts suggestion1. |
| var accountId = suggestion1.account._account_id; |
| element.filter = function(suggestion) { |
| return suggestion.account && |
| suggestion.account._account_id === accountId; |
| }; |
| |
| element._getReviewerSuggestions().then(function(reviewers) { |
| assert.deepEqual(reviewers, [element._makeSuggestion(suggestion1)]); |
| }).then(done); |
| }); |
| }); |
| }); |
| |
| test('allowAnyUser', function(done) { |
| var suggestReviewerStub = |
| sandbox.stub(element.$.restAPI, 'getChangeSuggestedReviewers') |
| .returns(Promise.resolve([])); |
| var suggestAccountStub = |
| sandbox.stub(element.$.restAPI, 'getSuggestedAccounts') |
| .returns(Promise.resolve([])); |
| |
| element._getReviewerSuggestions('').then(function() { |
| assert.isTrue(suggestReviewerStub.calledOnce); |
| assert.isFalse(suggestAccountStub.called); |
| element.allowAnyUser = true; |
| |
| element._getReviewerSuggestions('').then(function() { |
| assert.isTrue(suggestReviewerStub.calledOnce); |
| assert.isTrue(suggestAccountStub.calledOnce); |
| done(); |
| }); |
| }); |
| }); |
| }); |
| </script> |