-
Notifications
You must be signed in to change notification settings - Fork 1
/
utils.test.ts
113 lines (102 loc) · 3.82 KB
/
utils.test.ts
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
105
106
107
108
109
110
111
112
113
import { it } from "@jest/globals"; // This is a workaround for type clashes between jest and mocha
import { URI } from "vscode-uri";
import {
getAssociatedWorkflowUriFromTestsUri,
isFormat2WorkflowDocument,
isNativeWorkflowDocument,
isWorkflowTestsDocument,
} from "../../src/common/utils";
// Partially mimics vscode FileStat interface
interface FileStat {
size: number;
}
const FILES_IN_WORKSPACE = ["workflow1.ga", "workflow2.gxwf.yaml", "workflow3.gxwf.yml"];
jest.mock(
"vscode",
() => ({
workspace: {
fs: {
stat: (uri: URI) => {
const file = FILES_IN_WORKSPACE.find((f) => URI.parse(f).path === uri.path);
if (file) {
return Promise.resolve<FileStat>({ size: file.length });
}
throw new Error(`File not found: ${uri.path}`);
},
},
},
}),
{ virtual: true }
);
describe("Common Utils", () => {
describe("isWorkflowTestsDocument", () => {
it.each([
["-test.yml", true],
["-tests.yml", true],
["-test.yaml", true],
["-tests.yaml", true],
["test.txt", false],
["tests.txt", false],
["test.yml", false],
["tests.yml", false],
["whatever.test.yml", false],
["whatever.gxwf.test.yml", false],
["whatevertest.yml", false],
["whatever.gxwftest.yml", false],
])("given '%s' should return %s", (input: string, expected: boolean) => {
expect(isWorkflowTestsDocument(URI.parse(input))).toBe(expected);
});
});
describe("isNativeWorkflowDocument", () => {
it.each([
["test.ga", true],
["whatever.ga", true],
["asd.txt", false],
["test.yaml", false],
])("given '%s' should return %s", (input: string, expected: boolean) => {
expect(isNativeWorkflowDocument(URI.parse(input))).toBe(expected);
});
});
describe("isFormat2WorkflowDocument", () => {
it.each([
["test.gxwf.yaml", true],
["whatever.gxwf.yaml", true],
["test.gxwf.yml", true],
["whatever.gxwf.yml", true],
["asd.txt", false],
["-test.yaml", false],
["whatever-test.yaml", false],
["whatever.gxwf-test.yaml", false],
["whatever.gxwf.test.yaml", false],
])("given '%s' should return %s", (input: string, expected: boolean) => {
expect(isFormat2WorkflowDocument(URI.parse(input))).toBe(expected);
});
});
describe("getAssociatedWorkflowUriFromTestsUri", () => {
it("should return undefined if the input URI is not a workflow tests document", async () => {
const uri = URI.parse("test.txt");
const result = await getAssociatedWorkflowUriFromTestsUri(uri);
expect(result).toBeUndefined();
});
it("should return the associated (.ga) workflow document URI if it exists in workspace", async () => {
const uri = URI.parse("workflow1-test.yaml");
const result = await getAssociatedWorkflowUriFromTestsUri(uri);
expect(result?.path.endsWith("workflow1.ga")).toBe(true);
});
it("should return the associated (yaml) workflow document URI if it exists in workspace", async () => {
const uri = URI.parse("workflow2-test.yaml");
const result = await getAssociatedWorkflowUriFromTestsUri(uri);
expect(result?.path.endsWith("workflow2.gxwf.yaml")).toBe(true);
});
it("should return the associated (yml) workflow document URI if it exists in workspace", async () => {
const uri = URI.parse("workflow3-tests.yaml");
const result = await getAssociatedWorkflowUriFromTestsUri(uri);
expect(result?.path.endsWith("workflow3.gxwf.yml")).toBe(true);
});
it("should return undefined if the associated workflow document does not exist in workspace", async () => {
const uri = URI.parse("nonexistent-test.yaml");
const result = await getAssociatedWorkflowUriFromTestsUri(uri);
expect(result).toBeUndefined();
});
});
});