ilsanchez/simple-query-params

View on GitHub
__tests__/query-param.spec.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { QueryParam } from "../src/query-params";

test("QueryParam with plain string value", () => {
  const qParamStr = new QueryParam("name", "value");

  expect(qParamStr).toBeInstanceOf(QueryParam);

  expect(qParamStr.value).toBe("value");

  expect(qParamStr.isString).toBeTruthy();

  expect(qParamStr.isArray).toBeFalsy();

  expect(qParamStr.isNumber).toBeFalsy();

  expect(qParamStr.stringified).toBe("name=value");

  expect(qParamStr.type).toBe("string");

  expect(qParamStr.name).toBe("name");

  qParamStr.setValue(['v', 'a', 'l', 'u', 'e']);

  expect(qParamStr.isArray).toBeTruthy();
});

test("QueryParam with number value", () => {
  const qParamNmb = new QueryParam("name", 420);

  expect(qParamNmb).toBeInstanceOf(QueryParam);

  expect(qParamNmb.value).toBe(420);

  expect(qParamNmb.isString).toBeFalsy();

  expect(qParamNmb.isArray).toBeFalsy();

  expect(qParamNmb.isNumber).toBeTruthy();

  expect(qParamNmb.stringified).toBe("name=420");

  expect(qParamNmb.type).toBe("number");

  expect(qParamNmb.name).toBe("name");

  qParamNmb.setValue("v,a,l,u,e");

  expect(qParamNmb.isArray).toBeTruthy();
});

test("QueryParam with plain array value", () => {
  const value = ["v", "a", "l", "u", "e"];

  const qParamArr = new QueryParam("name", value);

  expect(qParamArr).toBeInstanceOf(QueryParam);

  expect(qParamArr.value).toEqual(value);

  expect(qParamArr.isString).toBeFalsy();

  expect(qParamArr.isArray).toBeTruthy();

  expect(qParamArr.isNumber).toBeFalsy();

  expect(qParamArr.stringified).toBe("name=v,a,l,u,e");

  expect(qParamArr.type).toBe("array");

  expect(qParamArr.name).toBe("name");

  qParamArr.setValue(420);

  expect(qParamArr.isNumber).toBeTruthy();
});

test("QueryParam with stringified array value", () => {
  const qParamArrStr = new QueryParam("name", "v, a, l, u, e");

  expect(qParamArrStr).toBeInstanceOf(QueryParam);

  expect(qParamArrStr.value).toEqual(["v", "a", "l", "u", "e"]);

  expect(qParamArrStr.isString).toBeFalsy();

  expect(qParamArrStr.isArray).toBeTruthy();

  expect(qParamArrStr.isNumber).toBeFalsy();

  expect(qParamArrStr.stringified).toBe("name=v,a,l,u,e");

  expect(qParamArrStr.type).toBe("array");

  expect(qParamArrStr.name).toBe("name");

  qParamArrStr.setValue("stringValue");

  expect(qParamArrStr.isString).toBeTruthy();
});

test("QueryParam should throw an error if invalid value is passed", () => {
  expect(() => new QueryParam("name", { foo: "bar" } as any)).toThrowError();
  expect(() => new QueryParam("name", (() => ({})) as any)).toThrowError();
});

test('QueryParam should throw an error when invalid value is passed to "setValue"', () => {
  const qp = new QueryParam("name", "value");

  expect(() => qp.setValue({ foo: "bar" } as any)).toThrowError();
});

test('"setValue" should work as expected ¯\_(ツ)_/¯', () => {
  const qp = new QueryParam('name', 'value');

  qp.setValue(420);
  expect(qp.isNumber).toBeTruthy();
  expect(qp.value).toEqual(420);

  qp.setValue(['v', 'a']);
  qp.setValue(['l', 'u', 'e'], 'append');
  expect(qp.value).toEqual(['v', 'a', 'l', 'u', 'e']);
  expect(qp.isArray).toBeTruthy();
})