| <!DOCTYPE html> | 
 | <!-- | 
 | Copyright (C) 2015 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-reply-dialog</title> | 
 |  | 
 | <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> | 
 | <script src="../../../bower_components/web-component-tester/browser.js"></script> | 
 |  | 
 | <link rel="import" href="../../../test/common-test-setup.html"/> | 
 | <link rel="import" href="../../plugins/gr-plugin-host/gr-plugin-host.html"> | 
 | <link rel="import" href="gr-reply-dialog.html"> | 
 |  | 
 | <script>void(0);</script> | 
 |  | 
 | <test-fixture id="basic"> | 
 |   <template> | 
 |     <gr-reply-dialog></gr-reply-dialog> | 
 |   </template> | 
 | </test-fixture> | 
 |  | 
 | <test-fixture id="plugin-host"> | 
 |   <template> | 
 |     <gr-plugin-host></gr-plugin-host> | 
 |   </template> | 
 | </test-fixture> | 
 |  | 
 | <script> | 
 |   suite('gr-reply-dialog tests', () => { | 
 |     let element; | 
 |     let changeNum; | 
 |     let patchNum; | 
 |  | 
 |     let sandbox; | 
 |  | 
 |     const setupElement = element => { | 
 |       element.change = { | 
 |         _number: changeNum, | 
 |         labels: { | 
 |           'Verified': { | 
 |             values: { | 
 |               '-1': 'Fails', | 
 |               ' 0': 'No score', | 
 |               '+1': 'Verified', | 
 |             }, | 
 |             default_value: 0, | 
 |           }, | 
 |           'Code-Review': { | 
 |             values: { | 
 |               '-2': 'Do not submit', | 
 |               '-1': 'I would prefer that you didn\'t submit this', | 
 |               ' 0': 'No score', | 
 |               '+1': 'Looks good to me, but someone else must approve', | 
 |               '+2': 'Looks good to me, approved', | 
 |             }, | 
 |             all: [{_account_id: 42, value: 0}], | 
 |             default_value: 0, | 
 |           }, | 
 |         }, | 
 |       }; | 
 |       element.patchNum = patchNum; | 
 |       element.permittedLabels = { | 
 |         'Code-Review': [ | 
 |           '-1', | 
 |           ' 0', | 
 |           '+1', | 
 |         ], | 
 |         'Verified': [ | 
 |           '-1', | 
 |           ' 0', | 
 |           '+1', | 
 |         ], | 
 |       }; | 
 |       element.serverConfig = {note_db_enabled: true}; | 
 |       sandbox.stub(element, 'fetchIsLatestKnown', () => Promise.resolve(true)); | 
 |     }; | 
 |  | 
 |     setup(() => { | 
 |       sandbox = sinon.sandbox.create(); | 
 |  | 
 |       changeNum = 42; | 
 |       patchNum = 1; | 
 |  | 
 |       stub('gr-rest-api-interface', { | 
 |         getConfig() { return Promise.resolve({}); }, | 
 |         getAccount() { return Promise.resolve({_account_id: 42}); }, | 
 |       }); | 
 |  | 
 |       element = fixture('basic'); | 
 |       setupElement(element); | 
 |  | 
 |       // Allow the elements created by dom-repeat to be stamped. | 
 |       flushAsynchronousOperations(); | 
 |     }); | 
 |  | 
 |     teardown(() => { | 
 |       Gerrit._pluginsPending = -1; | 
 |       Gerrit._allPluginsPromise = undefined; | 
 |       sandbox.restore(); | 
 |     }); | 
 |  | 
 |     test('send blocked when invalid email is supplied to ccs', () => { | 
 |       const sendStub = sandbox.stub(element, 'send').returns(Promise.resolve()); | 
 |       // Stub the below function to avoid side effects from the send promise | 
 |       // resolving. | 
 |       sandbox.stub(element, '_purgeReviewersPendingRemove'); | 
 |  | 
 |       element.$$('#ccs').$.entry.setText('test'); | 
 |       MockInteractions.tap(element.$$('gr-button.send')); | 
 |       assert.isFalse(sendStub.called); | 
 |       flushAsynchronousOperations(); | 
 |  | 
 |       element.$$('#ccs').$.entry.setText('test@test.test'); | 
 |       MockInteractions.tap(element.$$('gr-button.send')); | 
 |       assert.isTrue(sendStub.called); | 
 |     }); | 
 |  | 
 |     test('lgtm plugin', done => { | 
 |       const pluginHost = fixture('plugin-host'); | 
 |       pluginHost.config = { | 
 |         plugin: { | 
 |           js_resource_paths: [], | 
 |           html_resource_paths: [ | 
 |             new URL('test/plugin.html', window.location.href).toString(), | 
 |           ], | 
 |         }, | 
 |       }; | 
 |       element = fixture('basic'); | 
 |       setupElement(element); | 
 |       const importSpy = | 
 |           sandbox.spy(element.$$('gr-endpoint-decorator'), '_import'); | 
 |       Gerrit.awaitPluginsLoaded().then(() => { | 
 |         Promise.all(importSpy.returnValues).then(() => { | 
 |           flush(() => { | 
 |             const textarea = element.$.textarea.getNativeTextarea(); | 
 |             textarea.value = 'LGTM'; | 
 |             textarea.dispatchEvent(new CustomEvent('input', {bubbles: true})); | 
 |             const labelScoreRows = Polymer.dom(element.$.labelScores.root) | 
 |                 .querySelector('gr-label-score-row[name="Code-Review"]'); | 
 |             const selectedBtn = Polymer.dom(labelScoreRows.root) | 
 |                 .querySelector('gr-button[value="+1"].iron-selected'); | 
 |             assert.isOk(selectedBtn); | 
 |             done(); | 
 |           }); | 
 |         }); | 
 |       }); | 
 |     }); | 
 |   }); | 
 | </script> |