Skip to content

Commit ec91659

Browse files
authored
Merge pull request #112 from bustle/link-test
Add test coverage for rendering links and doing event delegation
2 parents 002beca + 8c649fa commit ec91659

2 files changed

Lines changed: 42 additions & 1 deletion

File tree

tests/helpers/mobiledoc.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,15 @@ export function createMobiledocWithCard(cardName) {
3939
sections: [[10, 0]],
4040
};
4141
}
42+
43+
export function createMobiledocWithLink(url, text) {
44+
const display = typeof text === 'undefined' ? url : text;
45+
return {
46+
version: MOBILEDOC_VERSION,
47+
markups: [['A', ['href', url]]],
48+
atoms: [],
49+
cards: [],
50+
// paragraph with a text marker that opens the link markup (markup index 0)
51+
sections: [[1, 'P', [[0, [0], 1, display]]]],
52+
};
53+
}

tests/integration/components/render-mobiledoc-test.gts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { setupRenderingTest } from 'ember-qunit';
33
import Component from '@glimmer/component';
44
import { tracked } from '@glimmer/tracking';
55
import { run } from '@ember/runloop';
6-
import { render, type TestContext } from '@ember/test-helpers';
6+
import { render, click, type TestContext } from '@ember/test-helpers';
7+
import { on } from '@ember/modifier';
78
import RenderMobiledoc from 'ember-mobiledoc-dom-renderer/components/render-mobiledoc';
89
import DestroyNotifyingRenderer from 'dummy/components/destroy-notifying-renderer';
910
import NameChangingRenderer from 'dummy/components/name-changing-renderer';
@@ -16,6 +17,7 @@ import {
1617
createMobiledocWithStrongMarkup,
1718
createMobiledocWithCard,
1819
createMobiledocWithAtom,
20+
createMobiledocWithLink,
1921
} from '../../helpers/mobiledoc';
2022

2123
module('Integration | Component | render-mobiledoc', function (hooks) {
@@ -635,4 +637,31 @@ module('Integration | Component | render-mobiledoc', function (hooks) {
635637
</template>,
636638
);
637639
});
640+
641+
test('it renders links and forwards splattributes click', async function (this: TestContext, assert) {
642+
let clicked = false;
643+
this.set('handleClick', (ev) => {
644+
ev.preventDefault();
645+
clicked = true;
646+
});
647+
this.set(
648+
'mobiledoc',
649+
createMobiledocWithLink('https://example.com', 'Example'),
650+
);
651+
const context = this;
652+
await render(
653+
<template>
654+
<RenderMobiledoc
655+
@mobiledoc={{context.mobiledoc}}
656+
{{on 'click' context.handleClick}}
657+
/>
658+
</template>,
659+
);
660+
661+
assert.dom('a').exists('renders an anchor element');
662+
assert.dom('a').hasAttribute('href', 'https://example.com');
663+
664+
await click('a');
665+
assert.ok(clicked, 'click handler invoked via splattributes');
666+
});
638667
});

0 commit comments

Comments
 (0)