Home Reference Source Repository

src/__tests__/MapShadow.test.js

import MapProperty from "../MapProperty";
import Store from "../Store";


describe("MapShadow", () => {
	var root, shadow, store;

	beforeEach( () => {
		root = new MapProperty();
		store = new Store(root, { a: 1, b: 2 });
		shadow = store._;
	})

	test("clear()", () => {
		shadow.clear();

		expect(Object.keys(shadow.$().nextState()).length).toBe(0);

		return store.waitThen()
			.then( () => {
				expect(store.shadow.size).toBe(0);
			})
	})

	test("delete()", () => {
		shadow.delete("a");

		expect(Object.keys(shadow.$().nextState()).length).toBe(1);

		return store.waitThen()
			.then( () => {
				expect(store.shadow.size).toBe(1);
			})
	})

	test("delete() bad key", () => {
		shadow.delete("badKey");

		expect(Object.keys(shadow.$().nextState()).length).toBe(2);

		return store.waitThen()
			.then( () => {
				expect(store.shadow.size).toBe(2);
			})
	})

	test("get()", () => {
		expect(shadow.get("a")).toBe(1);
	})

	test("has()", () => {
		expect(shadow.has("a")).toBeTruthy;
		expect(shadow.has("b")).toBeTruthy;
		expect(shadow.has("badKey")).toBeFalsy;
	})

	test("keys()", () => {
		const expected = ["a", "b"];
		const found = [];

		for (let key of shadow.keysArray()) {
			found.push(key);
			expect(expected).toContain(key);
		}

		expect(found).toHaveLength(expected.length);
	})

	test("keysArray()", () => {
		const expected = ["a", "b"];

		expect(shadow.keysArray()).toEqual(expect.arrayContaining(expected));
	})

	test("size", () => {
		expect(shadow.size).toBe(2);
	})

	test("values()", () => {
		const expected = [1, 2];
		const found = [];

		for (let key of shadow.values()) {
			found.push(key);
			expect(expected).toContain(key);
		}

		expect(found).toHaveLength(expected.length);
	})

	test("valuesArray()", () => {
		const expected = [1, 2];

		expect(shadow.valuesArray()).toEqual(expect.arrayContaining(expected));
	})

	test("dot access", () => {
		expect(shadow.a).toBe(1);
	})
})