averias/redis-time-series

View on GitHub
src/__tests__/unit/builder/requestParamsDirector.test.ts

Summary

Maintainability
A
1 hr
Test Coverage
import { RequestParamsDirector } from "../../../builder/requestParamsDirector";
import { Label } from "../../../entity/label";
import { AggregationType } from "../../../enum/aggregationType";
import { CommandKeyword } from "../../../enum/commandKeyword";
import { Sample } from "../../../entity/sample";
import { Aggregation } from "../../../entity/aggregation";
import { TimestampRange } from "../../../entity/timestampRange";
import { FilterBuilder } from "../../../builder/filterBuilder";
import { RequestParamsBuilder } from "../../../builder/requestParamsBuilder";

let director: RequestParamsDirector;
let label1: Label;
let label2: Label;
let sample1: Sample;
let sample2: Sample;
let date: number;
let aggregation: Aggregation;
let timestampRange: TimestampRange;
let filterBuilder: FilterBuilder;

beforeAll(() => {
    date = Date.now();
    label1 = new Label("label1", 100);
    label2 = new Label("label2", 200);
    sample1 = new Sample("sample1", 10, date - 10000);
    sample2 = new Sample("sample2", 20, date - 20000);
    aggregation = new Aggregation(AggregationType.MAX, date);
    timestampRange = new TimestampRange(date - 20000, date - 10000);
    filterBuilder = new FilterBuilder("filter", 5);
});

beforeEach(() => {
    director = new RequestParamsDirector(new RequestParamsBuilder());
});

test("create with labels and retention", () => {
    expect(director.create("key", [label1, label2], 10000).get()).toEqual([
        "key",
        CommandKeyword.RETENTION,
        10000,
        CommandKeyword.LABELS,
        label1.getName(),
        label1.getValue(),
        label2.getName(),
        label2.getValue()
    ]);
});

test("create without retention", () => {
    expect(director.create("key", [label1, label2]).get()).toEqual([
        "key",
        CommandKeyword.LABELS,
        label1.getName(),
        label1.getValue(),
        label2.getName(),
        label2.getValue()
    ]);
});

test("create without labels", () => {
    expect(director.create("key", undefined, 10000).get()).toEqual(["key", CommandKeyword.RETENTION, 10000]);
});

test("create with empty labels", () => {
    expect(director.create("key", [], 10000).get()).toEqual(["key", CommandKeyword.RETENTION, 10000]);
});

test("create default", () => {
    expect(director.create("key").get()).toEqual(["key"]);
});

test("alter with labels and retention", () => {
    expect(director.alter("key", [label1, label2], 10000).get()).toEqual([
        "key",
        CommandKeyword.RETENTION,
        10000,
        CommandKeyword.LABELS,
        label1.getName(),
        label1.getValue(),
        label2.getName(),
        label2.getValue()
    ]);
});

test("alter without retention", () => {
    expect(director.alter("key", [label1, label2]).get()).toEqual([
        "key",
        CommandKeyword.LABELS,
        label1.getName(),
        label1.getValue(),
        label2.getName(),
        label2.getValue()
    ]);
});

test("alter without labels", () => {
    expect(director.alter("key", undefined, 10000).get()).toEqual(["key", CommandKeyword.RETENTION, 10000]);
});

test("alter with empty labels", () => {
    expect(director.alter("key", [], 10000).get()).toEqual([
        "key",
        CommandKeyword.RETENTION,
        10000,
        CommandKeyword.LABELS
    ]);
});

test("alter default", () => {
    expect(director.alter("key").get()).toEqual(["key"]);
});

test("add with labels and retention", () => {
    expect(director.add(sample1, [label1, label2], 10000).get()).toEqual([
        "sample1",
        date - 10000,
        10,
        CommandKeyword.RETENTION,
        10000,
        CommandKeyword.LABELS,
        label1.getName(),
        label1.getValue(),
        label2.getName(),
        label2.getValue()
    ]);
});

test("add without retention", () => {
    expect(director.add(sample1, [label1, label2]).get()).toEqual([
        "sample1",
        date - 10000,
        10,
        CommandKeyword.LABELS,
        label1.getName(),
        label1.getValue(),
        label2.getName(),
        label2.getValue()
    ]);
});

test("add without labels", () => {
    expect(director.add(sample1, undefined, 10000).get()).toEqual([
        "sample1",
        date - 10000,
        10,
        CommandKeyword.RETENTION,
        10000
    ]);
});

test("add with empty labels", () => {
    expect(director.add(sample1, [], 10000).get()).toEqual([
        "sample1",
        date - 10000,
        10,
        CommandKeyword.RETENTION,
        10000
    ]);
});

test("create default", () => {
    expect(director.add(sample1).get()).toEqual(["sample1", date - 10000, 10]);
});

test("multiadd", () => {
    expect(director.multiAdd([sample1, sample2]).get()).toEqual([
        "sample1",
        date - 10000,
        10,
        "sample2",
        date - 20000,
        20
    ]);
});

test("multiadd with empty labels", () => {
    expect(director.multiAdd([]).get().length).toEqual(0);
});

test("change by with labels and retention", () => {
    expect(director.changeBy(sample1, [label1, label2], 10000).get()).toEqual([
        "sample1",
        10,
        CommandKeyword.TIMESTAMP,
        date - 10000,
        CommandKeyword.RETENTION,
        10000,
        CommandKeyword.LABELS,
        label1.getName(),
        label1.getValue(),
        label2.getName(),
        label2.getValue()
    ]);
});

test("change by without retention", () => {
    expect(director.changeBy(sample1, [label1, label2]).get()).toEqual([
        "sample1",
        10,
        CommandKeyword.TIMESTAMP,
        date - 10000,
        CommandKeyword.LABELS,
        label1.getName(),
        label1.getValue(),
        label2.getName(),
        label2.getValue()
    ]);
});

test("change by without labels", () => {
    expect(director.changeBy(sample1, undefined, 10000).get()).toEqual([
        "sample1",
        10,
        CommandKeyword.TIMESTAMP,
        date - 10000,
        CommandKeyword.RETENTION,
        10000
    ]);
});

test("change by with empty labels", () => {
    expect(director.changeBy(sample1, [], 10000).get()).toEqual([
        "sample1",
        10,
        CommandKeyword.TIMESTAMP,
        date - 10000,
        CommandKeyword.RETENTION,
        10000
    ]);
});

test("change by default", () => {
    expect(director.changeBy(sample1).get()).toEqual(["sample1", 10, CommandKeyword.TIMESTAMP, date - 10000]);
});

test("create rule", () => {
    expect(director.createRule("source", "destination", aggregation).get()).toEqual([
        "source",
        "destination",
        CommandKeyword.AGGREGATION,
        AggregationType.MAX,
        date
    ]);
});

test("create rule with same source and destination fails", () => {
    expect(() => {
        director.createRule("key", "key", aggregation);
    }).toThrow(/source and destination key cannot be equals/);
});

test("delete rule", () => {
    expect(director.deleteRule("source", "destination").get()).toEqual(["source", "destination"]);
});

test("delete rule with same source and destination fails", () => {
    expect(() => {
        director.deleteRule("key", "key");
    }).toThrow(/source and destination key cannot be equals/);
});

test("range with count and aggregation", () => {
    expect(director.range("key", timestampRange, 3, aggregation).get()).toEqual([
        "key",
        date - 20000,
        date - 10000,
        CommandKeyword.COUNT,
        3,
        CommandKeyword.AGGREGATION,
        AggregationType.MAX,
        date
    ]);
});

test("range without aggregation", () => {
    expect(director.range("key", timestampRange, 3).get()).toEqual([
        "key",
        date - 20000,
        date - 10000,
        CommandKeyword.COUNT,
        3
    ]);
});

test("range without count", () => {
    expect(director.range("key", timestampRange, undefined, aggregation).get()).toEqual([
        "key",
        date - 20000,
        date - 10000,
        CommandKeyword.AGGREGATION,
        AggregationType.MAX,
        date
    ]);
});

test("range default", () => {
    expect(director.range("key", timestampRange).get()).toEqual(["key", date - 20000, date - 10000]);
});

test("multi range with count and aggregation", () => {
    expect(director.multiRange(timestampRange, filterBuilder, 3, aggregation).get()).toEqual([
        date - 20000,
        date - 10000,
        CommandKeyword.COUNT,
        3,
        CommandKeyword.AGGREGATION,
        AggregationType.MAX,
        date,
        CommandKeyword.FILTER,
        "filter=5"
    ]);
});

test("multi range without aggregation", () => {
    expect(director.multiRange(timestampRange, filterBuilder, 3).get()).toEqual([
        date - 20000,
        date - 10000,
        CommandKeyword.COUNT,
        3,
        CommandKeyword.FILTER,
        "filter=5"
    ]);
});

test("multi range without count", () => {
    expect(director.multiRange(timestampRange, filterBuilder, undefined, aggregation).get()).toEqual([
        date - 20000,
        date - 10000,
        CommandKeyword.AGGREGATION,
        AggregationType.MAX,
        date,
        CommandKeyword.FILTER,
        "filter=5"
    ]);
});

test("multi range default", () => {
    expect(director.multiRange(timestampRange, filterBuilder).get()).toEqual([
        date - 20000,
        date - 10000,
        CommandKeyword.FILTER,
        "filter=5"
    ]);
});

test("get key", () => {
    expect(director.getKey("key").get()).toEqual(["key"]);
});

test("multi get", () => {
    expect(director.multiGet(filterBuilder).get()).toEqual([CommandKeyword.FILTER, "filter=5"]);
});

test("query index", () => {
    expect(director.queryIndex(filterBuilder).get()).toEqual(["filter=5"]);
});