139 lines
4.7 KiB
TypeScript
139 lines
4.7 KiB
TypeScript
import { AlertManagerCortexConfig } from 'app/plugins/datasource/alertmanager/types';
|
|
|
|
import { AlertmanagerReceiverBuilder } from '../../mockApi';
|
|
|
|
import { addReceiverAction, deleteReceiverAction, receiversReducer, updateReceiverAction } from './receivers';
|
|
|
|
describe('receivers', () => {
|
|
const initialConfig: AlertManagerCortexConfig = {
|
|
alertmanager_config: {},
|
|
template_files: {},
|
|
};
|
|
|
|
it('should delete a receiver', () => {
|
|
const config: AlertManagerCortexConfig = {
|
|
alertmanager_config: {
|
|
receivers: [{ name: 'my receiver' }, { name: 'another receiver' }],
|
|
},
|
|
template_files: {},
|
|
};
|
|
|
|
const action = deleteReceiverAction('my receiver');
|
|
expect(receiversReducer(config, action)).toMatchSnapshot();
|
|
});
|
|
|
|
describe('adding receivers', () => {
|
|
it('should be able to add a new Alertmanager receiver', () => {
|
|
const newReceiver = new AlertmanagerReceiverBuilder()
|
|
.withName('new contact point')
|
|
.addEmailConfig((b) => b.withTo('address@domain.com'))
|
|
.build();
|
|
|
|
const action = addReceiverAction(newReceiver);
|
|
expect(receiversReducer(initialConfig, action)).toMatchSnapshot();
|
|
});
|
|
|
|
it('should be able to add a new Grafana Alertmanager receiver', () => {
|
|
const newReceiver = new AlertmanagerReceiverBuilder()
|
|
.withName('another contact point')
|
|
.addGrafanaReceiverConfig((receiver) =>
|
|
receiver.withType('oncall').withName('emea-oncall').addSetting('url', 'https://oncall.example.com')
|
|
)
|
|
.build();
|
|
|
|
const action = addReceiverAction(newReceiver);
|
|
expect(receiversReducer(initialConfig, action)).toMatchSnapshot();
|
|
});
|
|
|
|
it('should throw if we add a receiver with duplicate name', () => {
|
|
const config: AlertManagerCortexConfig = {
|
|
alertmanager_config: {
|
|
receivers: [{ name: 'my receiver' }],
|
|
},
|
|
template_files: {},
|
|
};
|
|
|
|
const newReceiver = new AlertmanagerReceiverBuilder().withName('my receiver').build();
|
|
const action = addReceiverAction(newReceiver);
|
|
|
|
expect(() => {
|
|
receiversReducer(config, action);
|
|
}).toThrow(/duplicate receiver/i);
|
|
});
|
|
});
|
|
|
|
describe('updating receivers', () => {
|
|
it('should throw if updating a receiver that does not exist', () => {
|
|
const config: AlertManagerCortexConfig = {
|
|
alertmanager_config: {
|
|
receivers: [{ name: 'my receiver' }],
|
|
},
|
|
template_files: {},
|
|
};
|
|
|
|
const updatedReceiver = new AlertmanagerReceiverBuilder().withName('my receiver').build();
|
|
const action = updateReceiverAction({ name: 'does not exist', receiver: updatedReceiver });
|
|
|
|
expect(() => {
|
|
receiversReducer(config, action);
|
|
}).toThrow(/expected receiver .+ to exist/i);
|
|
});
|
|
|
|
it('should throw if renaming a receiver to an existing name', () => {
|
|
const config: AlertManagerCortexConfig = {
|
|
alertmanager_config: {
|
|
receivers: [{ name: 'receiver 1' }, { name: 'receiver 2' }],
|
|
},
|
|
template_files: {},
|
|
};
|
|
|
|
const updatedReceiver = new AlertmanagerReceiverBuilder().withName('receiver 1').build();
|
|
const action = updateReceiverAction({ name: 'receiver 2', receiver: updatedReceiver });
|
|
|
|
expect(() => {
|
|
receiversReducer(config, action);
|
|
}).toThrow(/duplicate receiver name/i);
|
|
});
|
|
|
|
it('should allow renaming a receiver and update routes', () => {
|
|
const config: AlertManagerCortexConfig = {
|
|
alertmanager_config: {
|
|
receivers: [{ name: 'receiver 1' }],
|
|
route: {
|
|
receiver: 'receiver 1',
|
|
routes: [{ receiver: 'receiver 1' }],
|
|
},
|
|
},
|
|
template_files: {},
|
|
};
|
|
|
|
const updatedReceiver = new AlertmanagerReceiverBuilder().withName('receiver 2').build();
|
|
const action = updateReceiverAction({ name: 'receiver 1', receiver: updatedReceiver });
|
|
|
|
expect(receiversReducer(config, action)).toMatchSnapshot();
|
|
});
|
|
|
|
it('should allow updating an existing receiver', () => {
|
|
const existingReceiver = new AlertmanagerReceiverBuilder()
|
|
.withName('existing receiver')
|
|
.addEmailConfig((build) => build.withTo('address@domain.com'))
|
|
.build();
|
|
|
|
const config: AlertManagerCortexConfig = {
|
|
alertmanager_config: {
|
|
receivers: [existingReceiver],
|
|
},
|
|
template_files: {},
|
|
};
|
|
|
|
const updatedReceiver = new AlertmanagerReceiverBuilder()
|
|
.withName('existing receiver')
|
|
.addEmailConfig((build) => build.withTo('address+1@domain.com'))
|
|
.build();
|
|
const action = updateReceiverAction({ name: 'existing receiver', receiver: updatedReceiver });
|
|
|
|
expect(receiversReducer(config, action)).toMatchSnapshot();
|
|
});
|
|
});
|
|
});
|