Skip to content

Commit 4e331e6

Browse files
lpohrenMarcusNotheis
authored andcommitted
Merge pull request #65 from LuisValgoi/issue-57
[ISSUE-57] Continuation - Popover Elements Tests
1 parent fb9e647 commit 4e331e6

File tree

6 files changed

+164
-16
lines changed

6 files changed

+164
-16
lines changed

packages/ui5-webcomponents-react-seed/src/components/Popover/Info/PopoverInfo.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,14 @@ import { spacing } from '@ui5/webcomponents-react-base';
88

99
export default function PopoverInfo({ popoverRef, placementType, title, children }) {
1010
return (
11-
<Popover ref={popoverRef} placementType={placementType && PlacementType.Bottom}>
11+
<Popover data-testid="popoverInfo-wrapper" ref={popoverRef} placementType={placementType ? placementType : PlacementType.Bottom}>
1212
<FlexBox direction={FlexBoxDirection.Column}>
1313
<div className="popover-header">
14-
<Title style={spacing.sapUiContentPadding}>{title}</Title>
14+
{title && (
15+
<Title data-testid="popoverInfo-title-wrapper" style={spacing.sapUiContentPadding}>
16+
{title}
17+
</Title>
18+
)}
1519
</div>
1620
<div className="popover-content">{children}</div>
1721
</FlexBox>
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import React from 'react';
2+
3+
import '@testing-library/jest-dom/extend-expect';
4+
import userEvent from '@testing-library/user-event';
5+
import { render, screen } from '../../../util/TestSetup';
6+
7+
import PopoverInfo from './PopoverInfo';
8+
9+
const popoverInfoRef = {
10+
current: {
11+
openBy: jest.fn(),
12+
},
13+
};
14+
15+
describe('PopoverInfo.js Test Suite', () => {
16+
beforeEach(() => {
17+
render(
18+
<>
19+
<p data-testid="opener-wrapper" onClick={(e) => popoverInfoRef.current.openBy(e.detail.targetRef)}>
20+
Open Popover
21+
</p>
22+
<PopoverInfo popoverRef={popoverInfoRef} title="Some Title" />
23+
</>,
24+
);
25+
});
26+
27+
test('should render once triggered to open', async () => {
28+
const opener = screen.getByTestId('opener-wrapper');
29+
await userEvent.click(opener);
30+
31+
const popoverInfo = screen.getByTestId('popoverInfo-wrapper');
32+
expect(popoverInfo).toBeInTheDocument();
33+
});
34+
35+
test('should render placed at bottom', async () => {
36+
const opener = screen.getByTestId('opener-wrapper');
37+
await userEvent.click(opener);
38+
39+
const popoverInfo = screen.getByTestId('popoverInfo-wrapper');
40+
expect(popoverInfo).toBeInTheDocument();
41+
expect(popoverInfo).toHaveProperty('placementType', 'Bottom');
42+
});
43+
44+
test('should render with title if passed', async () => {
45+
const opener = screen.getByTestId('opener-wrapper');
46+
await userEvent.click(opener);
47+
48+
const popoverInfo = screen.getByTestId('popoverInfo-wrapper');
49+
const title = screen.getByTestId('popoverInfo-title-wrapper');
50+
expect(popoverInfo).toBeInTheDocument();
51+
expect(title).toBeInTheDocument();
52+
expect(title).toHaveTextContent('Some Title');
53+
});
54+
55+
test('should render without title if passed', async () => {
56+
render(
57+
<>
58+
<p data-testid="opener-wrapper" onClick={(e) => popoverInfoRef.current.openBy(e.detail.targetRef)}>
59+
Open Popover
60+
</p>
61+
<PopoverInfo popoverRef={popoverInfoRef} />
62+
</>,
63+
);
64+
65+
const opener = screen.getAllByTestId('opener-wrapper')[1];
66+
await userEvent.click(opener);
67+
68+
const popoverInfo = screen.getAllByTestId('popoverInfo-wrapper')[1];
69+
const title = screen.getAllByTestId('popoverInfo-title-wrapper')[1];
70+
expect(popoverInfo).toBeInTheDocument();
71+
expect(title).toBeUndefined();
72+
});
73+
});

packages/ui5-webcomponents-react-seed/src/components/Popover/List/PopoverListItems.js

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,18 @@ import PopoverInfo from '../Info/PopoverInfo';
44

55
export default function PopoverListItems({ popoverRef, title, items }) {
66
return (
7-
<PopoverInfo popoverRef={popoverRef} title={title}>
8-
<List>
9-
{items.map((item, index) => {
10-
return (
11-
<StandardListItem key={index} selected={item.selected} info={item.info} icon={item.icon} description={item.description} onClick={item.onClick}>
12-
{item.children}
13-
</StandardListItem>
14-
);
15-
})}
16-
</List>
17-
</PopoverInfo>
7+
<div data-testid="popoverListItems-wrapper">
8+
<PopoverInfo popoverRef={popoverRef} title={title}>
9+
<List data-testid="popoverListItems-listOfElements-wrapper">
10+
{items.map((item, index) => {
11+
return (
12+
<StandardListItem key={index} selected={item.selected} info={item.info} icon={item.icon} description={item.description} onClick={item.onClick}>
13+
{item.children}
14+
</StandardListItem>
15+
);
16+
})}
17+
</List>
18+
</PopoverInfo>
19+
</div>
1820
);
1921
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import React from 'react';
2+
3+
import '@testing-library/jest-dom/extend-expect';
4+
import userEvent from '@testing-library/user-event';
5+
import { render, screen } from '../../../util/TestSetup';
6+
7+
import PopoverListItems from './PopoverListItems';
8+
9+
const popoverListItemsRef = {
10+
current: {
11+
openBy: jest.fn(),
12+
},
13+
};
14+
15+
const popoverItems = [
16+
{
17+
children: 'Language Switch',
18+
icon: 'user-settings',
19+
},
20+
{
21+
children: 'Theme Switch',
22+
icon: 'customize',
23+
},
24+
];
25+
26+
describe('PopoverListItems.js Test Suite', () => {
27+
beforeEach(() => {
28+
render(
29+
<>
30+
<p data-testid="opener-wrapper" onClick={(e) => popoverListItemsRef.current.openBy(e.detail.targetRef)}>
31+
Open Popover
32+
</p>
33+
<PopoverListItems popoverRef={popoverListItemsRef} title="Some Title" items={popoverItems} />
34+
</>,
35+
);
36+
});
37+
38+
test('should render once triggered to open', async () => {
39+
const opener = screen.getByTestId('opener-wrapper');
40+
await userEvent.click(opener);
41+
42+
const popoverListItems = screen.getByTestId('popoverListItems-wrapper');
43+
expect(popoverListItems).toBeInTheDocument();
44+
});
45+
46+
test('should render two items in the list if passed correctly', async () => {
47+
const opener = screen.getByTestId('opener-wrapper');
48+
await userEvent.click(opener);
49+
50+
const popoverListItems = screen.getByTestId('popoverListItems-wrapper');
51+
const popoverListItemsListOfElements = screen.getByTestId('popoverListItems-listOfElements-wrapper');
52+
expect(popoverListItems).toBeInTheDocument();
53+
expect(popoverListItemsListOfElements).toBeInTheDocument();
54+
expect(popoverListItemsListOfElements.children).toHaveLength(2);
55+
});
56+
});

packages/ui5-webcomponents-react-seed/src/components/Shell/Shell.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const Shell = ({ title, ...props }) => {
2424
const { t } = useTranslation();
2525
const history = useHistory();
2626
const popoverConfigItemsRef = useRef(null);
27-
const popoverItemsInterface = [
27+
const popoverItems = [
2828
{
2929
children: t('shell.button.user.settings.item.languageSwitch'),
3030
icon: 'user-settings',
@@ -49,8 +49,8 @@ const Shell = ({ title, ...props }) => {
4949
onProfileClick={(e) => popoverConfigItemsRef.current.openBy(e.detail.targetRef)}
5050
{...props}
5151
/>
52-
<div style={style.emptySpace} />
53-
<PopoverListItems popoverRef={popoverConfigItemsRef} title={t('shell.button.user.settings')} items={popoverItemsInterface} />
52+
<div data-testid="emptySpace-wrapper" style={style.emptySpace} />
53+
<PopoverListItems popoverRef={popoverConfigItemsRef} title={t('shell.button.user.settings')} items={popoverItems} />
5454
</>
5555
);
5656
};

packages/ui5-webcomponents-react-seed/src/components/Shell/Shell.test.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,19 @@ describe('Shell.js Test Suite', () => {
2222
expect(shell).toBeInTheDocument();
2323
});
2424

25+
test('should contain an empty space after the Shell Element', () => {
26+
const emptySpace = screen.getByTestId('emptySpace-wrapper');
27+
28+
expect(emptySpace).toBeInTheDocument();
29+
});
30+
31+
test('should contain an profile element', () => {
32+
const { container } = render(<Shell title="Test" />);
33+
const profile = container.querySelector('[slot="profile"]');
34+
35+
expect(profile).toBeInTheDocument();
36+
});
37+
2538
test('should render with primaryTitle "Test"', () => {
2639
render(<Shell title="Test" />);
2740

0 commit comments

Comments
 (0)