[RAM] Fix rule details page not displaying the rule snooze status properly (#142292)

* Fix rule details not displaying rule snooze status

* Unit and E2E tests

* Fix test

* Fix test

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Jiawei Wu 2022-10-04 09:23:48 -07:00 committed by GitHub
parent 2a1df2dd7b
commit 43bbbc6b27
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 109 additions and 7 deletions

View file

@ -75,7 +75,7 @@ export const resolveRuleRoute = (
verifyAccessAndContext(licenseState, async function (context, req, res) {
const rulesClient = (await context.alerting).getRulesClient();
const { id } = req.params;
const rule = await rulesClient.resolve({ id });
const rule = await rulesClient.resolve({ id, includeSnoozeData: true });
return res.ok({
body: rewriteBodyRes(rule),
});

View file

@ -715,9 +715,11 @@ export class RulesClient {
public async resolve<Params extends RuleTypeParams = never>({
id,
includeLegacyId,
includeSnoozeData = false,
}: {
id: string;
includeLegacyId?: boolean;
includeSnoozeData?: boolean;
}): Promise<ResolvedSanitizedRule<Params>> {
const { saved_object: result, ...resolveResponse } =
await this.unsecuredSavedObjectsClient.resolve<RawRule>('alert', id);
@ -750,7 +752,9 @@ export class RulesClient {
result.attributes.alertTypeId,
result.attributes,
result.references,
includeLegacyId
includeLegacyId,
false,
includeSnoozeData
);
return {

View file

@ -201,6 +201,58 @@ describe('resolve()', () => {
`);
});
test('calls saved objects client with id and includeSnoozeData params', async () => {
const rulesClient = new RulesClient(rulesClientParams);
unsecuredSavedObjectsClient.resolve.mockResolvedValueOnce({
saved_object: {
id: '1',
type: 'alert',
attributes: {
legacyId: 'some-legacy-id',
alertTypeId: '123',
schedule: { interval: '10s' },
params: {
bar: true,
},
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
snoozeSchedule: [
{
duration: 10000,
rRule: {
dtstart: new Date().toISOString(),
tzid: 'UTC',
count: 1,
},
},
],
muteAll: false,
actions: [
{
group: 'default',
actionRef: 'action_0',
params: {
foo: true,
},
},
],
notifyWhen: 'onActiveAlert',
},
references: [
{
name: 'action_0',
type: 'action',
id: '1',
},
],
},
outcome: 'aliasMatch',
alias_target_id: '2',
});
const result = await rulesClient.resolve({ id: '1', includeSnoozeData: true });
expect(result.isSnoozedUntil).toBeTruthy();
});
test('should call useSavedObjectReferences.injectReferences if defined for rule type', async () => {
const injectReferencesFn = jest.fn().mockReturnValue({
bar: true,

View file

@ -238,7 +238,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
});
it('should snooze the rule', async () => {
const snoozeBadge = await testSubjects.find('rulesListNotifyBadge-unsnoozed');
let snoozeBadge = await testSubjects.find('rulesListNotifyBadge-unsnoozed');
await snoozeBadge.click();
const snoozeIndefinite = await testSubjects.find('ruleSnoozeIndefiniteApply');
@ -247,18 +247,64 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
await retry.try(async () => {
await testSubjects.existOrFail('rulesListNotifyBadge-snoozedIndefinitely');
});
});
it('should unsnooze the rule', async () => {
const snoozeBadge = await testSubjects.find('rulesListNotifyBadge-snoozedIndefinitely');
// Unsnooze the rule for the next test
snoozeBadge = await testSubjects.find('rulesListNotifyBadge-snoozedIndefinitely');
await snoozeBadge.click();
const snoozeCancel = await testSubjects.find('ruleSnoozeCancel');
await snoozeCancel.click();
await pageObjects.header.waitUntilLoadingHasFinished();
});
it('should snooze the rule for a set duration', async () => {
let snoozeBadge = await testSubjects.find('rulesListNotifyBadge-unsnoozed');
await snoozeBadge.click();
const snooze8h = await testSubjects.find('linkSnooze8h');
await snooze8h.click();
await pageObjects.header.waitUntilLoadingHasFinished();
await retry.try(async () => {
await testSubjects.existOrFail('rulesListNotifyBadge-unsnoozed');
await testSubjects.existOrFail('rulesListNotifyBadge-snoozed');
});
// Unsnooze the rule for the next test
snoozeBadge = await testSubjects.find('rulesListNotifyBadge-snoozed');
await snoozeBadge.click();
const snoozeCancel = await testSubjects.find('ruleSnoozeCancel');
await snoozeCancel.click();
await pageObjects.header.waitUntilLoadingHasFinished();
});
it('should add snooze schedule', async () => {
let snoozeBadge = await testSubjects.find('rulesListNotifyBadge-unsnoozed');
await snoozeBadge.click();
const addScheduleButton = await testSubjects.find('ruleAddSchedule');
await addScheduleButton.click();
const saveScheduleButton = await testSubjects.find('scheduler-saveSchedule');
await saveScheduleButton.click();
await pageObjects.header.waitUntilLoadingHasFinished();
await retry.try(async () => {
await testSubjects.existOrFail('rulesListNotifyBadge-scheduled');
});
// Unsnooze the rule for the next test
snoozeBadge = await testSubjects.find('rulesListNotifyBadge-scheduled');
await snoozeBadge.click();
const snoozeCancel = await testSubjects.find('ruleRemoveAllSchedules');
await snoozeCancel.click();
const confirmButton = await testSubjects.find('confirmModalConfirmButton');
await confirmButton.click();
await pageObjects.header.waitUntilLoadingHasFinished();
});
});