8000 Add: Add a hook to load the user's capabilities from the backend · greenbone/gsa@53b033e · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit 53b033e

Browse files
committed
Add: Add a hook to load the user's capabilities from the backend
The capabilities of the user are provided via a react context and therefore it should be able to load them independently from the redux store.
1 parent 411b94c commit 53b033e

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/* SPDX-FileCopyrightText: 2024 Greenbone AG
2+
*
3+
* SPDX-License-Identifier: AGPL-3.0-or-later
4+
*/
5+
6+
import {describe, test, expect, testing} from '@gsa/testing';
7+
8+
import {rendererWith, screen, wait} from 'web/utils/testing';
9+
10+
import useLoadCapabilities from '../useLoadCapabilities';
11+
12+
const TestComponent = () => {
13+
const capabilities = useLoadCapabilities();
14+
return (
15+
<>
16+
{capabilities &&
17+
capabilities.map(capability => {
18+
return (
19+
<div data-testid="capability" key={capability.name}>
20+
{capability.name}
21+
</div>
22+
);
23+
})}
24+
</>
25+
);
26+
};
27+
28+
describe('useLoadCapabilities tests', () => {
29+
test('should load capabilities', async () => {
30+
const capabilities = [{name: 'cap_1'}, {name: 'cap_2'}];
31+
const response = {data: capabilities};
32+
const gmp = {
33+
user: {
34+
currentCapabilities: testing.fn(() => Promise.resolve(response)),
35+
},
36+
};
37+
const {render} = rendererWith({gmp});
38+
39+
render(<TestComponent />);
40+
41+
await wait();
42+
43+
expect(gmp.user.currentCapabilities).toHaveBeenCalled();
44+
expect(screen.getAllByTestId('capability').length).toEqual(2);
45+
});
46+
});

src/web/hooks/useLoadCapabilities.jsx

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/* SPDX-FileCopyrightText: 2024 Greenbone AG
2+
*
3+
* SPDX-License-Identifier: AGPL-3.0-or-later
4+
*/
5+
6+
import {useEffect, useState} from 'react';
7+
8+
import logger from 'gmp/log';
9+
import Capabilities from 'gmp/capabilities/capabilities';
10+
11+
import useGmp from '../utils/useGmp';
12+
13+
const log = logger.getLogger('web.useLoadCapabilities');
14+
15+
/**
16+
* Hook to load the user's capabilities from the backend
17+
*/
18+
const useLoadCapabilities = () => {
19+
const gmp = useGmp();
20+
const [capabilities, setCapabilities] = useState();
21+
22+
useEffect(() => {
23+
gmp.user
24+
.currentCapabilities()
25+
.then(response => {
26+
const loadedCapabilities = response.data;
27+
log.debug('User capabilities', loadedCapabilities);
28+
setCapabilities(loadedCapabilities);
29+
})
30+
.catch(rejection => {
31+
if (rejection.isError()) {
32+
log.error(
33+
'An error occurred during fetching capabilities',
34+
rejection,
35+
);
36+
}
37+
// use empty capabilities
38+
setCapabilities(new Capabilities());
39+
});
40+
}, [gmp.user]);
41+
42+
return capabilities;
43+
};
44+
45+
export default useLoadCapabilities;

0 commit comments

Comments
 (0)
0