Skip to content

Commit 1d4329f

Browse files
committed
test(calculate-position): add test for smart verticalPosition
1 parent f71c7bd commit 1d4329f

File tree

2 files changed

+67
-3
lines changed

2 files changed

+67
-3
lines changed

ember-basic-dropdown/src/utils/calculate-position.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export type CalculatePosition = (
3636
options: CalculatePositionOptions,
3737
) => CalculatePositionResult;
3838

39-
export type GetViewDataResult = {
39+
type GetViewDataResult = {
4040
scroll: { left: number; top: number };
4141
triggerLeft: number;
4242
triggerTop: number;
@@ -48,12 +48,12 @@ export type GetViewDataResult = {
4848
viewportBottom: number;
4949
};
5050

51-
export type GetViewData = (
51+
type GetViewData = (
5252
trigger: Element,
5353
content: HTMLElement,
5454
) => GetViewDataResult;
5555

56-
export const getViewData: GetViewData = (trigger, content) => {
56+
const getViewData: GetViewData = (trigger, content) => {
5757
const scroll = {
5858
left: window.scrollX,
5959
top: window.scrollY,
@@ -68,6 +68,7 @@ export const getViewData: GetViewData = (trigger, content) => {
6868
content.getBoundingClientRect();
6969
const viewportWidth = document.body.clientWidth || window.innerWidth;
7070
const viewportBottom = scroll.top + window.innerHeight;
71+
7172
return {
7273
scroll,
7374
// The properties top and left of the trigger client rectangle need to be absolute to

test-app/tests/integration/components/basic-dropdown-test.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1657,4 +1657,67 @@ module('Integration | Component | basic-dropdown', function (hooks) {
16571657
.dom(shadowRoot?.querySelector('#dropdown-is-opened'))
16581658
.doesNotExist('The dropdown is closed again');
16591659
});
1660+
1661+
test<ExtendedTestContext>('It adds the proper class above to trigger and content when it receives `renderInPlace={{true}}` and @verticalPosition="auto"', async function (assert) {
1662+
assert.expect(2);
1663+
1664+
await render(hbs`
1665+
<div style="position: absolute; bottom: 0">
1666+
<BasicDropdown @renderInPlace={{true}} @verticalPosition="auto" as |dropdown|>
1667+
<dropdown.Trigger>Press me</dropdown.Trigger>
1668+
<dropdown.Content><h3>Content of the dropdown</h3></dropdown.Content>
1669+
</BasicDropdown>
1670+
</div>
1671+
`);
1672+
1673+
await click(
1674+
getRootNode(this.element).querySelector(
1675+
'.ember-basic-dropdown-trigger',
1676+
) as HTMLElement,
1677+
);
1678+
1679+
assert
1680+
.dom('.ember-basic-dropdown-trigger', getRootNode(this.element))
1681+
.hasClass(
1682+
'ember-basic-dropdown-trigger--above',
1683+
'The proper class has been added',
1684+
);
1685+
assert
1686+
.dom('.ember-basic-dropdown-content', getRootNode(this.element))
1687+
.hasClass(
1688+
'ember-basic-dropdown-content--above',
1689+
'The proper class has been added',
1690+
);
1691+
});
1692+
1693+
test<ExtendedTestContext>('It adds the proper class below to trigger and content when it receives `renderInPlace={{true}}` and @verticalPosition="auto"', async function (assert) {
1694+
assert.expect(2);
1695+
1696+
await render(hbs`
1697+
<div style="position: absolute; top: 0">
1698+
<BasicDropdown @renderInPlace={{true}} @verticalPosition="auto" as |dropdown|>
1699+
<dropdown.Trigger>Press me</dropdown.Trigger>
1700+
<dropdown.Content><h3>Content of the dropdown</h3></dropdown.Content>
1701+
</BasicDropdown>
1702+
</div>
1703+
`);
1704+
1705+
await click(
1706+
getRootNode(this.element).querySelector(
1707+
'.ember-basic-dropdown-trigger',
1708+
) as HTMLElement,
1709+
);
1710+
assert
1711+
.dom('.ember-basic-dropdown-trigger', getRootNode(this.element))
1712+
.hasClass(
1713+
'ember-basic-dropdown-trigger--below',
1714+
'The proper class has been added',
1715+
);
1716+
assert
1717+
.dom('.ember-basic-dropdown-content', getRootNode(this.element))
1718+
.hasClass(
1719+
'ember-basic-dropdown-content--below',
1720+
'The proper class has been added',
1721+
);
1722+
});
16601723
});

0 commit comments

Comments
 (0)