@aiqa/sdk 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/launch.json +20 -0
- package/README.md +730 -0
- package/build/sdk.js +37 -0
- package/index.js +3 -0
- package/jest.config.js +7 -0
- package/package.json +24 -0
- package/src/README.md +729 -0
- package/src/config.ts +29 -0
- package/src/enum.ts +16 -0
- package/src/index.ts +428 -0
- package/src/logger.ts +37 -0
- package/src/service/index.ts +139 -0
- package/src/types.ts +164 -0
- package/tests/index.test.ts +534 -0
- package/tests/server.ts +22 -0
- package/tsconfig.json +11 -0
- package/win_create_ssh.sh +50 -0
package/src/types.ts
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
|
|
2
|
+
export type TApplicationPayload = {
|
|
3
|
+
policyNumber: string;
|
|
4
|
+
product: string;
|
|
5
|
+
insuredPhone: string;
|
|
6
|
+
clientName: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type TApplicationUtterance = {
|
|
10
|
+
id: string;
|
|
11
|
+
application_id?: string;
|
|
12
|
+
call_id?: number;
|
|
13
|
+
order?: number;
|
|
14
|
+
is_agent?: boolean; //?????
|
|
15
|
+
speaker?: number;
|
|
16
|
+
text?: string;
|
|
17
|
+
text_en?: string;
|
|
18
|
+
start_time?: number;
|
|
19
|
+
end_time?: number;
|
|
20
|
+
extra?: any;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type TApplication = {
|
|
24
|
+
application_id: string;
|
|
25
|
+
adviser_id: string;
|
|
26
|
+
start_date: Date;
|
|
27
|
+
language: string;
|
|
28
|
+
rtStatus: string; // ??? Need create enum + discuss name
|
|
29
|
+
|
|
30
|
+
policy_number?: string;
|
|
31
|
+
insured_phone?: string;
|
|
32
|
+
client_name?: string;
|
|
33
|
+
|
|
34
|
+
utterances: TApplicationUtterance[];
|
|
35
|
+
facts: TApplicationFact[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//////// ADD FACTS
|
|
39
|
+
|
|
40
|
+
export type TApplicationFactPayload = {
|
|
41
|
+
fact: {
|
|
42
|
+
id: string;
|
|
43
|
+
expected_answer: string;
|
|
44
|
+
};
|
|
45
|
+
applicationId: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type TApplicationFact = {
|
|
49
|
+
id: string;
|
|
50
|
+
expected_answer: string;
|
|
51
|
+
actual_answer: string;
|
|
52
|
+
is_matched: boolean;
|
|
53
|
+
}
|
|
54
|
+
/////////////
|
|
55
|
+
|
|
56
|
+
export interface payloadSubscribeOnApplication {
|
|
57
|
+
application_id: string;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export type TFactIsMatched = boolean;
|
|
61
|
+
|
|
62
|
+
export type TResponse = {
|
|
63
|
+
isAlive?: boolean;
|
|
64
|
+
application?: TApplication | null,
|
|
65
|
+
applicationIsActive?: boolean;
|
|
66
|
+
factIsMatched?: TFactIsMatched;
|
|
67
|
+
recordingIsStarted?: boolean;
|
|
68
|
+
recordingIsStopped?: boolean;
|
|
69
|
+
recordingIsActive?: boolean;
|
|
70
|
+
error?: Error
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export type TResult = {
|
|
74
|
+
data?: any;
|
|
75
|
+
error?: any;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Events
|
|
80
|
+
* 'connect'
|
|
81
|
+
* 'disconnect'
|
|
82
|
+
* 'close'
|
|
83
|
+
* 'error'
|
|
84
|
+
*/
|
|
85
|
+
|
|
86
|
+
abstract class AiqaSdk {
|
|
87
|
+
abstract connect(): void;
|
|
88
|
+
abstract disconnect(): void;
|
|
89
|
+
|
|
90
|
+
abstract on(eventName: string, callback: (...args: any[]) => any): void;
|
|
91
|
+
abstract off(eventName: string): void;
|
|
92
|
+
|
|
93
|
+
abstract isAlive(cb: ({isAlive, error}: TResponse) => void): void;
|
|
94
|
+
abstract isAliveAsync(): Promise<boolean>;
|
|
95
|
+
|
|
96
|
+
abstract getApplication(applicationId: string, cb:({application, error}: TResponse) => void): void;
|
|
97
|
+
abstract getApplicationAsync(applicationId: string): Promise<TApplication>;
|
|
98
|
+
|
|
99
|
+
abstract createApplication(data: TApplicationPayload, cb: ({application, error}: TResponse) => void): void;
|
|
100
|
+
abstract createApplicationAsync(data: TApplicationPayload): Promise<TApplication>;
|
|
101
|
+
|
|
102
|
+
abstract setActiveApplication(applicationId: string, cb: ({applicationIsActive, error}: TResponse) => void): void;
|
|
103
|
+
abstract setActiveApplication(applicationId: string): Promise<boolean>;
|
|
104
|
+
|
|
105
|
+
abstract getActiveApplication(cb: ({application, error}: TResponse) => void): void;
|
|
106
|
+
abstract getActiveApplicationAsync(): Promise<TApplication | null>;
|
|
107
|
+
|
|
108
|
+
abstract resetActiveApplication(applicationId: string, cb: ({applicationIsActive, error}: TResponse) => void): void;
|
|
109
|
+
abstract resetActiveApplicationAsync(applicationId: string): Promise<boolean>;
|
|
110
|
+
|
|
111
|
+
abstract addFact(fact: TApplicationFactPayload, cb: ({factIsMatched, error}: TResponse) => void): void;
|
|
112
|
+
abstract addFactAsync(fact: TApplicationFactPayload): Promise<TFactIsMatched>;
|
|
113
|
+
|
|
114
|
+
abstract startRecording(cb: ({recordingIsStarted, error}: TResponse) => void): void;
|
|
115
|
+
abstract startRecordingAsync(): Promise<boolean>;
|
|
116
|
+
|
|
117
|
+
abstract stopRecording(cb: ({recordingIsStopped, error}: TResponse) => void): void;
|
|
118
|
+
abstract stopRecordingAsync(): Promise<boolean>;
|
|
119
|
+
|
|
120
|
+
abstract isRecordingNow(cb: ({recordingIsActive, error}: TResponse) => void): void;
|
|
121
|
+
abstract isRecordingNowAsync(): Promise<boolean>;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
Со стороны Стаса нужно реализовать методы
|
|
126
|
+
|
|
127
|
+
getApplication
|
|
128
|
+
|
|
129
|
+
createApplication
|
|
130
|
+
|
|
131
|
+
setActiveApplication = вроде реализован subscribeOnApplication, но ничего не возвращает
|
|
132
|
+
|
|
133
|
+
getActiveApplication
|
|
134
|
+
|
|
135
|
+
resetActiveApplication ???
|
|
136
|
+
|
|
137
|
+
addFact = вроде реализовано ??? должен возвращать тру фолс, но ничего не возвращает
|
|
138
|
+
так же отправка идет не массивом, а по одному факту
|
|
139
|
+
|
|
140
|
+
////////
|
|
141
|
+
|
|
142
|
+
нет понимания какие ошибки будет возвращать Сервер
|
|
143
|
+
|
|
144
|
+
////////
|
|
145
|
+
|
|
146
|
+
GET_APPLICATION => applicationId : TApplication
|
|
147
|
+
CREATE_APPLICATION => applicationPayload: TApplication
|
|
148
|
+
SET_ACTIVE_APPLICATION => applicationId, {active: true} || true для отключения отправлять false : TRUE/FALSE
|
|
149
|
+
GET_ACTIVE_APPLICATION => undefined : TApplication
|
|
150
|
+
ADD_FACT => factPayload : TRUE/FALSE
|
|
151
|
+
|
|
152
|
+
внутренний метод
|
|
153
|
+
|
|
154
|
+
ADD_UTTERANCES => еще не реализован, должен быть реализован внутри ПайтонАпп
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
*/
|
|
163
|
+
|
|
164
|
+
|
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
import {afterAll, beforeAll, describe, expect, it, jest, test, afterEach, beforeEach} from '@jest/globals';
|
|
2
|
+
import AiQaSdk from '../src';
|
|
3
|
+
import { TResponse } from '../src/types';
|
|
4
|
+
|
|
5
|
+
import { createServer } from "node:http";
|
|
6
|
+
|
|
7
|
+
import { Server } from "socket.io";
|
|
8
|
+
import { WEBSOCKET_PORT } from "../src/config";
|
|
9
|
+
import { Methods } from '../src/enum';
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
describe('', () => {
|
|
13
|
+
let app, ioServer, serverSocket;
|
|
14
|
+
|
|
15
|
+
beforeAll((done) => {
|
|
16
|
+
const httpServer = createServer();
|
|
17
|
+
ioServer = new Server(httpServer);
|
|
18
|
+
httpServer.listen(WEBSOCKET_PORT, () => {
|
|
19
|
+
app = new AiQaSdk();
|
|
20
|
+
app.on('connect', () => {
|
|
21
|
+
done()
|
|
22
|
+
});
|
|
23
|
+
ioServer.on("connection", (socket) => {
|
|
24
|
+
serverSocket = socket;
|
|
25
|
+
});
|
|
26
|
+
app.connect();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// afterEach(() => {
|
|
31
|
+
// console.log('After All')
|
|
32
|
+
// ioServer.close();
|
|
33
|
+
// app.disconnect();
|
|
34
|
+
// });
|
|
35
|
+
|
|
36
|
+
describe.skip('isAlive method', () => {
|
|
37
|
+
it('should be true', (done) => {
|
|
38
|
+
app.isAlive(({data, error}: TResponse) => {
|
|
39
|
+
expect(data).toBe(true);
|
|
40
|
+
done();
|
|
41
|
+
})
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('should be false', (done) => {
|
|
45
|
+
app.disconnect();
|
|
46
|
+
app.isAlive(({data, error}: TResponse) => {
|
|
47
|
+
expect(data).toBe(false);
|
|
48
|
+
done();
|
|
49
|
+
app.connect();
|
|
50
|
+
})
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
describe.skip('isAliveAsync method', () => {
|
|
55
|
+
it('should be true', async () => {
|
|
56
|
+
app.connect();
|
|
57
|
+
const result = await app.isAliveAsync();
|
|
58
|
+
expect(result).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('should be false', async () => {
|
|
62
|
+
app.disconnect();
|
|
63
|
+
const result = await app.isAliveAsync();
|
|
64
|
+
expect(result).toBe(false);
|
|
65
|
+
app.connect();
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
describe('getApplication method', () => {
|
|
70
|
+
it.skip(`should send message ${Methods.GET_APPLICATION} to PythonApp`, (done) => {
|
|
71
|
+
const someapplicationId = 'someapplicationId';
|
|
72
|
+
serverSocket.on(Methods.GET_APPLICATION, (message: string) => {
|
|
73
|
+
const stringIncludes = message.includes(someapplicationId);
|
|
74
|
+
expect(stringIncludes).toBe(true);
|
|
75
|
+
done();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
app.getApplication(someapplicationId, ({data, error}: TResponse) => {
|
|
79
|
+
console.log('')
|
|
80
|
+
})
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('should return application', (done) => {
|
|
84
|
+
const application = {some: 'value'} //TODO need APP
|
|
85
|
+
|
|
86
|
+
app.getApplication('someapplicationId', ({data, error}: TResponse) => {
|
|
87
|
+
console.log(application)
|
|
88
|
+
//@ts-ignore
|
|
89
|
+
expect(data).toMatchObject(application);
|
|
90
|
+
done();
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
serverSocket.emit(Methods.GET_APPLICATION, JSON.stringify(application))
|
|
94
|
+
});
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
describe('getApplicationAsync method', () => {
|
|
98
|
+
it.skip(`should send message ${Methods.GET_APPLICATION} to PythonApp`, (done) => {
|
|
99
|
+
const someapplicationId = 'someapplicationId';
|
|
100
|
+
serverSocket.on(Methods.GET_APPLICATION, (message: string) => {
|
|
101
|
+
const stringIncludes = message.includes(someapplicationId);
|
|
102
|
+
expect(stringIncludes).toBeTruthy();
|
|
103
|
+
done();
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
app.getApplicationAsync(someapplicationId);
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
it('should return application', (done) => {
|
|
110
|
+
const application = {some: 'value'} //TODO need APP
|
|
111
|
+
|
|
112
|
+
app.getApplicationAsync('someapplicationId')
|
|
113
|
+
.then((data) => {
|
|
114
|
+
expect(data.application).toMatchObject(application);
|
|
115
|
+
done()
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
serverSocket.emit(Methods.GET_APPLICATION, JSON.stringify({application}));
|
|
119
|
+
});
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
describe('createApplication method', () => {
|
|
123
|
+
it.skip(`should send message ${Methods.CREATE_APPLICATION} to PythonApp`, (done) => {
|
|
124
|
+
const createData = {some: 'data'};
|
|
125
|
+
|
|
126
|
+
serverSocket.on(Methods.CREATE_APPLICATION, (message: string) => {
|
|
127
|
+
const stringEqual = message.includes(JSON.stringify(createData));
|
|
128
|
+
expect(stringEqual).toBeTruthy();
|
|
129
|
+
done();
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
app.createApplication(createData, ({data, error}: TResponse) => {
|
|
133
|
+
console.log('')
|
|
134
|
+
})
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('should return created application', (done) => {
|
|
138
|
+
const createData = {some: 'value'} //TODO need APP
|
|
139
|
+
|
|
140
|
+
app.createApplication(createData, ({data, error}: TResponse) => {
|
|
141
|
+
console.log(createData)
|
|
142
|
+
expect(data).toMatchObject(createData);
|
|
143
|
+
done();
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
serverSocket.emit(Methods.CREATE_APPLICATION, JSON.stringify(createData))
|
|
147
|
+
});
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
describe('createApplicationAsync method', () => {
|
|
151
|
+
it.skip(`should send message ${Methods.CREATE_APPLICATION} to PythonApp`, (done) => {
|
|
152
|
+
const createData = {some: 'data'};
|
|
153
|
+
|
|
154
|
+
serverSocket.on(Methods.CREATE_APPLICATION, (message: string) => {
|
|
155
|
+
const stringEqual = message.includes(JSON.stringify(createData));
|
|
156
|
+
expect(stringEqual).toBeTruthy();
|
|
157
|
+
done();
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
app.createApplicationAsync(createData)
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
it('should return created application', (done) => {
|
|
164
|
+
const createData = {some: 'value'} //TODO need APP
|
|
165
|
+
|
|
166
|
+
app.createApplicationAsync(createData)
|
|
167
|
+
.then((data) => {
|
|
168
|
+
expect(data).toMatchObject(createData);
|
|
169
|
+
done()
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
serverSocket.emit(Methods.CREATE_APPLICATION, JSON.stringify(createData));
|
|
173
|
+
});
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
///
|
|
177
|
+
|
|
178
|
+
describe('setActiveApplication method', () => {
|
|
179
|
+
it.skip(`should send message ${Methods.SET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
|
|
180
|
+
const applicationId = 'someApplicationId';
|
|
181
|
+
|
|
182
|
+
serverSocket.on(Methods.SET_ACTIVE_APPLICATION, (message: string) => {
|
|
183
|
+
const stringEqual = message.includes(applicationId);
|
|
184
|
+
expect(stringEqual).toBe(true);
|
|
185
|
+
done();
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
app.setActiveApplication(applicationId, ({data, error}: TResponse) => {
|
|
189
|
+
console.log('')
|
|
190
|
+
})
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it('should return state true', (done) => {
|
|
194
|
+
const applicationId = 'someApplicationId';
|
|
195
|
+
|
|
196
|
+
app.setActiveApplication(applicationId, ({data, error}: TResponse) => {
|
|
197
|
+
expect(data).toBe(true);
|
|
198
|
+
done();
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
serverSocket.emit(Methods.SET_ACTIVE_APPLICATION, JSON.stringify(true))
|
|
202
|
+
});
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
describe('setActiveApplicationAsync method', () => {
|
|
206
|
+
it.skip(`should send message ${Methods.SET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
|
|
207
|
+
const applicationId = 'someApplicationId';
|
|
208
|
+
|
|
209
|
+
serverSocket.on(Methods.SET_ACTIVE_APPLICATION, (message: string) => {
|
|
210
|
+
const stringEqual = message.includes(JSON.stringify(applicationId));
|
|
211
|
+
expect(stringEqual).toBe(true);
|
|
212
|
+
done();
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
app.setActiveApplicationAsync(applicationId)
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
it('should return state true', (done) => {
|
|
219
|
+
const applicationId = 'someApplicationId';
|
|
220
|
+
|
|
221
|
+
app.setActiveApplicationAsync(applicationId)
|
|
222
|
+
.then((data) => {
|
|
223
|
+
expect(data).toBe(true);
|
|
224
|
+
done();
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
serverSocket.emit(Methods.SET_ACTIVE_APPLICATION, JSON.stringify(true));
|
|
228
|
+
});
|
|
229
|
+
})
|
|
230
|
+
|
|
231
|
+
///
|
|
232
|
+
|
|
233
|
+
describe('getActiveApplication method', () => {
|
|
234
|
+
it.skip(`should send message ${Methods.GET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
|
|
235
|
+
const mockFn = jest.fn();
|
|
236
|
+
serverSocket.on(Methods.GET_ACTIVE_APPLICATION, () => {
|
|
237
|
+
mockFn()
|
|
238
|
+
expect(mockFn).toHaveBeenCalled();
|
|
239
|
+
done();
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
app.getActiveApplication(({data, error}: TResponse) => {
|
|
243
|
+
console.log('')
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
it('should return state true', (done) => {
|
|
248
|
+
const application = {some: 'data'};
|
|
249
|
+
|
|
250
|
+
app.getActiveApplication(({data, error}: TResponse) => {
|
|
251
|
+
expect(data).toMatchObject(application);
|
|
252
|
+
done();
|
|
253
|
+
})
|
|
254
|
+
|
|
255
|
+
serverSocket.emit(Methods.GET_ACTIVE_APPLICATION, JSON.stringify(application))
|
|
256
|
+
});
|
|
257
|
+
})
|
|
258
|
+
|
|
259
|
+
describe('getActiveApplicationAsync method', () => {
|
|
260
|
+
it.skip(`should send message ${Methods.GET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
|
|
261
|
+
const mockFn = jest.fn();
|
|
262
|
+
serverSocket.on(Methods.GET_ACTIVE_APPLICATION, () => {
|
|
263
|
+
mockFn();
|
|
264
|
+
expect(mockFn).toHaveBeenCalled();
|
|
265
|
+
done();
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
app.getActiveApplicationAsync()
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
it('should return state true', (done) => {
|
|
272
|
+
const application = {some: 'value'} //TODO need APP
|
|
273
|
+
|
|
274
|
+
app.getActiveApplicationAsync()
|
|
275
|
+
.then((data) => {
|
|
276
|
+
expect(data.application).toMatchObject(application);
|
|
277
|
+
done()
|
|
278
|
+
})
|
|
279
|
+
|
|
280
|
+
serverSocket.emit(Methods.GET_ACTIVE_APPLICATION, JSON.stringify({application}));
|
|
281
|
+
});
|
|
282
|
+
})
|
|
283
|
+
|
|
284
|
+
///
|
|
285
|
+
|
|
286
|
+
describe('resetActiveApplication method', () => {
|
|
287
|
+
it.skip(`should send message ${Methods.SET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
|
|
288
|
+
const applicationId = 'someApplicationId';
|
|
289
|
+
|
|
290
|
+
serverSocket.on(Methods.SET_ACTIVE_APPLICATION, (message: string) => {
|
|
291
|
+
const stringEqual = message.includes(applicationId);
|
|
292
|
+
expect(stringEqual).toBeTruthy();
|
|
293
|
+
done();
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
app.resetActiveApplication(applicationId, ({data, error}: TResponse) => {
|
|
297
|
+
console.log('')
|
|
298
|
+
})
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
it('should return state false', (done) => {
|
|
302
|
+
const applicationId = 'someApplicationId';
|
|
303
|
+
|
|
304
|
+
app.setActiveApplication(applicationId, ({data, error}: TResponse) => {
|
|
305
|
+
expect(data).toBe(false);
|
|
306
|
+
done();
|
|
307
|
+
})
|
|
308
|
+
|
|
309
|
+
serverSocket.emit(Methods.SET_ACTIVE_APPLICATION, JSON.stringify(false))
|
|
310
|
+
});
|
|
311
|
+
})
|
|
312
|
+
|
|
313
|
+
describe('resetActiveApplicationAsync method', () => {
|
|
314
|
+
it.skip(`should send message ${Methods.SET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
|
|
315
|
+
const applicationId = 'someApplicationId';
|
|
316
|
+
|
|
317
|
+
serverSocket.on(Methods.SET_ACTIVE_APPLICATION, (message: string) => {
|
|
318
|
+
const stringEqual = message.includes(JSON.stringify(applicationId));
|
|
319
|
+
expect(stringEqual).toBeTruthy();
|
|
320
|
+
done();
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
app.resetActiveApplicationAsync(applicationId)
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
it('should return state true', (done) => {
|
|
327
|
+
const applicationId = 'someApplicationId';
|
|
328
|
+
|
|
329
|
+
app.setActiveApplicationAsync(applicationId)
|
|
330
|
+
.then((data) => {
|
|
331
|
+
expect(data).toBe(false);
|
|
332
|
+
done();
|
|
333
|
+
})
|
|
334
|
+
|
|
335
|
+
serverSocket.emit(Methods.SET_ACTIVE_APPLICATION, JSON.stringify(false));
|
|
336
|
+
});
|
|
337
|
+
})
|
|
338
|
+
|
|
339
|
+
///
|
|
340
|
+
|
|
341
|
+
describe('addTests method', () => {
|
|
342
|
+
it.skip(`should send message ${Methods.ADD_FACT} to PythonApp`, (done) => {
|
|
343
|
+
const mockFn = jest.fn();
|
|
344
|
+
serverSocket.on(Methods.ADD_FACT, () => {
|
|
345
|
+
mockFn();
|
|
346
|
+
expect(mockFn).toHaveBeenCalled();
|
|
347
|
+
done();
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
app.addFact(({data, error}: TResponse) => {
|
|
351
|
+
console.log('')
|
|
352
|
+
})
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
it.only(`should return fact`, (done) => {
|
|
356
|
+
const mockFn = jest.fn();
|
|
357
|
+
serverSocket.on(Methods.ADD_FACT, () => {
|
|
358
|
+
mockFn();
|
|
359
|
+
expect(mockFn).toHaveBeenCalled();
|
|
360
|
+
done();
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
app.addFact(({data, error}: TResponse) => {
|
|
364
|
+
console.log('')
|
|
365
|
+
})
|
|
366
|
+
});
|
|
367
|
+
})
|
|
368
|
+
|
|
369
|
+
describe('addTestsAsync method', () => {
|
|
370
|
+
it.skip(`should send message ${Methods.ADD_FACT} to PythonApp`, (done) => {
|
|
371
|
+
const mockFn = jest.fn();
|
|
372
|
+
serverSocket.on(Methods.ADD_FACT, () => {
|
|
373
|
+
mockFn();
|
|
374
|
+
expect(mockFn).toHaveBeenCalled();
|
|
375
|
+
done();
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
app.addFact(({data, error}: TResponse) => {
|
|
379
|
+
console.log('')
|
|
380
|
+
})
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
it.only(`should return fact`, (done) => {
|
|
384
|
+
app.addFact()
|
|
385
|
+
});
|
|
386
|
+
})
|
|
387
|
+
|
|
388
|
+
///
|
|
389
|
+
|
|
390
|
+
describe('startRecording method', () => {
|
|
391
|
+
it.skip(`should send message ${Methods.START_RECORDING} to PythonApp`, (done) => {
|
|
392
|
+
const mockFn = jest.fn();
|
|
393
|
+
serverSocket.on(Methods.START_RECORDING, () => {
|
|
394
|
+
mockFn();
|
|
395
|
+
expect(mockFn).toHaveBeenCalled();
|
|
396
|
+
done();
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
app.startRecording(({data, error}: TResponse) => {
|
|
400
|
+
console.log('')
|
|
401
|
+
})
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
it('should return state true', (done) => {
|
|
405
|
+
app.startRecording(({data, error}: TResponse) => {
|
|
406
|
+
expect(data).toBe(true);
|
|
407
|
+
done();
|
|
408
|
+
})
|
|
409
|
+
|
|
410
|
+
serverSocket.emit(Methods.START_RECORDING, JSON.stringify(true))
|
|
411
|
+
});
|
|
412
|
+
})
|
|
413
|
+
|
|
414
|
+
describe('startRecordingAsync method', () => {
|
|
415
|
+
it.skip(`should send message ${Methods.START_RECORDING} to PythonApp`, (done) => {
|
|
416
|
+
const mockFn = jest.fn();
|
|
417
|
+
serverSocket.on(Methods.START_RECORDING, (message: string) => {
|
|
418
|
+
mockFn();
|
|
419
|
+
expect(mockFn).toHaveBeenCalled();
|
|
420
|
+
done();
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
app.startRecordingAsync()
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
it('should return state true', (done) => {
|
|
427
|
+
app.startRecordingAsync()
|
|
428
|
+
.then((data) => {
|
|
429
|
+
expect(data).toBe(true);
|
|
430
|
+
done();
|
|
431
|
+
})
|
|
432
|
+
|
|
433
|
+
serverSocket.emit(Methods.START_RECORDING, JSON.stringify(true));
|
|
434
|
+
});
|
|
435
|
+
})
|
|
436
|
+
|
|
437
|
+
///
|
|
438
|
+
|
|
439
|
+
describe('stopRecording method', () => {
|
|
440
|
+
it.skip(`should send message ${Methods.STOP_RECORDING} to PythonApp`, (done) => {
|
|
441
|
+
const mockFn = jest.fn();
|
|
442
|
+
serverSocket.on(Methods.STOP_RECORDING, () => {
|
|
443
|
+
mockFn();
|
|
444
|
+
expect(mockFn).toHaveBeenCalled();
|
|
445
|
+
done();
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
app.stopRecording(({data, error}: TResponse) => {
|
|
449
|
+
console.log('')
|
|
450
|
+
})
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
it('should return state false', (done) => {
|
|
454
|
+
app.stopRecording(({data, error}: TResponse) => {
|
|
455
|
+
expect(data).toBe(true);
|
|
456
|
+
done();
|
|
457
|
+
})
|
|
458
|
+
|
|
459
|
+
serverSocket.emit(Methods.STOP_RECORDING, JSON.stringify(true))
|
|
460
|
+
});
|
|
461
|
+
})
|
|
462
|
+
|
|
463
|
+
describe('stopRecordingAsync method', () => {
|
|
464
|
+
it.skip(`should send message ${Methods.STOP_RECORDING} to PythonApp`, (done) => {
|
|
465
|
+
const mockFn = jest.fn();
|
|
466
|
+
serverSocket.on(Methods.STOP_RECORDING, (message: string) => {
|
|
467
|
+
mockFn();
|
|
468
|
+
expect(mockFn).toHaveBeenCalled();
|
|
469
|
+
done();
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
app.stopRecordingAsync()
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
it('should return state true', (done) => {
|
|
476
|
+
app.stopRecordingAsync()
|
|
477
|
+
.then((data: boolean) => {
|
|
478
|
+
expect(data).toBe(true);
|
|
479
|
+
done();
|
|
480
|
+
})
|
|
481
|
+
|
|
482
|
+
serverSocket.emit(Methods.STOP_RECORDING, JSON.stringify(true));
|
|
483
|
+
});
|
|
484
|
+
})
|
|
485
|
+
|
|
486
|
+
///
|
|
487
|
+
|
|
488
|
+
describe('isRecordingNow method', () => {
|
|
489
|
+
it.skip(`should send message ${Methods.IS_RECORDING} to PythonApp`, (done) => {
|
|
490
|
+
const mockFn = jest.fn();
|
|
491
|
+
serverSocket.on(Methods.IS_RECORDING, () => {
|
|
492
|
+
mockFn();
|
|
493
|
+
expect(mockFn).toHaveBeenCalled();
|
|
494
|
+
done();
|
|
495
|
+
});
|
|
496
|
+
|
|
497
|
+
app.isRecordingNow(({data, error}: TResponse) => {
|
|
498
|
+
console.log('')
|
|
499
|
+
})
|
|
500
|
+
});
|
|
501
|
+
|
|
502
|
+
it('should return state true', (done) => {
|
|
503
|
+
app.isRecordingNow(({data, error}: TResponse) => {
|
|
504
|
+
expect(data).toBe(true);
|
|
505
|
+
done();
|
|
506
|
+
})
|
|
507
|
+
|
|
508
|
+
serverSocket.emit(Methods.IS_RECORDING, JSON.stringify(true))
|
|
509
|
+
});
|
|
510
|
+
})
|
|
511
|
+
|
|
512
|
+
describe('isRecordingAsync method', () => {
|
|
513
|
+
it.skip(`should send message ${Methods.IS_RECORDING} to PythonApp`, (done) => {
|
|
514
|
+
const mockFn = jest.fn();
|
|
515
|
+
serverSocket.on(Methods.IS_RECORDING, (message: string) => {
|
|
516
|
+
mockFn();
|
|
517
|
+
expect(mockFn).toHaveBeenCalled();
|
|
518
|
+
done();
|
|
519
|
+
});
|
|
520
|
+
|
|
521
|
+
app.isRecordingNowAsync()
|
|
522
|
+
});
|
|
523
|
+
|
|
524
|
+
it('should return state false', (done) => {
|
|
525
|
+
app.isRecordingNowAsync()
|
|
526
|
+
.then((data: boolean) => {
|
|
527
|
+
expect(data).toBe(false);
|
|
528
|
+
done();
|
|
529
|
+
})
|
|
530
|
+
|
|
531
|
+
serverSocket.emit(Methods.IS_RECORDING, JSON.stringify(false));
|
|
532
|
+
});
|
|
533
|
+
})
|
|
534
|
+
})
|
package/tests/server.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createServer } from "http";
|
|
2
|
+
import { Server } from "socket.io";
|
|
3
|
+
import { WEBSOCKET_PORT } from "../src/config";
|
|
4
|
+
|
|
5
|
+
function createSocketIoServer() {
|
|
6
|
+
const httpServer = createServer();
|
|
7
|
+
const ioServer = new Server(httpServer, {
|
|
8
|
+
// options
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
ioServer.on("connection", (socket) => {
|
|
12
|
+
// ...
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
httpServer.listen(WEBSOCKET_PORT);
|
|
16
|
+
|
|
17
|
+
console.log('Started...', WEBSOCKET_PORT)
|
|
18
|
+
|
|
19
|
+
return ioServer;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default createSocketIoServer;
|