| <!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-download-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="../../../bower_components/iron-test-helpers/iron-test-helpers.html"> |
| <link rel="import" href="gr-download-dialog.html"> |
| |
| <script>void(0);</script> |
| |
| <test-fixture id="basic"> |
| <template> |
| <gr-download-dialog></gr-download-dialog> |
| </template> |
| </test-fixture> |
| |
| <test-fixture id="loggedIn"> |
| <template> |
| <gr-download-dialog logged-in></gr-download-dialog> |
| </template> |
| </test-fixture> |
| |
| <script> |
| function getChangeObject() { |
| return { |
| current_revision: '34685798fe548b6d17d1e8e5edc43a26d055cc72', |
| revisions: { |
| '34685798fe548b6d17d1e8e5edc43a26d055cc72': { |
| _number: 1, |
| fetch: { |
| repo: { |
| commands: { |
| repo: 'repo download test-project 5/1' |
| } |
| }, |
| ssh: { |
| commands: { |
| 'Checkout': |
| 'git fetch ' + |
| 'ssh://andybons@localhost:29418/test-project ' + |
| 'refs/changes/05/5/1 && git checkout FETCH_HEAD', |
| 'Cherry Pick': |
| 'git fetch ' + |
| 'ssh://andybons@localhost:29418/test-project ' + |
| 'refs/changes/05/5/1 && git cherry-pick FETCH_HEAD', |
| 'Format Patch': |
| 'git fetch ' + |
| 'ssh://andybons@localhost:29418/test-project ' + |
| 'refs/changes/05/5/1 ' + |
| '&& git format-patch -1 --stdout FETCH_HEAD', |
| 'Pull': |
| 'git pull ' + |
| 'ssh://andybons@localhost:29418/test-project ' + |
| 'refs/changes/05/5/1' |
| } |
| }, |
| http: { |
| commands: { |
| 'Checkout': |
| 'git fetch ' + |
| 'http://andybons@localhost:8080/a/test-project ' + |
| 'refs/changes/05/5/1 && git checkout FETCH_HEAD', |
| 'Cherry Pick': |
| 'git fetch ' + |
| 'http://andybons@localhost:8080/a/test-project ' + |
| 'refs/changes/05/5/1 && git cherry-pick FETCH_HEAD', |
| 'Format Patch': |
| 'git fetch ' + |
| 'http://andybons@localhost:8080/a/test-project ' + |
| 'refs/changes/05/5/1 && ' + |
| 'git format-patch -1 --stdout FETCH_HEAD', |
| 'Pull': |
| 'git pull ' + |
| 'http://andybons@localhost:8080/a/test-project ' + |
| 'refs/changes/05/5/1' |
| } |
| } |
| } |
| } |
| } |
| }; |
| } |
| |
| function getChangeObjectNoFetch() { |
| return { |
| current_revision: '34685798fe548b6d17d1e8e5edc43a26d055cc72', |
| revisions: { |
| '34685798fe548b6d17d1e8e5edc43a26d055cc72': { |
| _number: 1, |
| fetch: {}, |
| } |
| } |
| }; |
| } |
| |
| suite('gr-download-dialog tests with no fetch options', function() { |
| var element; |
| |
| setup(function() { |
| element = fixture('basic'); |
| element.change = getChangeObjectNoFetch(); |
| element.patchNum = 1; |
| element.config = { |
| schemes: { |
| 'anonymous http': {}, |
| http: {}, |
| repo: {}, |
| ssh: {}, |
| }, |
| archives: ['tgz', 'tar', 'tbz2', 'txz'], |
| }; |
| }); |
| |
| test('focuses on first download link if no copy links', function() { |
| flushAsynchronousOperations(); |
| var focusStub = sinon.stub(element.$.download, 'focus'); |
| element.focus(); |
| assert.isTrue(focusStub.called); |
| focusStub.restore(); |
| }); |
| }); |
| |
| suite('gr-download-dialog tests', function() { |
| var element; |
| |
| setup(function() { |
| element = fixture('basic'); |
| element.change = getChangeObject(); |
| element.patchNum = 1; |
| element.config = { |
| schemes: { |
| 'anonymous http': {}, |
| http: {}, |
| repo: {}, |
| ssh: {}, |
| }, |
| archives: ['tgz', 'tar', 'tbz2', 'txz'], |
| }; |
| }); |
| |
| test('focuses on first copy link', function() { |
| flushAsynchronousOperations(); |
| var focusStub = sinon.stub(element.$$('.copyToClipboard'), 'focus'); |
| element.focus(); |
| flushAsynchronousOperations(); |
| assert.isTrue(focusStub.called); |
| focusStub.restore(); |
| }); |
| |
| test('copy to clipboard', function() { |
| flushAsynchronousOperations(); |
| var clipboardSpy = sinon.spy(element, '_copyToClipboard'); |
| var copyBtn = element.$$('.copyToClipboard'); |
| MockInteractions.tap(copyBtn); |
| assert.isTrue(clipboardSpy.called); |
| }); |
| |
| test('element visibility', function() { |
| assert.isFalse(element.$$('ul').hasAttribute('hidden')); |
| assert.isFalse(element.$$('main').hasAttribute('hidden')); |
| assert.isFalse(element.$$('.archivesContainer').hasAttribute('hidden')); |
| |
| element.set('config.archives', []); |
| assert.isTrue(element.$$('.archivesContainer').hasAttribute('hidden')); |
| }); |
| |
| test('computed fields', function() { |
| assert.equal(element._computeArchiveDownloadLink( |
| {_number: 123}, 2, 'tgz'), |
| '/changes/123/revisions/2/archive?format=tgz'); |
| }); |
| |
| test('close event', function(done) { |
| element.addEventListener('close', function() { |
| done(); |
| }); |
| MockInteractions.tap(element.$$('.closeButtonContainer gr-button')); |
| }); |
| |
| test('tab selection', function() { |
| flushAsynchronousOperations(); |
| var el = element.$$('[data-scheme="http"]').parentElement; |
| assert.isTrue(el.hasAttribute('selected')); |
| ['repo', 'ssh'].forEach(function(scheme) { |
| var el = element.$$('[data-scheme="' + scheme + '"]').parentElement; |
| assert.isFalse(el.hasAttribute('selected')); |
| }); |
| |
| MockInteractions.tap(element.$$('[data-scheme="ssh"]')); |
| el = element.$$('[data-scheme="ssh"]').parentElement; |
| assert.isTrue(el.hasAttribute('selected')); |
| ['http', 'repo'].forEach(function(scheme) { |
| var el = element.$$('[data-scheme="' + scheme + '"]').parentElement; |
| assert.isFalse(el.hasAttribute('selected')); |
| }); |
| }); |
| |
| test('loads scheme from preferences w/o initial login', function(done) { |
| stub('gr-rest-api-interface', { |
| getPreferences: function() { |
| return Promise.resolve({download_scheme: 'repo'}); |
| }, |
| }); |
| |
| element.loggedIn = true; |
| |
| assert.isTrue(element.$.restAPI.getPreferences.called); |
| element.$.restAPI.getPreferences.lastCall.returnValue.then(function() { |
| assert.equal(element._selectedScheme, 'repo'); |
| done(); |
| }); |
| }); |
| }); |
| |
| suite('gr-download-dialog tests', function() { |
| var element; |
| |
| setup(function() { |
| stub('gr-rest-api-interface', { |
| getPreferences: function() { |
| return Promise.resolve({download_scheme: 'repo'}); |
| }, |
| }); |
| |
| element = fixture('loggedIn'); |
| element.change = getChangeObject(); |
| element.patchNum = 1; |
| element.config = { |
| schemes: { |
| 'anonymous http': {}, |
| http: {}, |
| repo: {}, |
| ssh: {}, |
| }, |
| archives: ['tgz', 'tar', 'tbz2', 'txz'], |
| }; |
| }); |
| |
| test('loads scheme from preferences', function(done) { |
| element.$.restAPI.getPreferences.lastCall.returnValue.then(function() { |
| assert.equal(element._selectedScheme, 'repo'); |
| done(); |
| }); |
| }); |
| |
| test('saves scheme to preferences', function() { |
| var savePrefsStub = sinon.stub(element.$.restAPI, 'savePreferences', |
| function() { return Promise.resolve(); }); |
| |
| Polymer.dom.flush(); |
| |
| var firstSchemeButton = element.$$('li gr-button[data-scheme]'); |
| |
| MockInteractions.tap(firstSchemeButton); |
| |
| assert.isTrue(savePrefsStub.called); |
| assert.equal(savePrefsStub.lastCall.args[0].download_scheme, |
| firstSchemeButton.getAttribute('data-scheme')); |
| }); |
| }); |
| |
| test('normalize scheme from preferences', function(done) { |
| stub('gr-rest-api-interface', { |
| getPreferences: function() { |
| return Promise.resolve({download_scheme: 'REPO'}); |
| }, |
| }); |
| element = fixture('loggedIn'); |
| element.change = getChangeObject(); |
| element.patchNum = 1; |
| element.config = { |
| schemes: {'anonymous http': {}, http: {}, repo: {}, ssh: {}}, |
| archives: ['tgz', 'tar', 'tbz2', 'txz'], |
| }; |
| element.$.restAPI.getPreferences.lastCall.returnValue.then(function() { |
| assert.equal(element._selectedScheme, 'repo'); |
| done(); |
| }); |
| }); |
| </script> |