-
Notifications
You must be signed in to change notification settings - Fork 226
Expand file tree
/
Copy pathmethods-usage-data-provider.test.ts
More file actions
137 lines (103 loc) · 4.99 KB
/
methods-usage-data-provider.test.ts
File metadata and controls
137 lines (103 loc) · 4.99 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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import { CodeQLCliServer } from "../../../../../src/codeql-cli/cli";
import { ExternalApiUsage } from "../../../../../src/data-extensions-editor/external-api-usage";
import { ModelDetailsDataProvider } from "../../../../../src/data-extensions-editor/model-details/methods-usage-data-provider";
import { DatabaseItem } from "../../../../../src/databases/local-databases";
import {
createExternalApiUsage,
createUsage,
} from "../../../../factories/data-extension/external-api-factories";
import { mockedObject } from "../../../utils/mocking.helpers";
describe("ModelDetailsDataProvider", () => {
const mockCliServer = mockedObject<CodeQLCliServer>({});
let dataProvider: ModelDetailsDataProvider;
beforeEach(() => {
dataProvider = new ModelDetailsDataProvider(mockCliServer);
});
describe("setState", () => {
const hideModeledApis = false;
const externalApiUsages: ExternalApiUsage[] = [];
const dbItem = mockedObject<DatabaseItem>({
getSourceLocationPrefix: () => "test",
});
it("should not emit onDidChangeTreeData event when state has not changed", async () => {
await dataProvider.setState(externalApiUsages, dbItem, hideModeledApis);
const onDidChangeTreeDataListener = jest.fn();
dataProvider.onDidChangeTreeData(onDidChangeTreeDataListener);
await dataProvider.setState(externalApiUsages, dbItem, hideModeledApis);
expect(onDidChangeTreeDataListener).not.toHaveBeenCalled();
});
it("should emit onDidChangeTreeData event when externalApiUsages has changed", async () => {
const externalApiUsages2: ExternalApiUsage[] = [];
await dataProvider.setState(externalApiUsages, dbItem, hideModeledApis);
const onDidChangeTreeDataListener = jest.fn();
dataProvider.onDidChangeTreeData(onDidChangeTreeDataListener);
await dataProvider.setState(externalApiUsages2, dbItem, hideModeledApis);
expect(onDidChangeTreeDataListener).toHaveBeenCalledTimes(1);
});
it("should emit onDidChangeTreeData event when dbItem has changed", async () => {
const dbItem2 = mockedObject<DatabaseItem>({
getSourceLocationPrefix: () => "test",
});
await dataProvider.setState(externalApiUsages, dbItem, hideModeledApis);
const onDidChangeTreeDataListener = jest.fn();
dataProvider.onDidChangeTreeData(onDidChangeTreeDataListener);
await dataProvider.setState(externalApiUsages, dbItem2, hideModeledApis);
expect(onDidChangeTreeDataListener).toHaveBeenCalledTimes(1);
});
it("should emit onDidChangeTreeData event when hideModeledApis has changed", async () => {
await dataProvider.setState(externalApiUsages, dbItem, hideModeledApis);
const onDidChangeTreeDataListener = jest.fn();
dataProvider.onDidChangeTreeData(onDidChangeTreeDataListener);
await dataProvider.setState(externalApiUsages, dbItem, !hideModeledApis);
expect(onDidChangeTreeDataListener).toHaveBeenCalledTimes(1);
});
it("should emit onDidChangeTreeData event when all entries have changed", async () => {
const dbItem2 = mockedObject<DatabaseItem>({
getSourceLocationPrefix: () => "test",
});
const externalApiUsages2: ExternalApiUsage[] = [];
await dataProvider.setState(externalApiUsages, dbItem, hideModeledApis);
const onDidChangeTreeDataListener = jest.fn();
dataProvider.onDidChangeTreeData(onDidChangeTreeDataListener);
await dataProvider.setState(
externalApiUsages2,
dbItem2,
!hideModeledApis,
);
expect(onDidChangeTreeDataListener).toHaveBeenCalledTimes(1);
});
});
describe("getChildren", () => {
const supportedExternalApiUsage = createExternalApiUsage({
supported: true,
});
const unsupportedExternalApiUsage = createExternalApiUsage({
supported: false,
});
const externalApiUsages: ExternalApiUsage[] = [
supportedExternalApiUsage,
unsupportedExternalApiUsage,
];
const dbItem = mockedObject<DatabaseItem>({
getSourceLocationPrefix: () => "test",
});
const usage = createUsage({});
it("should return [] if item is a usage", async () => {
expect(dataProvider.getChildren(usage)).toEqual([]);
});
it("should return usages if item is external api usage", async () => {
const externalApiUsage = createExternalApiUsage({ usages: [usage] });
expect(dataProvider.getChildren(externalApiUsage)).toEqual([usage]);
});
it("should show all externalApiUsages if hideModeledApis is false and looking at the root", async () => {
const hideModeledApis = false;
await dataProvider.setState(externalApiUsages, dbItem, hideModeledApis);
expect(dataProvider.getChildren().length).toEqual(2);
});
it("should filter externalApiUsages if hideModeledApis is true and looking at the root", async () => {
const hideModeledApis = true;
await dataProvider.setState(externalApiUsages, dbItem, hideModeledApis);
expect(dataProvider.getChildren().length).toEqual(1);
});
});
});