Skip to content

Commit 33d9b39

Browse files
committed
add storybook example and jest tests
1 parent e38ce5c commit 33d9b39

File tree

2 files changed

+125
-0
lines changed

2 files changed

+125
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React from "react";
2+
import { Meta, StoryFn } from "@storybook/react";
3+
4+
import { Markdown, StringPreviewContentBlobToggler } from "../../../index";
5+
6+
const config = {
7+
title: "CMEM/ContentBlobToggler/StringPreview",
8+
component: StringPreviewContentBlobToggler,
9+
} as Meta<typeof StringPreviewContentBlobToggler>;
10+
export default config;
11+
12+
const Template: StoryFn<typeof StringPreviewContentBlobToggler> = (args) => (
13+
<StringPreviewContentBlobToggler {...args} />
14+
);
15+
16+
const initialTeststring =
17+
"A library for GUI elements.\nIn order to create graphical user interfaces, please have look at the documentation at [Github](https://github.com/eccenca/gui-elements).";
18+
19+
export const Default = Template.bind({});
20+
Default.args = {
21+
content: initialTeststring,
22+
fullviewContent: <Markdown htmlContentBlockProps={{ large: true }}>{initialTeststring}</Markdown>,
23+
previewMaxLength: 64,
24+
renderPreviewAsMarkdown: true,
25+
toggleExtendText: "show more",
26+
toggleReduceText: "show less",
27+
};
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import React from "react";
2+
import { render, RenderResult } from "@testing-library/react";
3+
4+
import "@testing-library/jest-dom";
5+
6+
import {
7+
StringPreviewContentBlobToggler,
8+
StringPreviewContentBlobTogglerProps,
9+
} from "../StringPreviewContentBlobToggler";
10+
11+
import { Default as StringPreviewContentBlobTogglerStory } from "./../stories/StringPreviewContentBlobToggler.stories";
12+
13+
describe("StringPreviewContentBlobToggler", () => {
14+
const textMustExist = (queryByText: RenderResult["queryByText"], text: string) => {
15+
expect(queryByText(text, { exact: false })).not.toBeNull();
16+
};
17+
const textMustNotExist = (queryByText: RenderResult["queryByText"], text: string) => {
18+
expect(queryByText(text, { exact: false })).toBeNull();
19+
};
20+
it("should cut preview and show toggler to extend", () => {
21+
const { queryByText } = render(
22+
<StringPreviewContentBlobToggler
23+
{...(StringPreviewContentBlobTogglerStory.args as StringPreviewContentBlobTogglerProps)}
24+
/>
25+
);
26+
textMustExist(queryByText, "A library for GUI elements.");
27+
textMustNotExist(
28+
queryByText,
29+
"In order to create graphical user interfaces, please have look at the documentation at"
30+
);
31+
textMustExist(queryByText, "show more");
32+
});
33+
it("should display full view if `startExtended` is enabled, and show toggler to reduce", () => {
34+
const { queryByText } = render(
35+
<StringPreviewContentBlobToggler
36+
{...(StringPreviewContentBlobTogglerStory.args as StringPreviewContentBlobTogglerProps)}
37+
startExtended
38+
/>
39+
);
40+
textMustExist(
41+
queryByText,
42+
"In order to create graphical user interfaces, please have look at the documentation at"
43+
);
44+
textMustExist(queryByText, "show less");
45+
});
46+
it('should display only first content line on `useOnly={"firstNonEmptyLine"}`', () => {
47+
const { queryByText } = render(
48+
<StringPreviewContentBlobToggler
49+
{...(StringPreviewContentBlobTogglerStory.args as StringPreviewContentBlobTogglerProps)}
50+
useOnly={"firstNonEmptyLine"}
51+
/>
52+
);
53+
textMustExist(queryByText, "A library for GUI elements.");
54+
textMustNotExist(queryByText, "In order to create");
55+
});
56+
it('should use first Markdown paragraph as preview content on `useOnly={"firstMarkdownSection"}` but shorten it', () => {
57+
const { queryByText } = render(
58+
<StringPreviewContentBlobToggler
59+
{...(StringPreviewContentBlobTogglerStory.args as StringPreviewContentBlobTogglerProps)}
60+
useOnly={"firstMarkdownSection"}
61+
/>
62+
);
63+
textMustExist(queryByText, "A library for GUI elements.");
64+
textMustExist(queryByText, "In order to create");
65+
textMustNotExist(queryByText, "please have look at the documentation at");
66+
});
67+
it("should display full preview and no toggler if content is short enough", () => {
68+
const { queryByText } = render(
69+
<StringPreviewContentBlobToggler
70+
{...(StringPreviewContentBlobTogglerStory.args as StringPreviewContentBlobTogglerProps)}
71+
previewMaxLength={144}
72+
/>
73+
);
74+
textMustExist(queryByText, "A library for GUI elements.");
75+
textMustExist(
76+
queryByText,
77+
"In order to create graphical user interfaces, please have look at the documentation at"
78+
);
79+
textMustNotExist(queryByText, "https://github.com/"); // test if Markdown was rendered
80+
textMustNotExist(queryByText, "show more");
81+
});
82+
it("should not use Markdown rendering on `renderPreviewAsMarkdown={false}`", () => {
83+
const { queryByText } = render(
84+
<StringPreviewContentBlobToggler
85+
{...(StringPreviewContentBlobTogglerStory.args as StringPreviewContentBlobTogglerProps)}
86+
previewMaxLength={144}
87+
renderPreviewAsMarkdown={false}
88+
/>
89+
);
90+
textMustExist(queryByText, "A library for GUI elements.");
91+
textMustExist(
92+
queryByText,
93+
"In order to create graphical user interfaces, please have look at the documentation at"
94+
);
95+
textMustExist(queryByText, "https://github.com/"); // test if Markdown was rendered
96+
textMustExist(queryByText, "show more");
97+
});
98+
});

0 commit comments

Comments
 (0)