Files
gerrit/polygerrit-ui/app/elements/gr-app_test.html
Wyatt Allen 414659c792 Serve PolyGerrit index.html from a Soy template
Rather than serving a static file, serve the PolyGerrit index HTML
document from a Soy template. In this way, the path to load PG
dependencies can be safely parameterized in two ways:

* If Gerrit is not running on the root of the domain (e.g. listening on
  https://example.com/my-gerrit/) the path component of the Canonical
  Web URL is used to load PG dependencies.

  Instead of /elements/gr-app.js off the root of the domain it uses
  /my-gerrit/elements/gr-app.js

* If the PolyGerrit static resources are to be served from a CDN rather
  than the Gerrit WAR, the `cdnPath` config in the [gerrit] section can
  be used.

  For example, if the server config says ...

  [gerrit]
    cdnPath = http://my-cdn.com/pg/version/123

  ... then it uses the following style of path for PG dependencies.

  http://my-cdn.com/pg/version/123/my-gerrit/elements/gr-app.js

  If a CDN-path is configured, it supersedes subdirectories appearing
  in the Canonical-Web-URL for this purpose.

Feature: Issue 5845
Change-Id: I2b2d704fe33c90ea2f2a2183fc79897642a48175
2017-04-03 09:29:52 -07:00

111 lines
3.2 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-app</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="gr-app.html">
<script>void(0);</script>
<test-fixture id="basic">
<template>
<gr-app id="app" canonical-path="/abc/def/ghi"></gr-app>
</template>
</test-fixture>
<script>
suite('gr-app tests', function() {
var sandbox;
var element;
setup(function(done) {
sandbox = sinon.sandbox.create();
stub('gr-reporting', {
appStarted: sandbox.stub(),
});
stub('gr-account-dropdown', {
_getTopContent: sinon.stub(),
});
stub('gr-rest-api-interface', {
getAccount: function() { return Promise.resolve({}); },
getAccountCapabilities: function() { return Promise.resolve({}); },
getConfig: function() {
return Promise.resolve({
gerrit: {web_uis: ['GWT', 'POLYGERRIT']},
plugin: {js_resource_paths: []},
});
},
getVersion: function() { return Promise.resolve(42); },
});
element = fixture('basic');
flush(done);
});
teardown(function() {
sandbox.restore();
});
test('reporting', function() {
assert.isTrue(element.$.reporting.appStarted.calledOnce);
});
test('location change updates gwt footer', function(done) {
element._path = '/test/path';
flush(function() {
var gwtLink = element.$$('#gwtLink');
assert.equal(gwtLink.href,
'http://' + location.host + '/?polygerrit=0#/test/path');
done();
});
});
test('_handleLocationChange handles hashes', function(done) {
var curLocation = {
pathname: '/c/1/1/testfile.txt',
hash: '#2',
host: location.host,
};
sandbox.stub(element, '_handleSearchPageChange');
element._handleLocationChange({detail: curLocation});
flush(function() {
var gwtLink = element.$$('#gwtLink');
assert.equal(gwtLink.href,
'http://' + location.host + '/?polygerrit=0#/c/1/1/testfile.txt@2');
done();
});
});
test('passes config to gr-plugin-host', function(done) {
element.$.restAPI.getConfig.lastCall.returnValue.then(function(config) {
var pluginConfig = config.plugin;
assert.deepEqual(element.$.plugins.config, pluginConfig);
done();
});
});
test('canonical-path', function() {
assert.equal(Gerrit.CANONICAL_PATH, '/abc/def/ghi');
});
});
</script>