Skip to content

Commit 8ae62b4

Browse files
author
Said Shah
committed
More refactoring and tests
1 parent ebf1ab2 commit 8ae62b4

File tree

2 files changed

+46
-14
lines changed

2 files changed

+46
-14
lines changed

src/molecules/accessible-list/accessible-list.test.tsx

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import React from "react";
1+
import React, { Component } from "react";
22
import faker from "faker";
3-
import { render, fireEvent } from "@testing-library/react";
3+
import { render, fireEvent, screen } from "@testing-library/react";
44
import { AccessibleList } from "./accessible-list";
55
import { KeyboardKeys } from "../../constants/keyboard-keys";
66

@@ -40,22 +40,48 @@ describe("AccessibleList", () => {
4040
expect(isChecked).toBeTrue();
4141
});
4242

43-
test("when down arrow pressed, calls setCurrent method", () => {
43+
test("when invalid react element, does not render in list", () => {
4444
// Arrange
4545
const buttonText1 = faker.random.word();
4646
const buttonText2 = faker.random.word();
4747

4848
// Act
49-
const { getByText } = render(
49+
const { container } = render(
5050
<AccessibleList focusFirstItem={true}>
5151
<button>{buttonText1}</button>
52+
{null}
53+
{undefined}
5254
<button>{buttonText2}</button>
5355
</AccessibleList>
5456
);
57+
const buttons = container.getElementsByTagName("button");
58+
59+
// Assert
60+
expect(buttons).toHaveLength(2);
61+
});
62+
63+
it("when onClick set, calls handler upon click", async () => {
64+
// Arrange
65+
let isChecked = false;
66+
const handleClick = () => {
67+
isChecked = true;
68+
};
69+
const buttonText1 = faker.random.word();
70+
const buttonText2 = faker.random.words();
71+
72+
// Act
73+
const { getByText } = render(
74+
<AccessibleList focusFirstItem={true}>
75+
<button onClick={handleClick}>{buttonText1}</button>
76+
<button onClick={handleClick}>{buttonText2}</button>
77+
</AccessibleList>
78+
);
79+
5580
fireEvent.keyDown(getByText(buttonText1), {
5681
key: KeyboardKeys.DownArrow,
5782
});
5883

5984
// Assert
85+
expect(isChecked).toBeTrue();
6086
});
6187
});

src/molecules/accessible-list/accessible-list.tsx

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,16 +86,22 @@ const AccessibleList: React.FunctionComponent<AccessibleListProps> = (
8686
return child;
8787
}
8888

89-
return React.cloneElement(child, {
90-
...child.props,
91-
onClick: () => {
92-
if (child.props.onClick != null) {
93-
child.props.onClick();
94-
}
95-
},
96-
onKeyDown: handleKeyDown,
97-
ref: (el: HTMLElement) => (refArray[validElementIndex++] = el),
98-
});
89+
const renderedChild = renderChild(child, validElementIndex);
90+
validElementIndex++;
91+
return renderedChild;
92+
});
93+
};
94+
95+
const renderChild = (child: React.ReactElement, index: number) => {
96+
return React.cloneElement(child, {
97+
...child.props,
98+
onClick: () => {
99+
if (child.props.onClick != null) {
100+
child.props.onClick();
101+
}
102+
},
103+
onKeyDown: handleKeyDown,
104+
ref: (el: HTMLElement) => (refArray[index] = el),
99105
});
100106
};
101107

0 commit comments

Comments
 (0)