| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- jest.mock('./css/query_editor.css', () => {
- return {};
- });
- import { AzureMonitorQueryCtrl } from './query_ctrl';
- // @ts-ignore
- import Q from 'q';
- import { TemplateSrv } from 'app/features/templating/template_srv';
- import { auto } from 'angular';
- describe('AzureMonitorQueryCtrl', () => {
- let queryCtrl: any;
- beforeEach(() => {
- AzureMonitorQueryCtrl.prototype.panelCtrl = {
- events: { on: () => {} },
- panel: { scopedVars: [], targets: [] },
- };
- AzureMonitorQueryCtrl.prototype.target = {} as any;
- AzureMonitorQueryCtrl.prototype.datasource = {
- $q: Q,
- appInsightsDatasource: { isConfigured: () => false },
- azureMonitorDatasource: { isConfigured: () => false },
- };
- queryCtrl = new AzureMonitorQueryCtrl({}, {} as auto.IInjectorService, new TemplateSrv());
- });
- describe('init query_ctrl variables', () => {
- it('should set default query type to Azure Monitor', () => {
- expect(queryCtrl.target.queryType).toBe('Azure Monitor');
- });
- it('should set default App Insights editor to be builder', () => {
- expect(queryCtrl.target.appInsights.rawQuery).toBe(false);
- });
- it('should set query parts to select', () => {
- expect(queryCtrl.target.azureMonitor.resourceGroup).toBe('select');
- expect(queryCtrl.target.azureMonitor.metricDefinition).toBe('select');
- expect(queryCtrl.target.azureMonitor.resourceName).toBe('select');
- expect(queryCtrl.target.azureMonitor.metricName).toBe('select');
- expect(queryCtrl.target.appInsights.groupBy).toBe('none');
- });
- });
- describe('when the query type is Azure Monitor', () => {
- describe('and getOptions for the Resource Group dropdown is called', () => {
- const response = [{ text: 'nodeapp', value: 'nodeapp' }, { text: 'otherapp', value: 'otherapp' }];
- beforeEach(() => {
- queryCtrl.datasource.getResourceGroups = () => {
- return queryCtrl.datasource.$q.when(response);
- };
- queryCtrl.datasource.azureMonitorDatasource = {
- isConfigured: () => {
- return true;
- },
- };
- });
- it('should return a list of Resource Groups', () => {
- return queryCtrl.getResourceGroups('').then((result: any) => {
- expect(result[0].text).toBe('nodeapp');
- });
- });
- });
- describe('when getOptions for the Metric Definition dropdown is called', () => {
- describe('and resource group has a value', () => {
- const response = [
- { text: 'Microsoft.Compute/virtualMachines', value: 'Microsoft.Compute/virtualMachines' },
- { text: 'Microsoft.Network/publicIPAddresses', value: 'Microsoft.Network/publicIPAddresses' },
- ];
- beforeEach(() => {
- queryCtrl.target.subscription = 'sub1';
- queryCtrl.target.azureMonitor.resourceGroup = 'test';
- queryCtrl.datasource.getMetricDefinitions = function(subscriptionId: any, query: any) {
- expect(subscriptionId).toBe('sub1');
- expect(query).toBe('test');
- return this.$q.when(response);
- };
- });
- it('should return a list of Metric Definitions', () => {
- return queryCtrl.getMetricDefinitions('').then((result: any) => {
- expect(result[0].text).toBe('Microsoft.Compute/virtualMachines');
- expect(result[1].text).toBe('Microsoft.Network/publicIPAddresses');
- });
- });
- });
- describe('and resource group has no value', () => {
- beforeEach(() => {
- queryCtrl.target.azureMonitor.resourceGroup = 'select';
- });
- it('should return without making a call to datasource', () => {
- expect(queryCtrl.getMetricDefinitions('')).toBe(undefined);
- });
- });
- });
- describe('when getOptions for the ResourceNames dropdown is called', () => {
- describe('and resourceGroup and metricDefinition have values', () => {
- const response = [{ text: 'test1', value: 'test1' }, { text: 'test2', value: 'test2' }];
- beforeEach(() => {
- queryCtrl.target.subscription = 'sub1';
- queryCtrl.target.azureMonitor.resourceGroup = 'test';
- queryCtrl.target.azureMonitor.metricDefinition = 'Microsoft.Compute/virtualMachines';
- queryCtrl.datasource.getResourceNames = function(
- subscriptionId: any,
- resourceGroup: any,
- metricDefinition: any
- ) {
- expect(subscriptionId).toBe('sub1');
- expect(resourceGroup).toBe('test');
- expect(metricDefinition).toBe('Microsoft.Compute/virtualMachines');
- return this.$q.when(response);
- };
- });
- it('should return a list of Resource Names', () => {
- return queryCtrl.getResourceNames('').then((result: any) => {
- expect(result[0].text).toBe('test1');
- expect(result[1].text).toBe('test2');
- });
- });
- });
- describe('and resourceGroup and metricDefinition do not have values', () => {
- beforeEach(() => {
- queryCtrl.target.azureMonitor.resourceGroup = 'select';
- queryCtrl.target.azureMonitor.metricDefinition = 'select';
- });
- it('should return without making a call to datasource', () => {
- expect(queryCtrl.getResourceNames('')).toBe(undefined);
- });
- });
- });
- describe('when getOptions for the Metric Names dropdown is called', () => {
- describe('and resourceGroup, metricDefinition and resourceName have values', () => {
- const response = [{ text: 'metric1', value: 'metric1' }, { text: 'metric2', value: 'metric2' }];
- beforeEach(() => {
- queryCtrl.target.subscription = 'sub1';
- queryCtrl.target.azureMonitor.resourceGroup = 'test';
- queryCtrl.target.azureMonitor.metricDefinition = 'Microsoft.Compute/virtualMachines';
- queryCtrl.target.azureMonitor.resourceName = 'test';
- queryCtrl.datasource.getMetricNames = function(
- subscriptionId: any,
- resourceGroup: any,
- metricDefinition: any,
- resourceName: any
- ) {
- expect(subscriptionId).toBe('sub1');
- expect(resourceGroup).toBe('test');
- expect(metricDefinition).toBe('Microsoft.Compute/virtualMachines');
- expect(resourceName).toBe('test');
- return this.$q.when(response);
- };
- });
- it('should return a list of Metric Names', () => {
- return queryCtrl.getMetricNames('').then((result: any) => {
- expect(result[0].text).toBe('metric1');
- expect(result[1].text).toBe('metric2');
- });
- });
- });
- describe('and resourceGroup, metricDefinition and resourceName do not have values', () => {
- beforeEach(() => {
- queryCtrl.target.azureMonitor.resourceGroup = 'select';
- queryCtrl.target.azureMonitor.metricDefinition = 'select';
- queryCtrl.target.azureMonitor.resourceName = 'select';
- });
- it('should return without making a call to datasource', () => {
- expect(queryCtrl.getMetricNames('')).toBe(undefined);
- });
- });
- });
- describe('when onMetricNameChange is triggered for the Metric Names dropdown', () => {
- const response: any = {
- primaryAggType: 'Average',
- supportAggOptions: ['Average', 'Total'],
- supportedTimeGrains: ['PT1M', 'P1D'],
- dimensions: [],
- };
- beforeEach(() => {
- queryCtrl.target.subscription = 'sub1';
- queryCtrl.target.azureMonitor.resourceGroup = 'test';
- queryCtrl.target.azureMonitor.metricDefinition = 'Microsoft.Compute/virtualMachines';
- queryCtrl.target.azureMonitor.resourceName = 'test';
- queryCtrl.target.azureMonitor.metricName = 'Percentage CPU';
- queryCtrl.datasource.getMetricMetadata = function(
- subscription: any,
- resourceGroup: any,
- metricDefinition: any,
- resourceName: any,
- metricName: any
- ) {
- expect(subscription).toBe('sub1');
- expect(resourceGroup).toBe('test');
- expect(metricDefinition).toBe('Microsoft.Compute/virtualMachines');
- expect(resourceName).toBe('test');
- expect(metricName).toBe('Percentage CPU');
- return this.$q.when(response);
- };
- });
- it('should set the options and default selected value for the Aggregations dropdown', () => {
- queryCtrl.onMetricNameChange().then(() => {
- expect(queryCtrl.target.azureMonitor.aggregation).toBe('Average');
- expect(queryCtrl.target.azureMonitor.aggOptions).toBe(['Average', 'Total']);
- expect(queryCtrl.target.azureMonitor.timeGrains).toBe(['PT1M', 'P1D']);
- });
- });
- });
- });
- describe('and query type is Application Insights', () => {
- describe('when getOptions for the Metric Names dropdown is called', () => {
- const response = [{ text: 'metric1', value: 'metric1' }, { text: 'metric2', value: 'metric2' }];
- beforeEach(() => {
- queryCtrl.datasource.appInsightsDatasource.isConfigured = () => true;
- queryCtrl.datasource.getAppInsightsMetricNames = () => {
- return queryCtrl.datasource.$q.when(response);
- };
- });
- it('should return a list of Metric Names', () => {
- return queryCtrl.getAppInsightsMetricNames().then((result: any) => {
- expect(result[0].text).toBe('metric1');
- expect(result[1].text).toBe('metric2');
- });
- });
- });
- describe('when getOptions for the GroupBy segments dropdown is called', () => {
- beforeEach(() => {
- queryCtrl.target.appInsights.groupByOptions = ['opt1', 'opt2'];
- });
- it('should return a list of GroupBy segments', () => {
- const result = queryCtrl.getAppInsightsGroupBySegments('');
- expect(result[0].text).toBe('opt1');
- expect(result[0].value).toBe('opt1');
- expect(result[1].text).toBe('opt2');
- expect(result[1].value).toBe('opt2');
- });
- });
- describe('when onAppInsightsMetricNameChange is triggered for the Metric Names dropdown', () => {
- const response = {
- primaryAggType: 'avg',
- supportedAggTypes: ['avg', 'sum'],
- supportedGroupBy: ['client/os', 'client/city'],
- };
- beforeEach(() => {
- queryCtrl.target.appInsights.metricName = 'requests/failed';
- queryCtrl.datasource.getAppInsightsMetricMetadata = function(metricName: string) {
- expect(metricName).toBe('requests/failed');
- return this.$q.when(response);
- };
- });
- it('should set the options and default selected value for the Aggregations dropdown', () => {
- return queryCtrl.onAppInsightsMetricNameChange().then(() => {
- expect(queryCtrl.target.appInsights.aggregation).toBe('avg');
- expect(queryCtrl.target.appInsights.aggOptions).toContain('avg');
- expect(queryCtrl.target.appInsights.aggOptions).toContain('sum');
- expect(queryCtrl.target.appInsights.groupByOptions).toContain('client/os');
- expect(queryCtrl.target.appInsights.groupByOptions).toContain('client/city');
- });
- });
- });
- });
- });
|