aboutsummaryrefslogtreecommitdiff
path: root/tst/args.spec.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth@simponic.xyz>2024-08-01 09:15:33 -0700
committerElizabeth Hunt <elizabeth@simponic.xyz>2024-08-01 09:15:33 -0700
commit5dbd16878546886cae5b56b67de6185bfbae0d07 (patch)
tree8dd29c83d8f56b254d964ec040be9bcea0bc108b /tst/args.spec.ts
parentad74ff999589e0df2b60ba6e94362ed5215af312 (diff)
downloadmon.hatecomputers.club-5dbd16878546886cae5b56b67de6185bfbae0d07.tar.gz
mon.hatecomputers.club-5dbd16878546886cae5b56b67de6185bfbae0d07.zip
add arg parser
Diffstat (limited to 'tst/args.spec.ts')
-rw-r--r--tst/args.spec.ts104
1 files changed, 104 insertions, 0 deletions
diff --git a/tst/args.spec.ts b/tst/args.spec.ts
new file mode 100644
index 0000000..2da0e83
--- /dev/null
+++ b/tst/args.spec.ts
@@ -0,0 +1,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);
+});