180 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!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-ssh-editor</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-ssh-editor.html">
 | 
						|
 | 
						|
<script>void(0);</script>
 | 
						|
 | 
						|
<test-fixture id="basic">
 | 
						|
  <template>
 | 
						|
    <gr-ssh-editor></gr-ssh-editor>
 | 
						|
  </template>
 | 
						|
</test-fixture>
 | 
						|
 | 
						|
<script>
 | 
						|
  suite('gr-ssh-editor tests', () => {
 | 
						|
    let element;
 | 
						|
    let keys;
 | 
						|
 | 
						|
    setup(done => {
 | 
						|
      keys = [{
 | 
						|
        seq: 1,
 | 
						|
        ssh_public_key: 'ssh-rsa <key 1> comment-one@machine-one',
 | 
						|
        encoded_key: '<key 1>',
 | 
						|
        algorithm: 'ssh-rsa',
 | 
						|
        comment: 'comment-one@machine-one',
 | 
						|
        valid: true,
 | 
						|
      }, {
 | 
						|
        seq: 2,
 | 
						|
        ssh_public_key: 'ssh-rsa <key 2> comment-two@machine-two',
 | 
						|
        encoded_key: '<key 2>',
 | 
						|
        algorithm: 'ssh-rsa',
 | 
						|
        comment: 'comment-two@machine-two',
 | 
						|
        valid: true,
 | 
						|
      }];
 | 
						|
 | 
						|
      stub('gr-rest-api-interface', {
 | 
						|
        getAccountSSHKeys() { return Promise.resolve(keys); },
 | 
						|
      });
 | 
						|
 | 
						|
      element = fixture('basic');
 | 
						|
 | 
						|
      element.loadData().then(() => { flush(done); });
 | 
						|
    });
 | 
						|
 | 
						|
    test('renders', () => {
 | 
						|
      const rows = Polymer.dom(element.root).querySelectorAll('tbody tr');
 | 
						|
 | 
						|
      assert.equal(rows.length, 2);
 | 
						|
 | 
						|
      let cells = rows[0].querySelectorAll('td');
 | 
						|
      assert.equal(cells[0].textContent, keys[0].comment);
 | 
						|
 | 
						|
      cells = rows[1].querySelectorAll('td');
 | 
						|
      assert.equal(cells[0].textContent, keys[1].comment);
 | 
						|
    });
 | 
						|
 | 
						|
    test('remove key', done => {
 | 
						|
      const lastKey = keys[1];
 | 
						|
 | 
						|
      const saveStub = sinon.stub(element.$.restAPI, 'deleteAccountSSHKey',
 | 
						|
          () => { return Promise.resolve(); });
 | 
						|
 | 
						|
      assert.equal(element._keysToRemove.length, 0);
 | 
						|
      assert.isFalse(element.hasUnsavedChanges);
 | 
						|
 | 
						|
      // Get the delete button for the last row.
 | 
						|
      const button = Polymer.dom(element.root).querySelector(
 | 
						|
          'tbody tr:last-of-type td:nth-child(4) gr-button');
 | 
						|
 | 
						|
      MockInteractions.tap(button);
 | 
						|
 | 
						|
      assert.equal(element._keys.length, 1);
 | 
						|
      assert.equal(element._keysToRemove.length, 1);
 | 
						|
      assert.equal(element._keysToRemove[0], lastKey);
 | 
						|
      assert.isTrue(element.hasUnsavedChanges);
 | 
						|
      assert.isFalse(saveStub.called);
 | 
						|
 | 
						|
      element.save().then(() => {
 | 
						|
        assert.isTrue(saveStub.called);
 | 
						|
        assert.equal(saveStub.lastCall.args[0], lastKey.seq);
 | 
						|
        assert.equal(element._keysToRemove.length, 0);
 | 
						|
        assert.isFalse(element.hasUnsavedChanges);
 | 
						|
        done();
 | 
						|
      });
 | 
						|
    });
 | 
						|
 | 
						|
    test('show key', () => {
 | 
						|
      const openSpy = sinon.spy(element.$.viewKeyOverlay, 'open');
 | 
						|
 | 
						|
      // Get the show button for the last row.
 | 
						|
      const button = Polymer.dom(element.root).querySelector(
 | 
						|
          'tbody tr:last-of-type td:nth-child(3) gr-button');
 | 
						|
 | 
						|
      MockInteractions.tap(button);
 | 
						|
 | 
						|
      assert.equal(element._keyToView, keys[1]);
 | 
						|
      assert.isTrue(openSpy.called);
 | 
						|
    });
 | 
						|
 | 
						|
    test('add key', done => {
 | 
						|
      const newKeyString = 'ssh-rsa <key 3> comment-three@machine-three';
 | 
						|
      const newKeyObject = {
 | 
						|
        seq: 3,
 | 
						|
        ssh_public_key: newKeyString,
 | 
						|
        encoded_key: '<key 3>',
 | 
						|
        algorithm: 'ssh-rsa',
 | 
						|
        comment: 'comment-three@machine-three',
 | 
						|
        valid: true,
 | 
						|
      };
 | 
						|
 | 
						|
      const addStub = sinon.stub(element.$.restAPI, 'addAccountSSHKey',
 | 
						|
          () => { return Promise.resolve(newKeyObject); });
 | 
						|
 | 
						|
      element._newKey = newKeyString;
 | 
						|
 | 
						|
      assert.isFalse(element.$.addButton.disabled);
 | 
						|
      assert.isFalse(element.$.newKey.disabled);
 | 
						|
 | 
						|
      element._handleAddKey().then(() => {
 | 
						|
        assert.isTrue(element.$.addButton.disabled);
 | 
						|
        assert.isFalse(element.$.newKey.disabled);
 | 
						|
        assert.equal(element._keys.length, 3);
 | 
						|
        done();
 | 
						|
      });
 | 
						|
 | 
						|
      assert.isTrue(element.$.addButton.disabled);
 | 
						|
      assert.isTrue(element.$.newKey.disabled);
 | 
						|
 | 
						|
      assert.isTrue(addStub.called);
 | 
						|
      assert.equal(addStub.lastCall.args[0], newKeyString);
 | 
						|
    });
 | 
						|
 | 
						|
    test('add invalid key', done => {
 | 
						|
      const newKeyString = 'not even close to valid';
 | 
						|
 | 
						|
      const addStub = sinon.stub(element.$.restAPI, 'addAccountSSHKey',
 | 
						|
          () => { return Promise.reject(); });
 | 
						|
 | 
						|
      element._newKey = newKeyString;
 | 
						|
 | 
						|
      assert.isFalse(element.$.addButton.disabled);
 | 
						|
      assert.isFalse(element.$.newKey.disabled);
 | 
						|
 | 
						|
      element._handleAddKey().then(() => {
 | 
						|
        assert.isFalse(element.$.addButton.disabled);
 | 
						|
        assert.isFalse(element.$.newKey.disabled);
 | 
						|
        assert.equal(element._keys.length, 2);
 | 
						|
        done();
 | 
						|
      });
 | 
						|
 | 
						|
      assert.isTrue(element.$.addButton.disabled);
 | 
						|
      assert.isTrue(element.$.newKey.disabled);
 | 
						|
 | 
						|
      assert.isTrue(addStub.called);
 | 
						|
      assert.equal(addStub.lastCall.args[0], newKeyString);
 | 
						|
    });
 | 
						|
  });
 | 
						|
</script>
 |