-
-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathview.test.ts
More file actions
103 lines (89 loc) · 3.58 KB
/
Copy pathview.test.ts
File metadata and controls
103 lines (89 loc) · 3.58 KB
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
/**
* Profile View Command Tests
*
* Tests for positional argument parsing in src/commands/profile/view.ts
*/
import { describe, expect, test } from "bun:test";
import { parsePositionalArgs } from "../../../src/commands/profile/view.js";
import { ContextError } from "../../../src/lib/errors.js";
describe("parsePositionalArgs", () => {
describe("single argument (transaction only)", () => {
test("parses single arg as transaction name", () => {
const result = parsePositionalArgs(["/api/users"]);
expect(result.transactionRef).toBe("/api/users");
expect(result.targetArg).toBeUndefined();
});
test("parses transaction index", () => {
const result = parsePositionalArgs(["1"]);
expect(result.transactionRef).toBe("1");
expect(result.targetArg).toBeUndefined();
});
test("parses transaction alias", () => {
const result = parsePositionalArgs(["a"]);
expect(result.transactionRef).toBe("a");
expect(result.targetArg).toBeUndefined();
});
test("parses complex transaction name", () => {
const result = parsePositionalArgs(["POST /api/v2/users/:id/settings"]);
expect(result.transactionRef).toBe("POST /api/v2/users/:id/settings");
expect(result.targetArg).toBeUndefined();
});
});
describe("two arguments (target + transaction)", () => {
test("parses org/project target and transaction name", () => {
const result = parsePositionalArgs(["my-org/backend", "/api/users"]);
expect(result.targetArg).toBe("my-org/backend");
expect(result.transactionRef).toBe("/api/users");
});
test("parses project-only target and transaction", () => {
const result = parsePositionalArgs(["backend", "/api/users"]);
expect(result.targetArg).toBe("backend");
expect(result.transactionRef).toBe("/api/users");
});
test("parses org/ target (all projects) and transaction", () => {
const result = parsePositionalArgs(["my-org/", "/api/users"]);
expect(result.targetArg).toBe("my-org/");
expect(result.transactionRef).toBe("/api/users");
});
test("parses target and transaction index", () => {
const result = parsePositionalArgs(["my-org/backend", "1"]);
expect(result.targetArg).toBe("my-org/backend");
expect(result.transactionRef).toBe("1");
});
test("parses target and transaction alias", () => {
const result = parsePositionalArgs(["my-org/backend", "a"]);
expect(result.targetArg).toBe("my-org/backend");
expect(result.transactionRef).toBe("a");
});
});
describe("error cases", () => {
test("throws ContextError for empty args", () => {
expect(() => parsePositionalArgs([])).toThrow(ContextError);
});
test("throws ContextError with usage hint", () => {
try {
parsePositionalArgs([]);
expect.unreachable("Should have thrown");
} catch (error) {
expect(error).toBeInstanceOf(ContextError);
expect((error as ContextError).message).toContain("Transaction");
}
});
});
describe("edge cases", () => {
test("handles more than two args (ignores extras)", () => {
const result = parsePositionalArgs([
"my-org/backend",
"/api/users",
"extra-arg",
]);
expect(result.targetArg).toBe("my-org/backend");
expect(result.transactionRef).toBe("/api/users");
});
test("handles empty string transaction in two-arg case", () => {
const result = parsePositionalArgs(["my-org/backend", ""]);
expect(result.targetArg).toBe("my-org/backend");
expect(result.transactionRef).toBe("");
});
});
});