ffbt
Version:
Build a Typescript app without pain
150 lines (149 loc) • 5.12 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("./index");
describe("Environment", () => {
let environments;
beforeEach(() => {
environments = new index_1.EnvironmentRegistry();
});
describe("add/get environment", () => {
test("env can be registered by name", () => {
expect(environments.size).toBe(0);
environments.add("myEnvironment", { a: 1 });
expect(environments.size).toBe(1);
});
test("env contains its name after registering", () => {
environments.add("A", { a: 1 });
expect(environments.get("A")).toStrictEqual({
_name: "A",
a: 1,
});
});
test("get registered env by name", () => {
environments.add("myEnvironment", { a: 1 });
const myEnvironment = environments.get("myEnvironment");
expect(myEnvironment.a).toBe(1);
});
// TODO: make error snapshot
test("throw error if trying to get env that doesn't exist", () => {
expect(() => {
environments.get("envThatDoesntExist");
}).toThrowError();
});
test("add many environments", () => {
environments.addMany({
e1: {},
e2: {}
});
expect(environments.size).toBe(2);
expect(environments.get("e1")._name).toBe("e1");
expect(environments.get("e2")._name).toBe("e2");
});
test("add many in proper order", () => {
environments.addMany({
e1: {
_extends: "e2"
},
e2: {
a: "1",
}
});
expect(environments.get("e2")).toMatchObject({
a: "1",
});
});
test("add many and handle circular dependencies", () => {
expect(() => {
environments.addMany({
e1: {
_extends: "e2"
},
e2: {
_extends: "e1"
}
});
}).toThrow(new RegExp(index_1.CIRCULAR_DEPENDENCY_ERROR_TEXT));
});
test("don't add the similar environment twice", () => {
const spyForAdd = jest.spyOn(environments, "add");
environments.addMany({
e1: {
_extends: "e2"
},
e2: {}
});
expect(spyForAdd).toHaveBeenCalledTimes(2);
expect(spyForAdd).toHaveBeenNthCalledWith(1, "e2", { "_name": "e2" });
expect(spyForAdd).toHaveBeenNthCalledWith(2, "e1", { "_extends": "e2" });
});
});
describe("extension", () => {
test("environments can be extended from each other during register", () => {
environments.add("envA", { a: 1 });
environments.add("envB", {
_extends: "envA",
b: 2
});
expect(environments.get("envB")).toMatchObject({
_extends: "envA",
a: 1,
b: 2,
});
});
test("envs can be extended recursively", () => {
environments.add("envA", { a: 1 });
environments.add("envB", {
_extends: "envA",
b: 2
});
environments.add("envC", {
_extends: "envB",
c: 3,
});
expect(environments.get("envC")).toMatchObject({
_extends: "envB",
a: 1,
b: 2,
c: 3
});
});
test("Env name doesn't change after extension", () => {
environments.add("envA", { a: 1 });
environments.add("envB", {
_extends: "envA",
b: 2
});
expect(environments.get("envB")).toStrictEqual({
_name: "envB",
_extends: "envA",
a: 1,
b: 2
});
});
// TODO: make error snapshot
test("throw error if env trying to extend itself", () => {
expect(() => {
environments.add("envA", {
_extends: "envA",
a: 1
});
}).toThrowError();
});
// TODO: make error snapshot
test("error if extends env that doesn't exist", () => {
expect(() => {
environments.add("envA", {
_extends: "envThatDoesntExist"
});
}).toThrowError();
});
test("if extends is empty - extends from default", () => {
environments.add("default", { a: 1 });
environments.add("e1", { b: 2 });
expect(environments.get("e1")).toMatchObject({
a: 1,
b: 2
});
});
});
});