Skip to content

Commit 391e64d

Browse files
committed
test: Adds tests for Fields
1 parent 1ee244b commit 391e64d

File tree

7 files changed

+119
-1
lines changed

7 files changed

+119
-1
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import React from "react";
2+
import { render } from "../../../test-utils";
3+
import BytesField from "../../../src/components/Fields/BytesField";
4+
5+
describe("BytesField", () => {
6+
it("renders readable bytes for number", () => {
7+
const { getByText } = render(<BytesField value={1024} />);
8+
expect(getByText(/1.02 KB/i)).toBeInTheDocument();
9+
});
10+
11+
it("renders readable bytes for string number", () => {
12+
const { getByText } = render(<BytesField value="2048" />);
13+
expect(getByText(/2.04 KB/i)).toBeInTheDocument();
14+
});
15+
16+
it("renders nothing for invalid value", () => {
17+
const { container } = render(<BytesField value={{}} />);
18+
expect(container.firstChild).toBeNull();
19+
});
20+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import React from "react";
2+
import { render } from "../../../test-utils";
3+
import DateField from "../../../src/components/Fields/DateField";
4+
5+
describe("DateField", () => {
6+
it("renders formatted date for string", () => {
7+
const date = new Date("2023-01-01T12:34:56Z").toISOString();
8+
const { getByText } = render(<DateField value={date} />);
9+
expect(getByText(/2023|01|12|34/i)).toBeInTheDocument();
10+
});
11+
12+
it("renders nothing for invalid value", () => {
13+
const { container } = render(<DateField value={{}} />);
14+
expect(container.firstChild).toBeNull();
15+
});
16+
});
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React from "react";
2+
import { render } from "../../../test-utils";
3+
import FallbackField from "../../../src/components/Fields/FallbackField";
4+
5+
describe("FallbackField", () => {
6+
it("renders dash for null/undefined", () => {
7+
const { getByText } = render(<FallbackField value={null} />);
8+
expect(getByText(//)).toBeInTheDocument();
9+
});
10+
11+
it("renders primitive values", () => {
12+
const { getByText } = render(<FallbackField value={42} />);
13+
expect(getByText("42")).toBeInTheDocument();
14+
expect(render(<FallbackField value="foo" />).getByText("foo")).toBeInTheDocument();
15+
// Boolean values are rendered as strings, but may not be found directly
16+
const { container } = render(<FallbackField value={true} />);
17+
expect(container.textContent).toContain("true");
18+
});
19+
20+
it("renders arrays recursively", () => {
21+
const { getAllByText } = render(<FallbackField value={[1, 2]} />);
22+
expect(getAllByText(/1|2/).length).toBeGreaterThan(1);
23+
});
24+
25+
it("renders objects as JSONTree", () => {
26+
const { getByText } = render(<FallbackField value={{ foo: "bar" }} />);
27+
expect(getByText(/foo/)).toBeInTheDocument();
28+
expect(getByText(/bar/)).toBeInTheDocument();
29+
});
30+
});
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import React from "react";
2+
import { render } from "../../../test-utils";
3+
import ImageField from "../../../src/components/Fields/ImageField";
4+
5+
describe("ImageField", () => {
6+
it("renders for string src", () => {
7+
const { container } = render(<ImageField value="/test.png" />);
8+
expect(container.querySelector("img")).toBeInTheDocument();
9+
});
10+
11+
it("renders for object src", () => {
12+
const { container } = render(<ImageField value={{ src: "/test2.png", alt: "desc" }} />);
13+
expect(container.querySelector("img")).toBeInTheDocument();
14+
});
15+
16+
it("renders nothing for invalid value", () => {
17+
const { container } = render(<ImageField value={42} />);
18+
expect(container.firstChild).toBeNull();
19+
});
20+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import React from "react";
2+
import { render } from "../../../test-utils";
3+
import RgbaField from "../../../src/components/Fields/RgbaField";
4+
5+
describe("RgbaField", () => {
6+
it("renders RGBA color", () => {
7+
const { getByText, container } = render(<RgbaField value={[255,0,0,1]} />);
8+
expect(getByText("[255,0,0,1]")).toBeInTheDocument();
9+
10+
});
11+
12+
it("renders nothing for invalid value", () => {
13+
const { container } = render(<RgbaField value={42} />);
14+
expect(container.firstChild).toBeNull();
15+
});
16+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import React from "react";
2+
import { render } from "../../../test-utils";
3+
import TableField from "../../../src/components/Fields/TableField";
4+
5+
describe("TableField", () => {
6+
it("renders table for object", () => {
7+
const { getByText } = render(<TableField value={{ foo: "bar" }} />);
8+
expect(getByText("foo")).toBeInTheDocument();
9+
expect(getByText("bar")).toBeInTheDocument();
10+
});
11+
12+
it("renders nothing for invalid value", () => {
13+
const { container } = render(<TableField value={42} />);
14+
expect(container.firstChild).toBeNull();
15+
});
16+
});

src/components/Fields/FallbackField.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export default function FallbackField({ value }: { value: Value }) {
1616
typeof value === "number" ||
1717
typeof value === "boolean"
1818
) {
19-
return <Text>{value}</Text>;
19+
return <Text>{String(value)}</Text>;
2020
}
2121
if (Array.isArray(value)) {
2222
return value.map((v, i) => (

0 commit comments

Comments
 (0)