Skip to content

Commit 932a1ea

Browse files
authored
Merge pull request #21 from DeepCodeAI/tests
Tests are completed
2 parents efba5d3 + bbf8e06 commit 932a1ea

File tree

8 files changed

+197
-19
lines changed

8 files changed

+197
-19
lines changed

lib/constants/store.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export const STORE_KEYS = {
3131
analysisURL: 'analysisURL',
3232

3333
analysisWasStarted: 'analysisWasStarted',
34+
testEnvironment: 'testEnvironment',
3435
};
3536

3637
export const SHARED_STORE_KEYS = [

lib/deepcode.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,15 @@ export default {
162162
PluginManager.checkFilters(testCallback);
163163
},
164164

165-
scanProject() {
165+
async createBundle() {
166+
return PluginManager.createBundle();
167+
},
168+
169+
async createRemoteBundle() {
170+
return PluginManager.createRemoteBundle();
171+
},
166172

173+
async checkAnalysis() {
174+
return PluginManager.checkAnalysis();
167175
},
168176
};

lib/modules/BundleModule.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,9 @@ class BundleModule {
5050
const scanningInProcess = Store.get(STORE_KEYS.scanningInProcess);
5151
const uploadInProgress = Store.get(STORE_KEYS.uploadInProgress);
5252
const analysisInProgress = Store.get(STORE_KEYS.analysisInProgress);
53+
const testingInProgress = Store.get(STORE_KEYS.testEnvironment);
5354

54-
const isBlocked = (scanningInProcess || uploadInProgress || analysisInProgress);
55+
const isBlocked = (scanningInProcess || uploadInProgress || analysisInProgress || testingInProgress);
5556

5657
return Promise.resolve(isBlocked);
5758
}
@@ -342,6 +343,7 @@ class BundleModule {
342343

343344
async createUploadQueue(chunks, uploadURL) {
344345
const sessionToken = await this.getSessionToken();
346+
const isTesting = Store.get(STORE_KEYS.testEnvironment);
345347

346348
const q = queue({
347349
results: [],
@@ -369,7 +371,9 @@ class BundleModule {
369371
};
370372

371373
q.push(async () => {
372-
await CommonUtils.sleep(100);
374+
if (!isTesting) {
375+
await CommonUtils.sleep(100);
376+
}
373377
const { error, statusCode } = await HttpModule.uploadFiles(sessionToken, uploadURL, requestBody);
374378
if (statusCode !== 200) {
375379
debugInfo.errorText = BUNDLE_ERRORS.upload[statusCode] || error.message;

lib/modules/PluginManager.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,46 @@ class PluginManager {
268268
}, 0);
269269
}
270270

271+
// Testing API ------------------------------------------------------------------------------------------------------
272+
273+
async scanConfirmedFolders() {
274+
const confirmedFolders = Store.get(STORE_KEYS.confirmedFolders);
275+
confirmedFolders.forEach(folder => {
276+
FileWatcher.addFolderToScan(folder);
277+
});
278+
279+
await FileWatcher.scanFolders();
280+
return Promise.resolve();
281+
}
282+
283+
async createBundle() {
284+
await this.scanConfirmedFolders();
285+
const bundle = await FileWatcher.buildBundle();
286+
287+
return bundle;
288+
}
289+
290+
async createRemoteBundle() {
291+
const sessionToken = Store.get(STORE_KEYS.sessionToken);
292+
293+
await this.scanConfirmedFolders();
294+
await BundleModule.updateState();
295+
296+
const { files } = await FileWatcher.buildBundle();
297+
const { bundleId } = await HttpModule.createBundle(sessionToken, { files });
298+
299+
const chunks = await BundleModule.createUploadChunks(files);
300+
301+
return { bundleId, chunks };
302+
}
303+
304+
async checkAnalysis() {
305+
const { analysisResults } = await Analyser.checkAnalysis();
306+
const { origin, table } = await Analyser.adaptResults(analysisResults);
307+
308+
return Promise.resolve({ origin, table });
309+
}
310+
271311
// Utils ------------------------------------------------------------------------------------------------------------
272312

273313
destroy() {

lib/modules/Store.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const initState = {
4141
[STORE_KEYS.analysisURL]: '',
4242

4343
[STORE_KEYS.analysisWasStarted]: false,
44+
[STORE_KEYS.testEnvironment]: false,
4445
};
4546

4647
class Store {

lib/watchers/FileWatcher.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,12 @@ class FileWatcher {
204204
}
205205

206206
async buildBundle(changedFiles = []) {
207+
const isTesting = Store.get(STORE_KEYS.testEnvironment);
207208

208209
Store.set(STORE_KEYS.composingInProcess, true);
209-
await CommonUtils.sleep(100);
210+
if (!isTesting) {
211+
await CommonUtils.sleep(100);
212+
}
210213

211214
const sourceList = (isArray(changedFiles) && !isEmpty(changedFiles))
212215
? changedFiles
@@ -239,11 +242,15 @@ class FileWatcher {
239242
}
240243

241244
async scanFolders() {
245+
const isTesting = Store.get(STORE_KEYS.testEnvironment);
246+
242247
Store.set(STORE_KEYS.scanningInProcess, true);
243248
this.changedFiles = [];
244249
this.removedFiles = [];
245250

246-
await CommonUtils.sleep(1000);
251+
if (!isTesting) {
252+
await CommonUtils.sleep(1000);
253+
}
247254

248255
Logger.log(`Scanning folders started. Root folders to scan: ${this.foldersToScan.length}`);
249256
this.foldersToScan.forEach(folder => {
@@ -267,7 +274,9 @@ class FileWatcher {
267274

268275
this.foldersToScan.forEach(folder => {
269276
q.push(async () => {
270-
await CommonUtils.sleep(100);
277+
if (!isTesting) {
278+
await CommonUtils.sleep(100);
279+
}
271280
await this.scanFolder(folder, q);
272281
});
273282
});

spec/deepcode-spec.js

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
'use babel';
22

33
import { STORE_KEYS } from '../lib/constants/store';
4-
import { mockState, startMockServer } from './mocks';
4+
import { mockState, startMockServer, mockBundle, mockAnalysisResults, mockAnalysisTable } from './mocks';
55

66
startMockServer();
77

88
describe('Deepcode Plugin tests', () => {
99
let workspaceElement;
1010
let activationPromise;
1111
let dcPackage;
12-
let timerCallback;
1312

1413
beforeEach(() => {
1514
workspaceElement = atom.views.getView(atom.workspace);
@@ -24,9 +23,6 @@ describe('Deepcode Plugin tests', () => {
2423

2524
return Promise.resolve();
2625
}
27-
28-
timerCallback = jasmine.createSpy('timerCallback');
29-
jasmine.Clock.useMock();
3026
});
3127

3228
describe('Pre-test configuring', () => {
@@ -65,7 +61,7 @@ describe('Deepcode Plugin tests', () => {
6561
waitsForPromise(activationPromise);
6662
});
6763

68-
it('fetched filters from server', () => {
64+
it('fetches filters from server', () => {
6965
dcPackage.setPluginState({
7066
[STORE_KEYS.allowedFiles]: {},
7167
});
@@ -75,6 +71,59 @@ describe('Deepcode Plugin tests', () => {
7571
expect(result).toEqual(mockState[STORE_KEYS.allowedFiles]);
7672
});
7773
});
78-
})
79-
})
74+
});
75+
});
76+
77+
describe('Creating hashes bundle', () => {
78+
beforeEach(() => {
79+
waitsForPromise(activationPromise);
80+
});
81+
82+
it('creates bundle', () => {
83+
waitsForPromise(async () => {
84+
const bundle = await dcPackage.createBundle();
85+
expect(bundle).toEqual(mockBundle);
86+
})
87+
});
88+
});
89+
90+
describe('Creating remote bundle', () => {
91+
beforeEach(() => {
92+
waitsForPromise(activationPromise);
93+
});
94+
95+
it('creates bundle', () => {
96+
dcPackage.setPluginState({
97+
[STORE_KEYS.bundleID]: '',
98+
});
99+
100+
waitsForPromise(async () => {
101+
const { bundleId, chunks } = await dcPackage.createRemoteBundle();
102+
103+
expect(bundleId).toEqual(mockState[STORE_KEYS.bundleID]);
104+
expect(chunks.length).toEqual(1);
105+
expect(chunks[0].length).toEqual(4);
106+
})
107+
});
108+
});
109+
110+
describe('Analyzing', () => {
111+
beforeEach(() => {
112+
waitsForPromise(activationPromise);
113+
});
114+
115+
it('analyses bundle', () => {
116+
dcPackage.setPluginState({
117+
[STORE_KEYS.analysisResults]: { origin: {}, table: [] },
118+
[STORE_KEYS.analysisURL]: '',
119+
});
120+
121+
waitsForPromise(async () => {
122+
const { origin, table } = await dcPackage.checkAnalysis();
123+
124+
expect(origin).toEqual(mockAnalysisResults);
125+
expect(table).toEqual(mockAnalysisTable);
126+
})
127+
});
128+
});
80129
});

spec/mocks.js

Lines changed: 71 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,73 @@ import nock from 'nock';
66
import { STORE_KEYS } from '../lib/constants/store';
77
import { API } from '../lib/constants/api';
88

9-
const mockProjectPath = path.resolve(__dirname, 'mocked_data');
9+
const root = __dirname;
10+
const mockProjectPath = path.resolve(root, 'mocked_data');
11+
const analysedFile = `${mockProjectPath}/sample_repository/main.js`;
12+
const bundleID = 'gh/deepcode/DEEPCODE_PRIVATE_BUNDLE/ee0745667800961b0f35d6a4cb4fb12f72373d641e75e464f6632813102afcf1';
13+
14+
export const mockBundle = {
15+
files: {
16+
[analysedFile]: '3e2979852cc2e97f48f7e7973a8b0837eb73ed0485c868176bc3aa58c499f534',
17+
[`${mockProjectPath}/sample_repository/sub_folder/test2.js`]: 'c8bc645260a7d1a0d1349a72150cb65fa005188142dca30d09c3cc67c7974923',
18+
[`${mockProjectPath}/sample_repository/utf8.js`]: 'cc2b67993e547813db67f57c6b20bff83bf4ade64ea2c3fb468d927425502804',
19+
[`${mockProjectPath}/test.java`]: '09f4ca64118f029e5a894305dfc329c930ebd2a258052de9e81f895b055ec929',
20+
}
21+
}
22+
23+
export const mockAnalysisResults = {
24+
files: {
25+
[analysedFile]: { '0': [{ rows: [1, 2], cols: [3, 4], markers: [] }] },
26+
},
27+
suggestions: {
28+
'0': {
29+
id: 'TestSuggestion',
30+
message: 'some message',
31+
severity: 1,
32+
}
33+
},
34+
};
35+
36+
export const mockAnalysisTable = [
37+
{
38+
fileName: '/home/incode/WIP/DeepCode/atom-plugin/spec/mocked_data/sample_repository/main.js',
39+
localPath: '/home/incode/WIP/DeepCode/atom-plugin/spec/mocked_data/sample_repository/main.js',
40+
localName: 'main.js',
41+
message: 'some message',
42+
position: '[1, 3]',
43+
severity: 1,
44+
startRow: 1,
45+
startCol: 3,
46+
endRow: 2,
47+
endCol: 4,
48+
markers: [],
49+
suggestionID: 'TestSuggestion',
50+
suggestionIndex: '0',
51+
suggestionData: {
52+
rows: [1, 2],
53+
cols:[3, 4],
54+
markers: [],
55+
},
56+
},
57+
];
1058

1159
export const mockState = {
1260
// shared
1361
[STORE_KEYS.accountType]: 'free',
1462
[STORE_KEYS.sessionToken]: '444641e35f09d515e366e88ffc0e5929ef42263505d3424184e94040ca7401bc',
15-
[STORE_KEYS.serviceURL]: 'http://localhost:3000/',
63+
[STORE_KEYS.serviceURL]: 'http://localhost:3000',
1664

1765
// project
1866
[STORE_KEYS.confirmedFolders]: [mockProjectPath],
1967
[STORE_KEYS.allowedFiles]: {
20-
extensions: [".java", ".html", ".js", ".jsx", ".ts", ".tsx", ".vue", ".py"],
21-
configFiles: [".pmdrc.xml", ".ruleset.xml", "ruleset.xml", ".eslintrc.js", ".eslintrc.json", ".eslintrc.yml", "tslint.json", ".pylintrc", "pylintrc"],
68+
extensions: ['.java', '.html', '.js', '.jsx', '.ts', '.tsx', '.vue', '.py'],
69+
configFiles: ['.pmdrc.xml', '.ruleset.xml', 'ruleset.xml', '.eslintrc.js', '.eslintrc.json', '.eslintrc.yml', 'tslint.json', '.pylintrc', 'pylintrc'],
2270
},
23-
[STORE_KEYS.bundleID]: 'gh/deepcode/DEEPCODE_PRIVATE_BUNDLE/ee0745667800961b0f35d6a4cb4fb12f72373d641e75e464f6632813102afcf1',
71+
[STORE_KEYS.bundleID]: bundleID,
2472
[STORE_KEYS.firstStart]: false,
73+
74+
// runtime
75+
[STORE_KEYS.testEnvironment]: true,
2576
};
2677

2778
export const startMockServer = () => {
@@ -36,4 +87,19 @@ export const startMockServer = () => {
3687
});
3788

3889
mockedServer.get(API.filters).reply(200, mockState[STORE_KEYS.allowedFiles]);
90+
mockedServer.post(API.createBundle).reply(200, {
91+
statusCode: 200,
92+
bundleId: bundleID,
93+
});
94+
mockedServer.post(`${API.createBundle}/${bundleID}`).reply(200, {
95+
statusCode: 200,
96+
bundleId: bundleID,
97+
});
98+
mockedServer.get(`${API.analysis(bundleID)}`).reply(200, {
99+
statusCode: 200,
100+
status: 'DONE',
101+
progress: 1.0,
102+
analysisResults: mockAnalysisResults,
103+
analysisURL: 'test_analysis_url'
104+
});
39105
};

0 commit comments

Comments
 (0)