<!DOCTYPE html>
<!--
@license
Copyright (C) 2017 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-plugin-host</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="gr-plugin-host.html">

<script>void(0);</script>

<test-fixture id="basic">
  <template>
    <gr-plugin-host></gr-plugin-host>
  </template>
</test-fixture>

<script>
  suite('gr-plugin-host tests', () => {
    let element;
    let sandbox;
    let url;

    setup(() => {
      element = fixture('basic');
      sandbox = sinon.sandbox.create();
      sandbox.stub(document.body, 'appendChild');
      sandbox.stub(element, 'importHref');
      url = window.location.origin;
    });

    teardown(() => {
      sandbox.restore();
    });

    test('counts plugins', () => {
      sandbox.stub(Gerrit, '_setPluginsCount');
      element.config = {
        plugin: {
          html_resource_paths: ['plugins/foo/bar', 'plugins/baz'],
          js_resource_paths: ['plugins/42'],
        },
      };
      assert.isTrue(Gerrit._setPluginsCount.calledWith(3));
    });

    test('imports relative html plugins from config', () => {
      sandbox.stub(Gerrit, '_pluginInstallError');
      element.config = {
        plugin: {html_resource_paths: ['foo/bar', 'baz']},
      };
      assert.equal(element.importHref.firstCall.args[0], url + '/foo/bar');
      assert.isTrue(element.importHref.firstCall.args[3]);

      assert.equal(element.importHref.secondCall.args[0], url + '/baz');
      assert.isTrue(element.importHref.secondCall.args[3]);

      assert.equal(Gerrit._pluginInstallError.callCount, 0);
      element.importHref.firstCall.args[2]();
      assert.equal(Gerrit._pluginInstallError.callCount, 1);
      element.importHref.secondCall.args[2]();
      assert.equal(Gerrit._pluginInstallError.callCount, 2);
    });

    test('imports relative html plugins from config with a base url', () => {
      sandbox.stub(Gerrit, '_pluginInstallError');
      sandbox.stub(element, 'getBaseUrl').returns('/the-base');
      element.config = {
        plugin: {html_resource_paths: ['foo/bar', 'baz']}};
      assert.equal(element.importHref.firstCall.args[0],
          url + '/the-base/foo/bar');
      assert.isTrue(element.importHref.firstCall.args[3]);

      assert.equal(element.importHref.secondCall.args[0],
          url + '/the-base/baz');
      assert.isTrue(element.importHref.secondCall.args[3]);
      assert.equal(Gerrit._pluginInstallError.callCount, 0);
      element.importHref.firstCall.args[2]();
      assert.equal(Gerrit._pluginInstallError.callCount, 1);
      element.importHref.secondCall.args[2]();
      assert.equal(Gerrit._pluginInstallError.callCount, 2);
    });

    test('importHref is not called with null callback functions', () => {
      const plugins = ['path/to/plugin'];
      element._importHtmlPlugins(plugins);
      assert.isTrue(element.importHref.calledOnce);
      assert.isFunction(element.importHref.lastCall.args[1]);
      assert.isFunction(element.importHref.lastCall.args[2]);
    });

    test('imports absolute html plugins from config', () => {
      sandbox.stub(Gerrit, '_pluginInstallError');
      element.config = {
        plugin: {
          html_resource_paths: [
            'http://example.com/foo/bar',
            'https://example.com/baz',
          ],
        },
      };
      assert.equal(element.importHref.firstCall.args[0],
          'http://example.com/foo/bar');
      assert.isTrue(element.importHref.firstCall.args[3]);

      assert.equal(element.importHref.secondCall.args[0],
          'https://example.com/baz');
      assert.isTrue(element.importHref.secondCall.args[3]);
      assert.equal(Gerrit._pluginInstallError.callCount, 0);
      element.importHref.firstCall.args[2]();
      assert.equal(Gerrit._pluginInstallError.callCount, 1);
      element.importHref.secondCall.args[2]();
      assert.equal(Gerrit._pluginInstallError.callCount, 2);
    });

    test('adds js plugins from config to the body', () => {
      element.config = {plugin: {js_resource_paths: ['foo/bar', 'baz']}};
      assert.isTrue(document.body.appendChild.calledTwice);
    });

    test('imports relative js plugins from config', () => {
      sandbox.stub(element, '_createScriptTag');
      element.config = {plugin: {js_resource_paths: ['foo/bar', 'baz']}};
      assert.isTrue(element._createScriptTag.calledWith(url + '/foo/bar'));
      assert.isTrue(element._createScriptTag.calledWith(url + '/baz'));
    });

    test('imports relative html plugins from config with a base url', () => {
      sandbox.stub(element, '_createScriptTag');
      sandbox.stub(element, 'getBaseUrl').returns('/the-base');
      element.config = {plugin: {js_resource_paths: ['foo/bar', 'baz']}};
      assert.isTrue(element._createScriptTag.calledWith(
          url + '/the-base/foo/bar'));
      assert.isTrue(element._createScriptTag.calledWith(
          url + '/the-base/baz'));
    });

    test('imports absolute html plugins from config', () => {
      sandbox.stub(element, '_createScriptTag');
      element.config = {
        plugin: {
          js_resource_paths: [
            'http://example.com/foo/bar',
            'https://example.com/baz',
          ],
        },
      };
      assert.isTrue(element._createScriptTag.calledWith(
          'http://example.com/foo/bar'));
      assert.isTrue(element._createScriptTag.calledWith(
          'https://example.com/baz'));
    });

    test('default theme is loaded with html plugins', () => {
      sandbox.stub(Gerrit, '_pluginInstallError');
      element.config = {
        default_theme: '/oof',
        plugin: {
          html_resource_paths: ['some'],
        },
      };
      assert.equal(element.importHref.firstCall.args[0], url + '/oof');
      assert.isFalse(element.importHref.firstCall.args[3]);

      assert.equal(element.importHref.secondCall.args[0], url + '/some');
      assert.isTrue(element.importHref.secondCall.args[3]);
      assert.equal(Gerrit._pluginInstallError.callCount, 0);
      element.importHref.firstCall.args[2]();
      assert.equal(Gerrit._pluginInstallError.callCount, 1);
      element.importHref.secondCall.args[2]();
      assert.equal(Gerrit._pluginInstallError.callCount, 2);
    });

    test('default theme is loaded with html plugins', () => {
      sandbox.stub(Gerrit, '_setPluginsPending');
      element.config = {
        default_theme: '/oof',
        plugin: {},
      };
      assert.isTrue(Gerrit._setPluginsPending.calledWith([url + '/oof']));
    });

    test('skips default theme loading if preloaded', () => {
      sandbox.stub(Gerrit, '_isPluginPreloaded')
          .withArgs('preloaded:gerrit-theme').returns(true);
      sandbox.stub(Gerrit, '_setPluginsPending');
      element.config = {
        default_theme: '/oof',
        plugin: {},
      };
      assert.isFalse(element.importHref.calledWith(url + '/oof'));
    });

    test('skips preloaded plugins', () => {
      sandbox.stub(Gerrit, '_isPluginPreloaded')
          .withArgs(url + '/plugins/foo/bar').returns(true)
          .withArgs(url + '/plugins/42').returns(true);
      sandbox.stub(Gerrit, '_setPluginsCount');
      sandbox.stub(Gerrit, '_setPluginsPending');
      sandbox.stub(element, '_createScriptTag');
      element.config = {
        plugin: {
          html_resource_paths: ['plugins/foo/bar', 'plugins/baz'],
          js_resource_paths: ['plugins/42'],
        },
      };
      assert.isTrue(
          Gerrit._setPluginsPending.calledWith([url + '/plugins/baz']));
      assert.equal(element._createScriptTag.callCount, 0);
      assert.isTrue(element.importHref.calledWith(url + '/plugins/baz'));
    });
  });
</script>
