aboutsummaryrefslogtreecommitdiff
path: root/tst/args.spec.ts
blob: 2da0e83aa485efdc0ef2191a9add892bcd7b2397 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import { test, expect } from "bun:test";
import * as E from "fp-ts/lib/Either";
import * as O from "fp-ts/lib/Option";
import { parseArgs, type Args } from "../src/args";
import { TestType } from "../src/canary";

test("should return an error if argv has less than 2 arguments", () => {
  const result = parseArgs([]);
  expect(E.isLeft(result)).toBe(true);
  expect(E.left<string, Args>("bad argv")).toEqual(result);
});

test("should return an error if --tests-file is not specified", () => {
  const result = parseArgs(["node", "script.js", "--test-name", "test"]);
  expect(E.isLeft(result)).toBe(true);
  expect(E.left<string, Args>("please specify a test file")).toEqual(result);
});

test("should return an error if test type is invalid", () => {
  const result = parseArgs([
    "bun",
    "script.js",
    "--tests-file",
    "testFile",
    "--test-type",
    "invalidType",
  ]);
  expect(E.isLeft(result)).toBe(true);
  expect(E.left<string, Args>("bad test type invalidType")).toEqual(result);
});

test("should parse arguments correctly with all options specified", () => {
  const result = parseArgs([
    "node",
    "script.js",
    "--tests-file",
    "testFile",
    "--test-name",
    "testName",
    "--test-type",
    "dns",
  ]);

  const expected: Args = {
    testsFile: "testFile",
    testName: O.some("testName"),
    testType: O.some(TestType.DNS),
  };

  expect(E.isRight(result)).toBe(true);
  expect(E.right<string, Args>(expected)).toEqual(result);
});

test("should parse arguments correctly with only testsFile specified", () => {
  const result = parseArgs(["node", "script.js", "--tests-file", "testFile"]);

  const expected: Args = {
    testsFile: "testFile",
    testName: O.none,
    testType: O.none,
  };

  expect(E.isRight(result)).toBe(true);
  expect(E.right<string, Args>(expected)).toEqual(result);
});

test("should handle missing values for flags gracefully", () => {
  const result = parseArgs([
    "node",
    "script.js",
    "--tests-file",
    "testFile",
    "--test-name",
  ]);

  const expected: Args = {
    testsFile: "testFile",
    testName: O.none,
    testType: O.none,
  };

  expect(E.isRight(result)).toBe(true);
  expect(E.right<string, Args>(expected)).toEqual(result);
});

test("should not parse args as values", () => {
  const result = parseArgs([
    "node",
    "script.js",
    "--tests-file",
    "testFile",
    "--test-name",
    "--tests-file",
  ]);

  const expected: Args = {
    testsFile: "testFile",
    testName: O.none,
    testType: O.none,
  };

  expect(E.isRight(result)).toBe(true);
  expect(E.right<string, Args>(expected)).toEqual(result);
});