diff --git a/x-pack/platform/plugins/shared/alerting/server/routes/rule/apis/resolve/resolve_rule_route.test.ts b/x-pack/platform/plugins/shared/alerting/server/routes/rule/apis/resolve/resolve_rule_route.test.ts index 417651b7cc113..8468a205a3d07 100644 --- a/x-pack/platform/plugins/shared/alerting/server/routes/rule/apis/resolve/resolve_rule_route.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/routes/rule/apis/resolve/resolve_rule_route.test.ts @@ -76,6 +76,13 @@ describe('resolveRuleRoute', () => { outcome: 'aliasMatch', alias_target_id: '2', revision: 0, + artifacts: { + dashboards: [ + { + id: '123', + }, + ], + }, }; const resolveResult = { @@ -116,6 +123,7 @@ describe('resolveRuleRoute', () => { }, ], outcome: 'aliasMatch', + artifacts: mockedRule.artifacts, }; it('resolves a rule with proper parameters', async () => { @@ -253,4 +261,48 @@ describe('resolveRuleRoute', () => { }, ]); }); + + it('returns the artifacts if defined', async () => { + const licenseState = licenseStateMock.create(); + const router = httpServiceMock.createRouter(); + + resolveRuleRoute(router, licenseState); + + const [, handler] = router.get.mock.calls[0]; + + // TODO (http-versioning): Remove this cast, this enables us to move forward + // without fixing all of other solution types + rulesClient.resolve.mockResolvedValueOnce({ + ...mockedRule, + artifacts: { + dashboards: [ + { + id: '123', + }, + ], + }, + } as ResolvedSanitizedRule); + + const [context, req, res] = mockHandlerArguments( + { rulesClient }, + { + params: { id: '1' }, + }, + ['ok'] + ); + + const routeRes = await handler(context, req, res); + + // @ts-expect-error: body exists + expect(routeRes.body.artifacts).not.toBeUndefined(); + + // @ts-expect-error: body exists + expect(routeRes.body.artifacts).toEqual({ + dashboards: [ + { + id: '123', + }, + ], + }); + }); }); diff --git a/x-pack/platform/plugins/shared/alerting/server/routes/rule/apis/resolve/transforms/transform_resolve_response/v1.ts b/x-pack/platform/plugins/shared/alerting/server/routes/rule/apis/resolve/transforms/transform_resolve_response/v1.ts index bd40c8535d1b9..924479a9c8522 100644 --- a/x-pack/platform/plugins/shared/alerting/server/routes/rule/apis/resolve/transforms/transform_resolve_response/v1.ts +++ b/x-pack/platform/plugins/shared/alerting/server/routes/rule/apis/resolve/transforms/transform_resolve_response/v1.ts @@ -15,4 +15,5 @@ export const transformResolveResponse = ( ...transformRuleToRuleResponseV1(rule), outcome: rule.outcome, alias_target_id: rule.alias_target_id, + ...(rule.artifacts !== undefined ? { artifacts: rule.artifacts } : {}), }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/resolve.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/resolve.ts index fb6af0e8d5fd4..f20200e2d32ad 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/resolve.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/resolve.ts @@ -84,5 +84,50 @@ export default ({ getService }: FtrProviderContext) => { ]); }); }); + + describe('Artifacts', () => { + const { user, space } = SuperuserAtSpace1; + + it('should return the artifacts correctly', async () => { + const { body: createdRule1 } = await supertest + .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send( + getTestRuleData({ + enabled: true, + artifacts: { + dashboards: [ + { + id: '123', + }, + { + id: '456', + }, + ], + }, + }) + ) + .expect(200); + + objectRemover.add(space.id, createdRule1.id, 'rule', 'alerting'); + + const response = await supertestWithoutAuth + .get(`${getUrlPrefix(space.id)}/internal/alerting/rule/${createdRule1.id}/_resolve`) + .set('kbn-xsrf', 'foo') + .auth(user.username, user.password); + const { artifacts } = response.body; + + expect(artifacts).to.eql({ + dashboards: [ + { + id: '123', + }, + { + id: '456', + }, + ], + }); + }); + }); }); };