feat: 🎸 add doc-url helper and doc-link component

This commit is contained in:
Randall Morey committed 2020-10-05 16:49:35 -04:00
1 parent d13e711626
commit c4e52cb2e7
4 files changed
+69

No files matched your search

@@ -0,0 +1,8 @@
<a
class="doc-link"
href={{doc-url @doc}}
target="_blank"
rel="noreferrer noopener"
title={{t "actions.get-topic-help"}}>
<Rose::Icon @name="help-circle-outline" @size={{@iconSize}} />
</a>
+18
View File
@@ -0,0 +1,18 @@
import { helper } from '@ember/component/helper';
import { get } from '@ember/object';
import { assert } from '@ember/debug';
import config from '../config/environment';
export default helper(function docUrl(params/*, hash*/) {
const baseURL = config.documentation.baseURL;
const docKey = params[0];
const configuredPath = get(config.documentation, docKey);
if (docKey) {
assert(`
Documentation for "${docKey}" could not be found. Please ensure that
this key exists under "documentation" in your app config.
`, configuredPath);
}
const path = configuredPath || '';
return `${baseURL}${path}`;
});
@@ -0,0 +1,14 @@
import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { render, find } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
module('Integration | Component | doc-link', function(hooks) {
setupRenderingTest(hooks);
test('it renders', async function(assert) {
assert.expect(1);
await render(hbs`<DocLink @doc="topics.account" @iconSize="large" />`);
assert.ok(find('.doc-link .rose-icon.large'));
});
});
@@ -0,0 +1,29 @@
import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
import config from 'ember-get-config';
module('Integration | Helper | doc-url', function(hooks) {
setupRenderingTest(hooks);
test('it renders a URL generated from the documentation config', async function(assert) {
assert.expect(3);
const baseURL = config.documentation.baseURL;
const path = config.documentation.topics.account;
await render(hbs`{{doc-url 'topics.account'}}`);
assert.ok(baseURL);
assert.ok(path);
assert.equal(this.element.textContent.trim(), `${baseURL}${path}`);
});
test('it throws an error if the specified documentation path cannot be found', async function(assert) {
assert.expect(2);
const helper = this.owner.lookup('helper:doc-url');
assert.ok(helper.compute(['topics.account']), 'Specified document exists.')
assert.throws(() => {
helper.compute(['no.such.doc']);
}, 'Specified documentation was not found, so the helper threw an error.');
});
});