The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
grafana/public/app/features/trails/services/sorting.test.ts

75 lines
1.9 KiB

Explore Metrics: Introduce augurs sorting options in breakdown view (#91189) * refactor breakdown scene * refactor BreakdownScene along with LayoutSwitcher * rename * don't pass default layout * better type handling * betterer * add @bsull/augurs * implement LabelBreakdownScene * integrate SortByScene in LabelBreakdownScene * move to new directory * introduce BreakdownSearchScene * integrate searchScene * cleaning * initialize @bsull/augurs * add interaction * use new breakdown scene * resolve merge conflicts * ugrade @bsull/augurs * update import * update css * update tooltip text * refine sorting * fix unit test * fix * implement outlier detector * support wasm * jest testing fix * localization fix * use unknown instead of any * update i18n * update betterer * fix locales * update test * fix tests maybe * prettier * chore: update jest config * chore: create mock for @bsull/augurs (#92156) chore: create mock for bsull/augurs @bsull/augurs assumes it will be running as an ESM, not a CommonJS module, so can't be loaded by Jest (specifically because it contains a reference to import.meta.url). This PR provides a mock implementation which gets tests passing again. Ideally we'd be able to load the actual @bsull/augurs module in tests so this is just a stopgap really, until a better solution appears. * fix unit tests * remove unused BreakdownScene.tsx * set outliers as undefined if an error occurs * Add labels * betterer * reset event implemented * fix controls positioning * update augurs * betterer * i18n * conflict fixes * update texts --------- Co-authored-by: Matias Chomicki <matyax@gmail.com> Co-authored-by: Ben Sully <ben.sully@grafana.com>
8 months ago
import { toDataFrame, FieldType, ReducerID } from '@grafana/data';
import { sortSeries } from './sorting';
const frameA = toDataFrame({
fields: [
{ name: 'Time', type: FieldType.time, values: [0] },
{
name: 'Value',
type: FieldType.number,
values: [0, 1, 0],
labels: {
test: 'C',
},
},
],
});
const frameB = toDataFrame({
fields: [
{ name: 'Time', type: FieldType.time, values: [0] },
{
name: 'Value',
type: FieldType.number,
values: [1, 1, 1],
labels: {
test: 'A',
},
},
],
});
const frameC = toDataFrame({
fields: [
{ name: 'Time', type: FieldType.time, values: [0] },
{
name: 'Value',
type: FieldType.number,
values: [100, 9999, 100],
labels: {
test: 'B',
},
},
],
});
describe('sortSeries', () => {
test('Sorts series by standard deviation, descending', () => {
const series = [frameA, frameB, frameC];
const sortedSeries = [frameC, frameA, frameB];
const result = sortSeries(series, ReducerID.stdDev, 'desc');
expect(result).toEqual(sortedSeries);
});
test('Sorts series by standard deviation, ascending', () => {
const series = [frameA, frameB, frameC];
const sortedSeries = [frameB, frameA, frameC];
const result = sortSeries(series, ReducerID.stdDev, 'asc');
expect(result).toEqual(sortedSeries);
});
test('Sorts series alphabetically, ascending', () => {
const series = [frameA, frameB, frameC];
const sortedSeries = [frameB, frameC, frameA];
const result = sortSeries(series, 'alphabetical', 'asc');
expect(result).toEqual(sortedSeries);
});
test('Sorts series alphabetically, descending', () => {
const series = [frameA, frameB, frameC];
const sortedSeries = [frameB, frameC, frameA];
const result = sortSeries(series, 'alphabetical', 'desc');
expect(result).toEqual(sortedSeries);
});
});