Skip to content

Commit 43b5ed5

Browse files
committed
refactor: adding tests
1 parent 335c887 commit 43b5ed5

File tree

3 files changed

+281
-111
lines changed

3 files changed

+281
-111
lines changed

projects/observability/src/shared/dashboard/data/graphql/topology/topology-data-source.model.test.ts

Lines changed: 59 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { isEqualIgnoreFunctions } from '@hypertrace/common';
1+
import { Color, isEqualIgnoreFunctions } from '@hypertrace/common';
22
import { GraphQlTimeRange, MetricAggregationType } from '@hypertrace/distributed-tracing';
33
import { GraphQlRequestCacheability, GraphQlRequestOptions } from '@hypertrace/graphql-client';
44
import { ModelApi } from '@hypertrace/hyperdash';
@@ -8,6 +8,10 @@ import {
88
ENTITY_TOPOLOGY_GQL_REQUEST,
99
TopologyNodeSpecification
1010
} from '../../../../graphql/request/handlers/entities/query/topology/entity-topology-graphql-query-handler.service';
11+
import { MetricAggregationSpecificationModel } from '../specifiers/metric-aggregation-specification.model';
12+
import { TopologyMetricCategoryModel } from './metrics/topology-metric-category.model';
13+
import { TopologyMetricWithCategoryModel } from './metrics/topology-metric-with-category.model';
14+
import { TopologyMetricsModel } from './metrics/topology-metrics.model';
1115
import { TopologyDataSourceModel } from './topology-data-source.model';
1216

1317
describe('topology data source model', () => {
@@ -17,6 +21,57 @@ describe('topology data source model', () => {
1721
let lastEmittedQuery: unknown;
1822
let lastEmittedQueryRequestOption: GraphQlRequestOptions | undefined;
1923

24+
const createCategoryModel = (
25+
name: string,
26+
minValue: number,
27+
fillColor: Color,
28+
strokeColor: Color,
29+
focusColor: Color,
30+
maxValue?: number
31+
): TopologyMetricCategoryModel => {
32+
const categoryModel = new TopologyMetricCategoryModel();
33+
categoryModel.name = name;
34+
categoryModel.minValue = minValue;
35+
categoryModel.maxValue = maxValue;
36+
categoryModel.fillColor = fillColor;
37+
categoryModel.strokeColor = strokeColor;
38+
categoryModel.focusColor = focusColor;
39+
40+
return categoryModel;
41+
};
42+
43+
const createSpecificationModel = (metric: string, aggregation: MetricAggregationType) => {
44+
const specification = new MetricAggregationSpecificationModel();
45+
specification.metric = metric;
46+
specification.aggregation = aggregation;
47+
48+
specification.modelOnInit();
49+
50+
return specification;
51+
};
52+
53+
const createMetricWithCategory = (
54+
spec: MetricAggregationSpecificationModel,
55+
categories: TopologyMetricCategoryModel[]
56+
) => {
57+
const withCategoryModel = new TopologyMetricWithCategoryModel();
58+
withCategoryModel.specification = spec;
59+
withCategoryModel.categories = categories;
60+
61+
return withCategoryModel;
62+
};
63+
64+
const createTopologyMetricsModel = (metric: string, aggregation: MetricAggregationType) => {
65+
const primary = createMetricWithCategory(createSpecificationModel(metric, aggregation), [
66+
createCategoryModel(metric, 0, Color.Blue2, Color.Blue3, Color.Blue4, 10)
67+
]);
68+
69+
const metricsModel: TopologyMetricsModel = new TopologyMetricsModel();
70+
metricsModel.primary = primary;
71+
72+
return metricsModel;
73+
};
74+
2075
beforeEach(() => {
2176
const mockApi: Partial<ModelApi> = {
2277
getTimeRange: jest.fn(() => testTimeRange)
@@ -25,12 +80,9 @@ describe('topology data source model', () => {
2580
model.downstreamEntityTypes = [ObservabilityEntityType.Api, ObservabilityEntityType.Backend];
2681
model.upstreamEntityTypes = [ObservabilityEntityType.Service];
2782
model.entityType = ObservabilityEntityType.Service;
28-
model.nodeMetricSpecifications = [
29-
specBuilder.metricAggregationSpecForKey('numCalls', MetricAggregationType.Average)
30-
];
31-
model.edgeMetricSpecifications = [
32-
specBuilder.metricAggregationSpecForKey('duration', MetricAggregationType.Average)
33-
];
83+
model.nodeMetricsModel = createTopologyMetricsModel('numCalls', MetricAggregationType.Average);
84+
model.edgeMetricsModel = createTopologyMetricsModel('duration', MetricAggregationType.Average);
85+
3486
model.api = mockApi as ModelApi;
3587
model.query$.subscribe(query => {
3688
lastEmittedQuery = query.buildRequest([]);

projects/observability/src/shared/dashboard/widgets/topology/edge/curved/entity-edge-curve-renderer.service.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,13 @@ export class EntityEdgeCurveRendererService implements TopologyEdgeRenderDelegat
263263
primaryMetricCategory?: TopologyMetricCategoryData,
264264
secondaryMetricCategory?: TopologyMetricCategoryData
265265
): string {
266-
if (secondaryMetricCategory?.highestPrecedence === true || !primaryMetricCategory) {
267-
return this.formattedMetricValue(secondaryMetricAggregation!.value, secondaryMetricAggregation?.units);
266+
if (secondaryMetricAggregation && (secondaryMetricCategory?.highestPrecedence === true || !primaryMetricCategory)) {
267+
return this.formattedMetricValue(secondaryMetricAggregation.value, secondaryMetricAggregation?.units);
268268
}
269269

270-
return this.formattedMetricValue(primaryMetricAggregation!.value, primaryMetricAggregation?.units);
270+
return primaryMetricAggregation
271+
? this.formattedMetricValue(primaryMetricAggregation.value, primaryMetricAggregation?.units)
272+
: '-';
271273
}
272274

273275
private formattedMetricValue(valueToShow: number, unit?: string): string {

0 commit comments

Comments
 (0)