Skip to content

Commit 7a41d9c

Browse files
authored
Add unit test for createModeledMethodKey (#3521)
1 parent 45e20f4 commit 7a41d9c

File tree

1 file changed

+129
-1
lines changed

1 file changed

+129
-1
lines changed

extensions/ql-vscode/test/unit-tests/model-editor/modeled-method.test.ts

Lines changed: 129 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1-
import { createNoneModeledMethod } from "../../factories/model-editor/modeled-method-factories";
1+
import {
2+
createNeutralModeledMethod,
3+
createNoneModeledMethod,
4+
createSinkModeledMethod,
5+
createSourceModeledMethod,
6+
createSummaryModeledMethod,
7+
} from "../../factories/model-editor/modeled-method-factories";
28
import type { ModeledMethod } from "../../../src/model-editor/modeled-method";
39
import {
10+
createModeledMethodKey,
411
modeledMethodSupportsInput,
512
modeledMethodSupportsKind,
613
modeledMethodSupportsOutput,
@@ -50,3 +57,124 @@ describe("modeledMethodSupportsProvenance", () => {
5057
}
5158
});
5259
});
60+
61+
describe("createModeledMethodKey", () => {
62+
it("should create a key for a modeled method", () => {
63+
const modeledMethod = createNoneModeledMethod();
64+
const key = createModeledMethodKey(modeledMethod);
65+
66+
const expectedKey =
67+
'{"endpointType":"method","methodName":"createQuery","methodParameters":"(String)","packageName":"org.sql2o","signature":"org.sql2o.Connection#createQuery(String)","type":"none","typeName":"Connection"}';
68+
69+
expect(key).toBe(expectedKey);
70+
});
71+
72+
it("should check that two modeled methods are the same", () => {
73+
const modeledMethod = createSummaryModeledMethod();
74+
const key = createModeledMethodKey(modeledMethod);
75+
76+
const modeledMethod2 = createSummaryModeledMethod();
77+
const key2 = createModeledMethodKey(modeledMethod2);
78+
79+
// Object references are different, but the keys are the same.
80+
expect(modeledMethod).not.toBe(modeledMethod2);
81+
expect(key).toEqual(key2);
82+
});
83+
84+
it("should always set provenance to manual", () => {
85+
const modeledMethod = createSinkModeledMethod({
86+
provenance: "df-generated",
87+
});
88+
const key = createModeledMethodKey(modeledMethod);
89+
90+
expect(key).not.toContain('"provenance":"df-generated"');
91+
expect(key).toContain('"provenance":"manual"');
92+
});
93+
94+
describe("ignores unused properties", () => {
95+
it("for source modeled methods", () => {
96+
const modeledMethod = createSourceModeledMethod({
97+
output: "ReturnValue",
98+
...{
99+
input: "Argument[this]",
100+
},
101+
});
102+
const key = createModeledMethodKey(modeledMethod);
103+
104+
const modeledMethod2 = createSourceModeledMethod({
105+
output: "ReturnValue",
106+
...{
107+
input: "Argument[1]",
108+
},
109+
});
110+
const key2 = createModeledMethodKey(modeledMethod2);
111+
112+
expect(key).not.toContain("input");
113+
expect(key).toEqual(key2);
114+
});
115+
116+
it("for sink modeled methods", () => {
117+
const modeledMethod = createSinkModeledMethod({
118+
input: "Argument[this]",
119+
...{
120+
output: "ReturnValue",
121+
},
122+
});
123+
const key = createModeledMethodKey(modeledMethod);
124+
125+
const modeledMethod2 = createSinkModeledMethod({
126+
input: "Argument[this]",
127+
...{
128+
output: "Argument[this]",
129+
},
130+
});
131+
const key2 = createModeledMethodKey(modeledMethod2);
132+
133+
expect(key).not.toContain("output");
134+
expect(key).toEqual(key2);
135+
});
136+
137+
it("for summary modeled methods", () => {
138+
const modeledMethod = createSummaryModeledMethod({
139+
input: "Argument[this]",
140+
output: "ReturnValue",
141+
...{ supported: true },
142+
});
143+
const key = createModeledMethodKey(modeledMethod);
144+
145+
const modeledMethod2 = createSummaryModeledMethod({
146+
input: "Argument[this]",
147+
output: "ReturnValue",
148+
...{ supported: false },
149+
});
150+
const key2 = createModeledMethodKey(modeledMethod2);
151+
152+
expect(key).not.toContain("supported");
153+
expect(key).toEqual(key2);
154+
});
155+
156+
it("for neutral modeled methods", () => {
157+
const modeledMethod = createNeutralModeledMethod({
158+
type: "neutral",
159+
...{
160+
input: "Argument[this]",
161+
output: "ReturnValue",
162+
},
163+
});
164+
const key = createModeledMethodKey(modeledMethod);
165+
166+
const modeledMethod2 = createNeutralModeledMethod({
167+
type: "neutral",
168+
...{
169+
input: "Argument[1]",
170+
output: "ReturnValue",
171+
},
172+
});
173+
const key2 = createModeledMethodKey(modeledMethod2);
174+
175+
expect(key).not.toContain("input");
176+
expect(key).not.toContain("output");
177+
expect(key).toEqual(key2);
178+
});
179+
});
180+
});

0 commit comments

Comments
 (0)