Skip to content

Commit

Permalink
add more rule_registry unit tests (#120323)
Browse files Browse the repository at this point in the history
* add more rule_registry unit tests

* delete initializeService test

* refactor and use the existing ruleDataClient mock

* remove resource installer mock

* check ruleDataClient has been called with correct arguments

* resource installer attempt

* remove failing tests

Co-authored-by: Kibana Machine <[email protected]>
  • Loading branch information
mgiota and kibanamachine committed Dec 7, 2021
1 parent 785faa4 commit 0d86c70
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import type { PublicMethodsOf } from '@kbn/utility-types';
import { ResourceInstaller } from './resource_installer';

type Schema = PublicMethodsOf<ResourceInstaller>;
export type ResourceInstallerMock = jest.Mocked<Schema>;
const createResourceInstallerMock = () => {
return {
installCommonResources: jest.fn(),
installIndexLevelResources: jest.fn(),
installAndUpdateNamespaceLevelResources: jest.fn(),
};
};

export const resourceInstallerMock: {
create: () => ResourceInstallerMock;
} = {
create: createResourceInstallerMock,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import { loggerMock } from '@kbn/logging/mocks';
import { RuleDataService } from './rule_data_plugin_service';
import { elasticsearchServiceMock } from 'src/core/server/mocks';
import { AlertConsumers } from '@kbn/rule-data-utils/alerts_as_data_rbac';
import { Dataset } from './index_options';
import { RuleDataClient } from '../rule_data_client/rule_data_client';
import { createRuleDataClientMock as mockCreateRuleDataClient } from '../rule_data_client/rule_data_client.mock';

jest.mock('../rule_data_client/rule_data_client', () => ({
RuleDataClient: jest.fn().mockImplementation(() => mockCreateRuleDataClient()),
}));

describe('ruleDataPluginService', () => {
beforeEach(() => {
jest.resetAllMocks();
});

describe('isRegistrationContextDisabled', () => {
it('should return true', async () => {
const mockClusterClient = elasticsearchServiceMock.createElasticsearchClient();
const getClusterClient = jest.fn(() => Promise.resolve(mockClusterClient));

const ruleDataService = new RuleDataService({
logger: loggerMock.create(),
getClusterClient,
kibanaVersion: '8.1.0',
isWriteEnabled: true,
disabledRegistrationContexts: ['observability.logs'],
isWriterCacheEnabled: true,
});
expect(ruleDataService.isRegistrationContextDisabled('observability.logs')).toBe(true);
});

it('should return false', async () => {
const mockClusterClient = elasticsearchServiceMock.createElasticsearchClient();
const getClusterClient = jest.fn(() => Promise.resolve(mockClusterClient));

const ruleDataService = new RuleDataService({
logger: loggerMock.create(),
getClusterClient,
kibanaVersion: '8.1.0',
isWriteEnabled: true,
disabledRegistrationContexts: ['observability.logs'],
isWriterCacheEnabled: true,
});
expect(ruleDataService.isRegistrationContextDisabled('observability.apm')).toBe(false);
});
});

describe('isWriteEnabled', () => {
it('should return true', async () => {
const mockClusterClient = elasticsearchServiceMock.createElasticsearchClient();
const getClusterClient = jest.fn(() => Promise.resolve(mockClusterClient));

const ruleDataService = new RuleDataService({
logger: loggerMock.create(),
getClusterClient,
kibanaVersion: '8.1.0',
isWriteEnabled: true,
disabledRegistrationContexts: ['observability.logs'],
isWriterCacheEnabled: true,
});

expect(ruleDataService.isWriteEnabled('observability.logs')).toBe(false);
});
});

describe('initializeIndex', () => {
it('calls RuleDataClient', async () => {
const mockClusterClient = elasticsearchServiceMock.createElasticsearchClient();
const getClusterClient = jest.fn(() => Promise.resolve(mockClusterClient));

const ruleDataService = new RuleDataService({
logger: loggerMock.create(),
getClusterClient,
kibanaVersion: '8.1.0',
isWriteEnabled: true,
disabledRegistrationContexts: ['observability.logs'],
isWriterCacheEnabled: true,
});
const indexOptions = {
feature: AlertConsumers.LOGS,
registrationContext: 'observability.logs',
dataset: Dataset.alerts,
componentTemplateRefs: [],
componentTemplates: [
{
name: 'mappings',
},
],
};
await ruleDataService.initializeService();
await ruleDataService.initializeIndex(indexOptions);
expect(RuleDataClient).toHaveBeenCalled();
expect(RuleDataClient).toHaveBeenCalledWith(
expect.objectContaining({
indexInfo: expect.objectContaining({ baseName: '.alerts-observability.logs.alerts' }),
})
);
});
});
});

0 comments on commit 0d86c70

Please sign in to comment.