You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.2 KiB
129 lines
3.2 KiB
import * as reactRedux from 'react-redux';
|
|
import { useExternalAmSelector } from './useExternalAmSelector';
|
|
|
|
const createMockStoreState = (
|
|
activeAlertmanagers: Array<{ url: string }>,
|
|
droppedAlertmanagers: Array<{ url: string }>,
|
|
alertmanagerConfig: string[]
|
|
) => ({
|
|
unifiedAlerting: {
|
|
externalAlertmanagers: {
|
|
discoveredAlertmanagers: {
|
|
result: {
|
|
data: {
|
|
activeAlertManagers: activeAlertmanagers,
|
|
droppedAlertManagers: droppedAlertmanagers,
|
|
},
|
|
},
|
|
},
|
|
alertmanagerConfig: {
|
|
result: {
|
|
alertmanagers: alertmanagerConfig,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
describe('useExternalAmSelector', () => {
|
|
const useSelectorMock = jest.spyOn(reactRedux, 'useSelector');
|
|
beforeEach(() => {
|
|
useSelectorMock.mockClear();
|
|
});
|
|
it('should have one in pending', () => {
|
|
useSelectorMock.mockImplementation((callback) => {
|
|
return callback(createMockStoreState([], [], ['some/url/to/am']));
|
|
});
|
|
const alertmanagers = useExternalAmSelector();
|
|
|
|
expect(alertmanagers).toEqual([
|
|
{
|
|
url: 'some/url/to/am',
|
|
status: 'pending',
|
|
actualUrl: '',
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should have one active, one pending', () => {
|
|
useSelectorMock.mockImplementation((callback) => {
|
|
return callback(
|
|
createMockStoreState([{ url: 'some/url/to/am/api/v2/alerts' }], [], ['some/url/to/am', 'some/url/to/am1'])
|
|
);
|
|
});
|
|
|
|
const alertmanagers = useExternalAmSelector();
|
|
|
|
expect(alertmanagers).toEqual([
|
|
{
|
|
url: 'some/url/to/am',
|
|
actualUrl: 'some/url/to/am/api/v2/alerts',
|
|
status: 'active',
|
|
},
|
|
{
|
|
url: 'some/url/to/am1',
|
|
actualUrl: '',
|
|
status: 'pending',
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should have two active', () => {
|
|
useSelectorMock.mockImplementation((callback) => {
|
|
return callback(
|
|
createMockStoreState(
|
|
[{ url: 'some/url/to/am/api/v2/alerts' }, { url: 'some/url/to/am1/api/v2/alerts' }],
|
|
[],
|
|
['some/url/to/am', 'some/url/to/am1']
|
|
)
|
|
);
|
|
});
|
|
|
|
const alertmanagers = useExternalAmSelector();
|
|
|
|
expect(alertmanagers).toEqual([
|
|
{
|
|
url: 'some/url/to/am',
|
|
actualUrl: 'some/url/to/am/api/v2/alerts',
|
|
status: 'active',
|
|
},
|
|
{
|
|
url: 'some/url/to/am1',
|
|
actualUrl: 'some/url/to/am1/api/v2/alerts',
|
|
status: 'active',
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should have one active, one dropped, one pending', () => {
|
|
useSelectorMock.mockImplementation((callback) => {
|
|
return callback(
|
|
createMockStoreState(
|
|
[{ url: 'some/url/to/am/api/v2/alerts' }],
|
|
[{ url: 'some/dropped/url/api/v2/alerts' }],
|
|
['some/url/to/am', 'some/url/to/am1']
|
|
)
|
|
);
|
|
});
|
|
|
|
const alertmanagers = useExternalAmSelector();
|
|
|
|
expect(alertmanagers).toEqual([
|
|
{
|
|
url: 'some/url/to/am',
|
|
actualUrl: 'some/url/to/am/api/v2/alerts',
|
|
status: 'active',
|
|
},
|
|
{
|
|
url: 'some/url/to/am1',
|
|
actualUrl: '',
|
|
status: 'pending',
|
|
},
|
|
{
|
|
url: 'some/dropped/url',
|
|
actualUrl: 'some/dropped/url/api/v2/alerts',
|
|
status: 'dropped',
|
|
},
|
|
]);
|
|
});
|
|
});
|
|
|