Files
vscode-codeql/extensions/ql-vscode/test/unit-tests/model-editor/languages/ruby/generate.test.ts
2024-02-26 12:11:16 +01:00

163 lines
4.8 KiB
TypeScript

import type { DecodedBqrs } from "../../../../../src/common/bqrs-cli-types";
import { parseGenerateModelResults } from "../../../../../src/model-editor/languages/ruby/generate";
import { ruby } from "../../../../../src/model-editor/languages/ruby";
import { createMockLogger } from "../../../../__mocks__/loggerMock";
import type { ModeledMethod } from "../../../../../src/model-editor/modeled-method";
import { EndpointType } from "../../../../../src/model-editor/method";
import { Mode } from "../../../../../src/model-editor/shared/mode";
import { defaultModelConfig } from "../../../../../src/model-editor/languages";
describe("parseGenerateModelResults", () => {
it("should return the results", async () => {
const bqrs: DecodedBqrs = {
sourceModel: {
columns: [
{ name: "type", kind: "String" },
{ name: "path", kind: "String" },
{ name: "kind", kind: "String" },
],
tuples: [],
},
sinkModel: {
columns: [
{ name: "type", kind: "String" },
{ name: "path", kind: "String" },
{ name: "kind", kind: "String" },
],
tuples: [],
},
typeVariableModel: {
columns: [
{ name: "name", kind: "String" },
{ name: "path", kind: "String" },
],
tuples: [],
},
typeModel: {
columns: [
{ name: "type1", kind: "String" },
{ name: "type2", kind: "String" },
{ name: "path", kind: "String" },
],
tuples: [
["Array", "SQLite3::ResultSet", "Method[types].ReturnValue"],
["Array", "SQLite3::ResultSet", "Method[columns].ReturnValue"],
["Array", "SQLite3::Statement", "Method[types].ReturnValue"],
["Array", "SQLite3::Statement", "Method[columns].ReturnValue"],
],
},
summaryModel: {
columns: [
{ name: "type", kind: "String" },
{ name: "path", kind: "String" },
{ name: "input", kind: "String" },
{ name: "output", kind: "String" },
{ name: "kind", kind: "String" },
],
tuples: [
[
"SQLite3::Database",
"Method[create_function]",
"Argument[self]",
"ReturnValue",
"value",
],
[
"SQLite3::Value!",
"Method[new]",
"Argument[1]",
"ReturnValue",
"value",
],
],
},
};
const result = parseGenerateModelResults(
"/a/b/c/query.ql",
bqrs,
ruby,
createMockLogger(),
{
mode: Mode.Framework,
config: {
...defaultModelConfig,
showTypeModels: true,
},
},
);
expect(result).toEqual([
{
endpointType: EndpointType.Method,
methodName: "types",
methodParameters: "",
packageName: "",
path: "ReturnValue",
relatedTypeName: "Array",
signature: "SQLite3::ResultSet#types",
type: "type",
typeName: "SQLite3::ResultSet",
},
{
endpointType: EndpointType.Method,
methodName: "columns",
methodParameters: "",
packageName: "",
path: "ReturnValue",
relatedTypeName: "Array",
signature: "SQLite3::ResultSet#columns",
type: "type",
typeName: "SQLite3::ResultSet",
},
{
endpointType: EndpointType.Method,
methodName: "types",
methodParameters: "",
packageName: "",
path: "ReturnValue",
relatedTypeName: "Array",
signature: "SQLite3::Statement#types",
type: "type",
typeName: "SQLite3::Statement",
},
{
endpointType: EndpointType.Method,
methodName: "columns",
methodParameters: "",
packageName: "",
path: "ReturnValue",
relatedTypeName: "Array",
signature: "SQLite3::Statement#columns",
type: "type",
typeName: "SQLite3::Statement",
},
{
endpointType: EndpointType.Method,
input: "Argument[self]",
kind: "value",
methodName: "create_function",
methodParameters: "",
output: "ReturnValue",
packageName: "",
provenance: "manual",
signature: "SQLite3::Database#create_function",
type: "summary",
typeName: "SQLite3::Database",
},
{
endpointType: EndpointType.Constructor,
input: "Argument[1]",
kind: "value",
methodName: "new",
methodParameters: "",
output: "ReturnValue",
packageName: "",
provenance: "manual",
signature: "SQLite3::Value!#new",
type: "summary",
typeName: "SQLite3::Value!",
},
] satisfies ModeledMethod[]);
});
});