Skip to content

Commit 65f463c

Browse files
committed
[bugfix] Fixes helper API docs and adds acceptance tests
This PR fixes the helper API docs, which were being removed by the DocsCompiler because it didn't check to see if they existed when removing empty modules. It also add some acceptance tests and ember-classy-page-object to organize test helpers.
1 parent 9a42e80 commit 65f463c

File tree

10 files changed

+196
-34
lines changed

10 files changed

+196
-34
lines changed

addon/components/api/x-params/template.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
</thead> --}}
1212
<tbody>
1313
{{#each params as |param|}}
14-
<tr>
14+
<tr data-test-item-param>
1515
<td><span class="item-params__param-name">{{param.name}}</span></td>
1616
<td><span class="item-params__param-type">{{param.type}}</span></td>
1717
<td>{{param.description}}</td>

addon/components/api/x-sections/template.hbs

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,43 @@
11
{{#each-in sections as |section items|}}
22
{{#if items}}
3-
<section class="item-section">
4-
<h2>{{capitalize section}}</h2>
3+
<section data-test-api-section class="item-section">
4+
<h2 data-test-section-header={{section}}>{{capitalize section}}</h2>
55

66
{{#each items as |item|}}
7-
{{#if (or item.isClass item.isComponent)}}
8-
<h3 id={{item.name}} class="item-section__class-header">
9-
{{#link-to 'docs.api.item' (concat 'root/' item.id)}}
10-
{{#if (eq item.exportType 'default')}}
11-
<span class="item-section__default-label">Default</span>
12-
{{/if}}
13-
{{item.name}}
14-
{{/link-to}}
15-
</h3>
7+
<div data-test-item>
8+
{{#if (or item.isClass item.isComponent)}}
9+
<h3 id={{item.name}} data-test-item-header class="item-section__class-header">
10+
{{#link-to 'docs.api.item' (concat 'root/' item.id)}}
11+
{{#if (eq item.exportType 'default')}}
12+
<span class="item-section__default-label">Default</span>
13+
{{/if}}
14+
{{item.name}}
15+
{{/link-to}}
16+
</h3>
1617

17-
{{{item.description}}}
18-
{{else}}
19-
<h3 id={{item.name}} class="item-section__item-header">
20-
<a href="#{{item.name}}">
21-
{{#if (eq item.exportType 'default')}}
22-
<span class="item-section__default-label">Default</span>
23-
{{/if}}
18+
{{{item.description}}}
19+
{{else}}
20+
<h3 id={{item.name}} data-test-item-header class="item-section__item-header">
21+
<a href="#{{item.name}}">
22+
{{#if (eq item.exportType 'default')}}
23+
<span class="item-section__default-label">Default</span>
24+
{{/if}}
2425

25-
{{type-signature item}}
26-
</a>
27-
</h3>
26+
{{type-signature item}}
27+
</a>
28+
</h3>
2829

29-
{{#if item.exportType}}
30-
{{api/x-import-path item=item}}
31-
{{/if}}
30+
{{#if item.exportType}}
31+
{{api/x-import-path data-test-import-path=true item=item}}
32+
{{/if}}
3233

33-
{{{item.description}}}
34+
<p data-test-item-description>
35+
{{{item.description}}}
36+
</p>
3437

35-
{{api/x-params params=item.params}}
36-
{{/if}}
38+
{{api/x-params data-test-item-params=true params=item.params}}
39+
{{/if}}
40+
</div>
3741
{{/each}}
3842
</section>
3943
{{/if}}

lib/broccoli/docs-compiler.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ function removeEmptyModules(modules) {
5757
module.classes.length === 0
5858
&& module.components.length === 0
5959
&& module.functions.length === 0
60+
&& module.helpers.length === 0
6061
&& module.variables.length === 0
6162
);
6263
});

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,9 @@
7272
"babel-eslint": "^8.2.2",
7373
"broccoli-asset-rev": "^2.6.0",
7474
"common-tags": "^1.7.2",
75+
"ember-classy-page-object": "^0.4.6",
7576
"ember-cli": "~2.18.1",
76-
"ember-cli-addon-docs-esdoc": "^0.1.0",
77+
"ember-cli-addon-docs-esdoc": "^0.1.1",
7778
"ember-cli-addon-docs-yuidoc": "^0.1.1",
7879
"ember-cli-dependency-checker": "^2.1.0",
7980
"ember-cli-deploy": "^1.0.2",
@@ -90,6 +91,7 @@
9091
"ember-disable-prototype-extensions": "^1.1.3",
9192
"ember-export-application-global": "^2.0.0",
9293
"ember-load-initializers": "^1.0.0",
94+
"ember-maybe-import-regenerator-for-testing": "^1.0.0",
9395
"ember-resolver": "^4.5.0",
9496
"ember-source": "~2.18.0",
9597
"ember-test-selectors": "^0.3.8",
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/** @documenter esdoc */
2+
3+
import { helper } from '@ember/component/helper';
4+
5+
/**
6+
returns the absolute value of a number
7+
8+
@param {number} [number] the passed number
9+
@return {number}
10+
*/
11+
export function esdocHelper([number]) {
12+
return Math.abs(number);
13+
}
14+
15+
export default helper(esdocHelper);
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/** @documenter yuidoc */
2+
3+
import { helper } from '@ember/component/helper';
4+
5+
/**
6+
returns the absolute value of a number
7+
8+
@function yuidocHelper
9+
@param {number} [number] the passed number
10+
@return {number}
11+
*/
12+
export function yuidocHelper([number]) {
13+
return Math.abs(number);
14+
}
15+
16+
export default helper(yuidocHelper);

tests/acceptance/docs-route-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ test('the docs route renders', function(assert) {
1111
});
1212
});
1313

14-
// Todo: Bring this test back once we finish up the API docs pages
1514
test('I can visit an autogenerated docs route', function(assert) {
1615
visit('/docs');
1716
click('[data-test-id="nav-item"]:contains({{docs-hero}})');
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { module, test } from 'qunit';
2+
import { setupApplicationTest } from 'ember-qunit';
3+
import { currentURL, visit } from '@ember/test-helpers';
4+
5+
import modulePage from '../../../pages/api/module';
6+
7+
module('Acceptance | API | helpers', function(hooks) {
8+
setupApplicationTest(hooks);
9+
10+
for (let documenter of ['esdoc', 'yuidoc']) {
11+
let helperName = `${documenter}Helper`;
12+
let kebabName = `${documenter}-helper`;
13+
14+
test('{{esdoc-helper}}', async function(assert) {
15+
await visit('/sandbox');
16+
await modulePage.navItems.findOne({ text: `{{${kebabName}}}` }).click();
17+
18+
assert.equal(currentURL(), `/sandbox/api/helpers/${kebabName}`, 'correct url');
19+
20+
let helpersSection = modulePage.sections.findOne({ header: 'Helpers' });
21+
22+
assert.ok(helpersSection.isPresent, 'Renders the helpers section');
23+
24+
let helperItem = helpersSection.items.findOne(i => i.header.includes(helperName));
25+
26+
assert.ok(helperItem.isPresent, 'Renders the helper item');
27+
28+
assert.equal(
29+
helperItem.header,
30+
`${helperName}(number: number): number`,
31+
'renders the type signature of the helper correctly'
32+
);
33+
34+
assert.equal(
35+
helperItem.importPath,
36+
`import { ${helperName} } from 'ember-cli-addon-docsapp/helpers/${kebabName}';`,
37+
'renders the import path correctly'
38+
);
39+
40+
assert.equal(helperItem.params.length, 1, 'renders the item parameter');
41+
});
42+
}
43+
});
44+
45+

tests/pages/api/module.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import PageObject, { collection, text } from 'ember-classy-page-object';
2+
3+
const ModulePage = PageObject.extend({
4+
navItems: collection({ scope: '[data-test-id="nav-item"]' }),
5+
6+
sections: collection({
7+
scope: '[data-test-api-section]',
8+
9+
header: text('[data-test-section-header]'),
10+
11+
items: collection({
12+
scope: '[data-test-item]',
13+
14+
header: text('[data-test-item-header]'),
15+
importPath: text('[data-test-import-path]'),
16+
description: text('[data-test-item-description]'),
17+
18+
params: collection({
19+
scope: '[data-test-item-params] [data-test-item-param]'
20+
})
21+
})
22+
})
23+
});
24+
25+
export default ModulePage.create();

yarn.lock

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1940,6 +1940,10 @@ caseless@~0.12.0:
19401940
version "0.12.0"
19411941
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
19421942

1943+
ceibo@~2.0.0:
1944+
version "2.0.0"
1945+
resolved "https://registry.yarnpkg.com/ceibo/-/ceibo-2.0.0.tgz#9a61eb054a91c09934588d4e45d9dd2c3bf04eee"
1946+
19431947
center-align@^0.1.1:
19441948
version "0.1.3"
19451949
resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
@@ -2735,9 +2739,17 @@ ember-app-scheduler@^0.2.0:
27352739
dependencies:
27362740
ember-cli-babel "^6.3.0"
27372741

2738-
ember-cli-addon-docs-esdoc@^0.1.0:
2739-
version "0.1.0"
2740-
resolved "https://registry.yarnpkg.com/ember-cli-addon-docs-esdoc/-/ember-cli-addon-docs-esdoc-0.1.0.tgz#9f8420f2eb05fd651567cc49e02a491e6abe485b"
2742+
ember-classy-page-object@^0.4.6:
2743+
version "0.4.6"
2744+
resolved "https://registry.yarnpkg.com/ember-classy-page-object/-/ember-classy-page-object-0.4.6.tgz#7c1434806e7bedc9c6a60d4759e865439f67d685"
2745+
dependencies:
2746+
broccoli-funnel "^2.0.1"
2747+
ember-cli-babel "^6.6.0"
2748+
ember-cli-page-object "1.13.0-alpha.1"
2749+
2750+
ember-cli-addon-docs-esdoc@^0.1.1:
2751+
version "0.1.1"
2752+
resolved "https://registry.yarnpkg.com/ember-cli-addon-docs-esdoc/-/ember-cli-addon-docs-esdoc-0.1.1.tgz#860ed79b2226dcc16fef2641350f9d5e3dcb6ae3"
27412753
dependencies:
27422754
broccoli-caching-writer "^3.0.3"
27432755
ember-cli-babel "^6.6.0"
@@ -2977,6 +2989,26 @@ ember-cli-normalize-entity-name@^1.0.0:
29772989
dependencies:
29782990
silent-error "^1.0.0"
29792991

2992+
ember-cli-page-object@1.13.0-alpha.1:
2993+
version "1.13.0-alpha.1"
2994+
resolved "https://registry.yarnpkg.com/ember-cli-page-object/-/ember-cli-page-object-1.13.0-alpha.1.tgz#f5b80b9c19001cdedc62c65be84ef06591f38487"
2995+
dependencies:
2996+
ceibo "~2.0.0"
2997+
ember-cli-babel "^6.6.0"
2998+
ember-cli-get-component-path-option "^1.0.0"
2999+
ember-cli-is-package-missing "^1.0.0"
3000+
ember-cli-node-assets "^0.2.2"
3001+
ember-cli-normalize-entity-name "^1.0.0"
3002+
ember-cli-path-utils "^1.0.0"
3003+
ember-cli-string-utils "^1.0.0"
3004+
ember-cli-test-info "^1.0.0"
3005+
ember-cli-valid-component-name "^1.0.0"
3006+
ember-cli-version-checker "^1.2.0"
3007+
ember-native-dom-helpers "^0.5.3"
3008+
ember-test-helpers "^0.6.3"
3009+
jquery "^3.2.1"
3010+
rsvp "^3.2.1"
3011+
29803012
ember-cli-path-utils@^1.0.0:
29813013
version "1.0.0"
29823014
resolved "https://registry.yarnpkg.com/ember-cli-path-utils/-/ember-cli-path-utils-1.0.0.tgz#4e39af8b55301cddc5017739b77a804fba2071ed"
@@ -3062,7 +3094,7 @@ ember-cli-valid-component-name@^1.0.0:
30623094
dependencies:
30633095
silent-error "^1.0.0"
30643096

3065-
ember-cli-version-checker@^1.0.2:
3097+
ember-cli-version-checker@^1.0.2, ember-cli-version-checker@^1.2.0:
30663098
version "1.3.1"
30673099
resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-1.3.1.tgz#0bc2d134c830142da64bf9627a0eded10b61ae72"
30683100
dependencies:
@@ -3302,6 +3334,14 @@ ember-load-initializers@^1.0.0:
33023334
dependencies:
33033335
ember-cli-babel "^6.0.0-beta.7"
33043336

3337+
ember-maybe-import-regenerator-for-testing@^1.0.0:
3338+
version "1.0.0"
3339+
resolved "https://registry.yarnpkg.com/ember-maybe-import-regenerator-for-testing/-/ember-maybe-import-regenerator-for-testing-1.0.0.tgz#894b8089c5b3067c920b492c81233603852d5c2f"
3340+
dependencies:
3341+
broccoli-funnel "^1.0.1"
3342+
ember-cli-babel "^6.6.0"
3343+
regenerator-runtime "^0.9.5"
3344+
33053345
ember-modal-dialog@^2.4.1:
33063346
version "2.4.2"
33073347
resolved "https://registry.yarnpkg.com/ember-modal-dialog/-/ember-modal-dialog-2.4.2.tgz#51d0748fee3c14552616f390e8290dbbe4a1870a"
@@ -3312,6 +3352,13 @@ ember-modal-dialog@^2.4.1:
33123352
ember-ignore-children-helper "^1.0.0"
33133353
ember-wormhole "^0.5.1"
33143354

3355+
ember-native-dom-helpers@^0.5.3:
3356+
version "0.5.10"
3357+
resolved "https://registry.yarnpkg.com/ember-native-dom-helpers/-/ember-native-dom-helpers-0.5.10.tgz#9c7172e4ddfa5dd86830c46a936e2f8eca3e5896"
3358+
dependencies:
3359+
broccoli-funnel "^1.1.0"
3360+
ember-cli-babel "^6.6.0"
3361+
33153362
ember-qunit@^3.3.2:
33163363
version "3.3.2"
33173364
resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-3.3.2.tgz#cb48e9deaffa3b4c90983f28c5cf8590894c8ea3"
@@ -3406,6 +3453,10 @@ ember-svg-jar@^0.12.0:
34063453
mkdirp "^0.5.1"
34073454
path-posix "^1.0.0"
34083455

3456+
ember-test-helpers@^0.6.3:
3457+
version "0.6.3"
3458+
resolved "https://registry.yarnpkg.com/ember-test-helpers/-/ember-test-helpers-0.6.3.tgz#f864cdf6f4e75f3f8768d6537785b5ab6e82d907"
3459+
34093460
ember-test-selectors@^0.3.8:
34103461
version "0.3.8"
34113462
resolved "https://registry.yarnpkg.com/ember-test-selectors/-/ember-test-selectors-0.3.8.tgz#1e8ae3e78c64bacc4bbfe87f9973c85805699db2"
@@ -7025,6 +7076,10 @@ regenerator-runtime@^0.11.0:
70257076
version "0.11.1"
70267077
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
70277078

7079+
regenerator-runtime@^0.9.5:
7080+
version "0.9.6"
7081+
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029"
7082+
70287083
regenerator-transform@^0.10.0:
70297084
version "0.10.1"
70307085
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"

0 commit comments

Comments
 (0)