Skip to content

Commit b751d70

Browse files
committed
change: Use TypeScript for NewIconMenu task component
1 parent 4edfe0f commit b751d70

File tree

3 files changed

+49
-62
lines changed

3 files changed

+49
-62
lines changed

src/web/pages/tasks/icons/NewIconMenu.jsx renamed to src/web/pages/tasks/icons/NewIconMenu.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@
33
* SPDX-License-Identifier: AGPL-3.0-or-later
44
*/
55

6-
import React from 'react';
76
import {NewIcon} from 'web/components/icon';
87
import IconMenu from 'web/components/menu/IconMenu';
98
import MenuEntry from 'web/components/menu/MenuEntry';
109
import useCapabilities from 'web/hooks/useCapabilities';
1110
import useTranslation from 'web/hooks/useTranslation';
12-
import PropTypes from 'web/utils/PropTypes';
1311

14-
const NewIconMenu = ({onNewClick, onNewContainerClick}) => {
12+
interface NewIconMenuProps {
13+
onNewClick?: () => void;
14+
onNewContainerClick?: () => void;
15+
}
16+
17+
const NewIconMenu = ({onNewClick, onNewContainerClick}: NewIconMenuProps) => {
1518
const [_] = useTranslation();
1619
const capabilities = useCapabilities();
1720
if (capabilities.mayCreate('task')) {
@@ -33,9 +36,4 @@ const NewIconMenu = ({onNewClick, onNewContainerClick}) => {
3336
return null;
3437
};
3538

36-
NewIconMenu.propTypes = {
37-
onNewClick: PropTypes.func,
38-
onNewContainerClick: PropTypes.func,
39-
};
40-
4139
export default NewIconMenu;

src/web/pages/tasks/icons/__tests__/NewIconMenu.test.jsx

Lines changed: 0 additions & 54 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/* SPDX-FileCopyrightText: 2025 Greenbone AG
2+
*
3+
* SPDX-License-Identifier: AGPL-3.0-or-later
4+
*/
5+
6+
import {describe, test, expect, testing} from '@gsa/testing';
7+
import {screen, rendererWith, fireEvent} from 'web/testing';
8+
import Capabilities from 'gmp/capabilities/capabilities';
9+
import NewIconMenu from 'web/pages/tasks/icons/NewIconMenu';
10+
11+
describe('NewIconMenu tests', () => {
12+
test('should render', () => {
13+
const {render} = rendererWith({capabilities: true});
14+
render(<NewIconMenu />);
15+
expect(screen.getByTestId('new-task-menu')).toBeInTheDocument();
16+
expect(screen.getByTestId('new-container-task-menu')).toBeInTheDocument();
17+
});
18+
19+
test('should not render when capabilities do not allow creating tasks', () => {
20+
const {render} = rendererWith({capabilities: new Capabilities()});
21+
render(<NewIconMenu />);
22+
expect(screen.queryByTestId('new-task-menu')).not.toBeInTheDocument();
23+
expect(
24+
screen.queryByTestId('new-container-task-menu'),
25+
).not.toBeInTheDocument();
26+
});
27+
28+
test('should call onNewClick when New Task is clicked', () => {
29+
const onNewClick = testing.fn();
30+
const {render} = rendererWith({capabilities: true});
31+
render(<NewIconMenu onNewClick={onNewClick} />);
32+
fireEvent.click(screen.getByTestId('new-task-menu'));
33+
expect(onNewClick).toHaveBeenCalled();
34+
});
35+
36+
test('calls onNewContainerClick when New Container Task is clicked', () => {
37+
const onNewContainerClick = testing.fn();
38+
const {render} = rendererWith({capabilities: true});
39+
render(<NewIconMenu onNewContainerClick={onNewContainerClick} />);
40+
fireEvent.click(screen.getByTestId('new-container-task-menu'));
41+
expect(onNewContainerClick).toHaveBeenCalled();
42+
});
43+
});

0 commit comments

Comments
 (0)