@tiledesk/tiledesk-server 2.3.5 → 2.3.7-1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. package/.github/workflows/docker-community-worker-push-latest.yml +23 -0
  2. package/.github/workflows/docker-image-tag-worker-community-tag-push.yml +22 -0
  3. package/CHANGELOG.md +361 -3
  4. package/Dockerfile-jobs +31 -0
  5. package/app.js +62 -69
  6. package/channels/chat21/chat21Handler.js +37 -6
  7. package/channels/chat21/chat21WebHook.js +52 -29
  8. package/channels/chat21/package-lock.json +663 -706
  9. package/channels/chat21/package.json +2 -2
  10. package/config/labels/widget.json +337 -136
  11. package/deploy.sh +2 -0
  12. package/event/messageEvent.js +110 -9
  13. package/jobs.js +80 -0
  14. package/jobsManager.js +47 -0
  15. package/middleware/has-role.js +10 -3
  16. package/middleware/ipFilter.js +220 -0
  17. package/middleware/passport.js +8 -2
  18. package/models/department.js +1 -1
  19. package/models/faq.js +77 -25
  20. package/models/faq_kb.js +19 -0
  21. package/models/message.js +10 -8
  22. package/models/project.js +10 -0
  23. package/models/project_user.js +10 -0
  24. package/models/request.js +12 -1
  25. package/package.json +12 -11
  26. package/pubmodules/activities/activityArchiver.js +216 -90
  27. package/pubmodules/activities/routes/activity.js +1 -1
  28. package/pubmodules/apps/index.js +8 -0
  29. package/pubmodules/apps/listener.js +27 -0
  30. package/pubmodules/cache/index.js +2 -0
  31. package/pubmodules/cache/mongoose-cachegoose-fn.js +630 -0
  32. package/pubmodules/canned/cannedResponse.js +4 -0
  33. package/pubmodules/canned/cannedResponseRoute.js +10 -5
  34. package/pubmodules/dialogflow/index.js +10 -0
  35. package/pubmodules/dialogflow/listener.js +66 -0
  36. package/pubmodules/emailNotification/requestNotification.js +58 -28
  37. package/pubmodules/events/eventRoute.js +49 -24
  38. package/pubmodules/messageTransformer/messageHandlebarsTransformerInterceptor.js +6 -1
  39. package/pubmodules/messageTransformer/messageTransformerInterceptor.js +10 -4
  40. package/pubmodules/pubModulesManager.js +173 -7
  41. package/pubmodules/queue/index.js +4 -0
  42. package/pubmodules/queue/reconnect.js +331 -0
  43. package/pubmodules/queue/reconnectFanout.js +256 -0
  44. package/pubmodules/rasa/listener.js +5 -5
  45. package/pubmodules/routing-queue/index.js +3 -0
  46. package/pubmodules/routing-queue/listener.js +328 -0
  47. package/pubmodules/rules/conciergeBot.js +4 -4
  48. package/pubmodules/scheduler/tasks/closeAgentUnresponsiveRequestTask.js +6 -1
  49. package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +7 -1
  50. package/pubmodules/tilebot/index.js +11 -0
  51. package/pubmodules/tilebot/listener.js +85 -0
  52. package/pubmodules/trigger/rulesTrigger.js +137 -14
  53. package/pubmodules/trigger/start.js +5 -1
  54. package/pubmodules/whatsapp/index.js +7 -0
  55. package/pubmodules/whatsapp/listener.js +32 -0
  56. package/routes/auth.js +7 -2
  57. package/routes/campaigns.js +3 -3
  58. package/routes/department.js +3 -2
  59. package/routes/email.js +32 -2
  60. package/routes/faq.js +37 -2
  61. package/routes/faq_kb.js +496 -133
  62. package/routes/faqpub.js +5 -0
  63. package/routes/lead.js +56 -0
  64. package/routes/message.js +196 -14
  65. package/routes/messagesRoot.js +39 -0
  66. package/routes/project.js +76 -4
  67. package/routes/project_user.js +11 -1
  68. package/routes/project_user_test.js +19 -0
  69. package/routes/request.js +134 -30
  70. package/routes/troubleshooting.js +12 -0
  71. package/routes/users-util.js +39 -0
  72. package/routes/users.js +1 -1
  73. package/routes/widget.js +64 -2
  74. package/services/BotSubscriptionNotifier.js +5 -0
  75. package/services/banUserNotifier.js +86 -0
  76. package/services/cacheEnabler.js +56 -0
  77. package/services/chatbotService.js +101 -0
  78. package/services/departmentService.js +25 -3
  79. package/services/emailService.js +170 -28
  80. package/services/faqBotHandler.js +2 -3
  81. package/services/faqService.js +28 -3
  82. package/services/geoService.js +36 -6
  83. package/services/labelService.js +1 -1
  84. package/services/leadService.js +3 -2
  85. package/services/messageService.js +4 -2
  86. package/services/modulesManager.js +23 -76
  87. package/services/operatingHoursService.js +9 -4
  88. package/services/requestService.js +75 -39
  89. package/services/subscriptionNotifier.js +9 -4
  90. package/services/trainingService.js +106 -0
  91. package/template/email/assignedEmailMessage.html +21 -11
  92. package/template/email/assignedRequest.html +21 -11
  93. package/template/email/beenInvitedExistingUser.html +16 -6
  94. package/template/email/beenInvitedNewUser.html +16 -6
  95. package/template/email/emailDirect.html +130 -0
  96. package/template/email/newMessage.html +18 -8
  97. package/template/email/newMessageFollower.html +22 -12
  98. package/template/email/passwordChanged.html +15 -5
  99. package/template/email/pooledEmailMessage.html +21 -11
  100. package/template/email/pooledRequest.html +20 -10
  101. package/template/email/resetPassword.html +15 -5
  102. package/template/email/sendTranscript.html +7 -4
  103. package/template/email/ticket.html +17 -7
  104. package/template/email/verify.html +15 -5
  105. package/test/cannedRoute.js +157 -0
  106. package/test/chatbot-mock.js +127 -0
  107. package/test/example-json-intents.txt +1 -0
  108. package/test/example-json.txt +1 -0
  109. package/test/example.json +1 -0
  110. package/test/faqRoute.js +353 -208
  111. package/test/faqkbRoute.js +669 -64
  112. package/test/imageRoute.js +1 -1
  113. package/test/messageRoute.js +387 -5
  114. package/test/requestRoute.js +6 -6
  115. package/test/requestService.js +55 -4
  116. package/test-int/cache-project.js +90 -0
  117. package/test-int/cache-project_user.js +88 -0
  118. package/utils/UIDGenerator.js +20 -0
  119. package/utils/cacheUtil.js +2 -2
  120. package/utils/orgUtil.js +3 -3
  121. package/utils/promiseUtil.js +31 -0
  122. package/utils/recipientEmailUtil.js +66 -0
  123. package/utils/sendEmailUtil.js +34 -0
  124. package/utils/sendMessageUtil.js +1 -1
  125. package/utils/stringUtil.js +12 -0
  126. package/websocket/webSocketServer.js +33 -10
@@ -6,11 +6,17 @@ var projectService = require('../services/projectService');
6
6
  var userService = require('../services/userService');
7
7
  var faqService = require('../services/faqService');
8
8
 
9
+ let chatbot_mock = require('./chatbot-mock');
10
+ let log = false;
11
+
12
+
9
13
  //Require the dev-dependencies
10
14
  let chai = require('chai');
11
15
  let chaiHttp = require('chai-http');
12
16
  let server = require('../app');
13
17
  let should = chai.should();
18
+ var fs = require('fs');
19
+ const path = require('path');
14
20
 
15
21
  // chai.config.includeStack = true;
16
22
 
@@ -21,104 +27,703 @@ chai.use(chaiHttp);
21
27
 
22
28
  describe('FaqKBRoute', () => {
23
29
 
24
- describe('/create', () => {
25
-
26
-
30
+ describe('/create', () => {
31
+
27
32
 
28
- it('create', (done) => {
33
+ it('create', (done) => {
29
34
 
30
-
31
- // this.timeout();
32
35
 
33
- var email = "test-signup-" + Date.now() + "@email.com";
34
- var pwd = "pwd";
36
+ // this.timeout();
35
37
 
36
- userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
37
- projectService.create("test-faqkb-create", savedUser._id).then(function(savedProject) {
38
+ var email = "test-signup-" + Date.now() + "@email.com";
39
+ var pwd = "pwd";
40
+
41
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
42
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
38
43
  chai.request(server)
39
- .post('/'+ savedProject._id + '/faq_kb')
44
+ .post('/' + savedProject._id + '/faq_kb')
40
45
  .auth(email, pwd)
41
- .send({"name":"testbot", type: "external", language: 'fr'})
46
+ .send({ "name": "testbot", type: "external", language: 'fr' })
42
47
  .end((err, res) => {
43
- //console.log("res", res);
44
- console.log("res.body", res.body);
48
+ if (log) {
49
+ console.log("res.body", res.body);
50
+ }
45
51
  res.should.have.status(200);
46
52
  res.body.should.be.a('object');
47
- expect(res.body.name).to.equal("testbot");
48
- expect(res.body.language).to.equal("fr");
49
-
53
+ expect(res.body.name).to.equal("testbot");
54
+ expect(res.body.language).to.equal("fr");
55
+
50
56
  done();
51
57
  });
52
58
 
53
-
54
- });
59
+
55
60
  });
56
-
57
- }).timeout(20000);
61
+ });
62
+
63
+ }).timeout(20000);
64
+
58
65
 
66
+ it('create with template example', (done) => {
59
67
 
68
+ var email = "test-signup-" + Date.now() + "@email.com";
69
+ var pwd = "pwd";
60
70
 
71
+ userService.signup(email, pwd, "Test Firstname", "Test Lastname").then((savedUser) => {
72
+ projectService.create("test-faqkb-create", savedUser._id).then((savedProject) => {
61
73
 
74
+ chai.request(server)
75
+ .post('/' + savedProject._id + '/faq_kb')
76
+ .auth(email, pwd)
77
+ .send({ "name": "testbot", type: "internal", template: "example" })
78
+ .end((err, res) => {
79
+ if (log) {
80
+ console.log("res.body", res.body);
81
+ }
82
+ res.should.have.status(200);
83
+ res.body.should.be.a('object');
84
+ expect(res.body.name).to.equal("testbot");
85
+ var id_faq_kb = res.body._id;
62
86
 
87
+ chai.request(server)
88
+ .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
89
+ .auth(email, pwd)
90
+ .end((err, res) => {
91
+ if (log) {
92
+ console.log("faq_list: ", res.body);
93
+ }
94
+ res.should.have.status(200);
95
+ res.body.should.be.an('array').that.is.not.empty;
63
96
 
97
+ done();
98
+
99
+ })
64
100
 
65
- // mocha test/faqkbRoute.js --grep 'train'
66
- it('train', (done) => {
67
101
 
68
-
69
- // this.timeout();
70
-
71
- var email = "test-signup-" + Date.now() + "@email.com";
72
- var pwd = "pwd";
73
-
74
- userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
75
- projectService.create("test-faqkb-train", savedUser._id).then(function(savedProject) {
76
- faqService.create("testbot", "http://54.228.177.1644", savedProject._id, savedUser._id).then(function(savedBot) {
77
102
 
78
- var newFaq = new Faq({
79
- id_faq_kb: savedBot._id,
80
- question: "question1\nquestion2",
81
- answer: "answer",
82
- id_project: savedProject._id,
83
- topic: "default",
84
- createdBy: savedUser._id,
85
- updatedBy: savedUser._id
86
103
  });
87
-
88
- newFaq.save(function (err, savedFaq) {
89
- console.log("err", err);
90
- console.log("savedFaq", savedFaq);
91
- expect(savedBot.name).to.equal("testbot");
92
- expect(savedBot.secret).to.not.equal(null);
104
+ })
105
+ })
106
+ })
107
+
108
+
109
+ it('fork chatbot (private)', (done) => {
110
+
111
+ var email = "test-signup-" + Date.now() + "@email.com";
112
+ var pwd = "pwd";
113
+
114
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
115
+ projectService.create("current-project", savedUser._id).then(function (currentProject) {
116
+ projectService.create("landing-project", savedUser._id).then(function (landingProject) {
117
+
118
+ class chatbot_service {
119
+ async getBotById(id, published, api_url, chatbot_templates_api_url, token, project_id) {
120
+ return chatbot_mock.existing_chatbot_mock;
121
+ }
122
+
123
+ async createBot(api_url, token, chatbot, project_id) {
124
+ return chatbot_mock.empty_chatbot_mock
125
+ }
126
+
127
+ async importFaqs(api_url, id_faq_kb, token, chatbot, project_id) {
128
+ return chatbot_mock.import_faqs_res_mock
129
+ }
130
+ }
131
+
132
+ server.set('chatbot_service', new chatbot_service());
133
+
93
134
 
94
135
  chai.request(server)
95
- .post('/'+ savedProject._id + '/faq_kb/train')
136
+ .post('/' + currentProject._id + '/faq_kb')
96
137
  .auth(email, pwd)
97
- .send({"id_faq_kb":savedBot._id})
138
+ .send({ "name": "privateBot", type: "internal", language: 'en', public: "false", template: "blank" })
98
139
  .end((err, res) => {
99
- //console.log("res", res);
100
- console.log("res.body", res.body);
140
+ if (log) {
141
+ console.log("res.body: ", res.body);
142
+ }
101
143
  res.should.have.status(200);
102
144
  res.body.should.be.a('object');
103
- expect(res.body.train.nlu.intent).to.equal(savedBot.intent_display_name);
104
- // expect(res.body.text).to.equal("addestramento avviato");
105
-
106
-
107
- done();
108
- });
109
-
110
-
111
- });
112
- });
113
- });
145
+ expect(res.body.name).to.equal("privateBot");
146
+ expect(res.body.language).to.equal("en");
147
+ let id_faq_kb = res.body._id;
148
+
149
+ chai.request(server)
150
+ .post('/' + currentProject._id + '/faq_kb/fork/' + id_faq_kb + "?public=false&projectid=" + landingProject._id)
151
+ .auth(email, pwd)
152
+ .set('Content-Type', 'application/json')
153
+ .end((err, res) => {
154
+ if (log) {
155
+ console.log("fork private chatbot res.body: ", res.body)
156
+ }
157
+ res.should.have.status(200);
158
+ res.should.have.be.a('object');
159
+ expect(res.body.bot_id).to.equal(chatbot_mock.empty_chatbot_mock._id)
160
+
161
+ done();
162
+
163
+ })
164
+ })
165
+ })
166
+ })
167
+ })
168
+
169
+
170
+ })
171
+
172
+
173
+ it('fork chatbot (public)', (done) => {
174
+ var email_user1 = "user1-signup-" + Date.now() + "@email.com";
175
+ var email_user2 = "user2-signup-" + Date.now() + "@email.com";
176
+ var pwd = "pwd";
177
+
178
+ userService.signup(email_user1, pwd, "User1 Firstname", "User1 lastname").then(function (user1) {
179
+ userService.signup(email_user2, pwd, "User2 Firstname", "User2 lastname").then(function (user2) {
180
+ projectService.create("current-project", user1._id).then(function (currentProject) {
181
+ projectService.create("landing-project", user2._id).then(function (landingProject) {
182
+
183
+ console.log("\n[TEST]")
184
+ console.log("mock: ", chatbot_mock.existing_chatbot_mock);
185
+
186
+ class chatbot_service {
187
+ async getBotById(id, published, api_url, chatbot_templates_api_url, token, project_id) {
188
+ return chatbot_mock.existing_chatbot_mock;
189
+ }
190
+
191
+ async createBot(api_url, token, chatbot, project_id) {
192
+ return chatbot_mock.empty_chatbot_mock
193
+ }
194
+
195
+ async importFaqs(api_url, id_faq_kb, token, chatbot, project_id) {
196
+ return chatbot_mock.import_faqs_res_mock
197
+ }
198
+ }
199
+
200
+ server.set('chatbot_service', new chatbot_service());
201
+
202
+ chai.request(server)
203
+ .post('/' + currentProject._id + '/faq_kb')
204
+ .auth(email_user1, pwd)
205
+ .send({ "name": "publicBot", type: "internal", language: 'en', public: "true", template: "blank" })
206
+ .end((err, res) => {
207
+ if (log) {
208
+ console.log("res.body: ", res.body);
209
+ }
210
+ res.should.have.status(200);
211
+ res.body.should.be.a('object');
212
+ expect(res.body.name).to.equal("publicBot");
213
+ expect(res.body.language).to.equal("en");
214
+ let id_faq_kb = res.body._id;
215
+
216
+ chai.request(server)
217
+ .post('/' + landingProject._id + '/faq_kb/fork/' + id_faq_kb + '?public=true&projectid=' + landingProject._id)
218
+ .auth(email_user2, pwd)
219
+ .set('Content-Type', 'application/json')
220
+ .end((err, res) => {
221
+ if (log) {
222
+ console.log("fork public chatbot res.body: ", res.body)
223
+ }
224
+ res.should.have.status(200);
225
+
226
+ done();
227
+ })
228
+ })
229
+ })
230
+ })
231
+ })
232
+ })
233
+ })
234
+
235
+ it('create bot and import json', (done) => {
236
+
237
+ var email = "test-signup-" + Date.now() + "@email.com";
238
+ var pwd = "pwd";
239
+
240
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
241
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
242
+
243
+ chai.request(server)
244
+ .post('/' + savedProject._id + '/faq_kb/importjson/' + null + "?create=true")
245
+ .auth(email, pwd)
246
+ .set('Content-Type', 'text/plain')
247
+ .attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example.json')), 'example.json')
248
+ .end((err, res) => {
249
+ if (log) {
250
+ console.log("import json res: ", res.body);
251
+ }
252
+ res.should.have.status(200);
253
+ res.should.be.a('object');
254
+ expect(res.body.name).to.equal("examplebot");
255
+ expect(res.body.language).to.equal("en");
256
+
257
+ let id_faq_kb = res.body._id;
258
+
259
+ chai.request(server)
260
+ .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
261
+ .auth(email, pwd)
262
+ .end((err, res) => {
263
+ if (log) {
264
+ console.log("faq_list: ", res.body);
265
+ }
266
+ res.should.have.status(200);
267
+ res.body.should.be.an('array').that.is.not.empty;
268
+
269
+ done();
270
+
271
+ })
272
+ })
273
+
274
+ })
275
+ })
276
+
277
+ })
278
+
279
+
280
+ it('import json (overwrite true)', (done) => {
281
+
282
+ var email = "test-signup-" + Date.now() + "@email.com";
283
+ var pwd = "pwd";
284
+
285
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
286
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
287
+
288
+ chai.request(server)
289
+ .post('/' + savedProject._id + '/faq_kb')
290
+ .auth(email, pwd)
291
+ .send({ "name": "testbot", type: "internal", language: 'fr', template: "blank" })
292
+ .end((err, res) => {
293
+ if (log) {
294
+ console.log("res.body: ", res.body);
295
+ }
296
+ res.should.have.status(200);
297
+ res.body.should.be.a('object');
298
+ expect(res.body.name).to.equal("testbot");
299
+ expect(res.body.language).to.equal("fr");
300
+ let id_faq_kb = res.body._id;
301
+
302
+ chai.request(server)
303
+ .post('/' + savedProject._id + '/faq_kb/importjson/' + id_faq_kb + "?overwrite=true")
304
+ .auth(email, pwd)
305
+ .set('Content-Type', 'text/plain')
306
+ .attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example.json')), 'example.json')
307
+ .end((err, res) => {
308
+ if (log) {
309
+ console.log("import json res: ", res.body);
310
+ }
311
+ res.should.have.status(200);
312
+ res.should.be.a('object');
313
+ expect(res.body.name).to.equal("examplebot");
314
+ expect(res.body.language).to.equal("en");
315
+
316
+ chai.request(server)
317
+ .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
318
+ .auth(email, pwd)
319
+ .end((err, res) => {
320
+ if (log) {
321
+ console.log("faq_list: ", res.body);
322
+ }
323
+ res.should.have.status(200);
324
+ res.body.should.be.an('array').that.is.not.empty;
325
+
326
+ done();
327
+
328
+ })
329
+ })
330
+ })
331
+ })
332
+ })
333
+ })
334
+
335
+
336
+ it('import json (overwrite false)', (done) => {
337
+
338
+ var email = "test-signup-" + Date.now() + "@email.com";
339
+ var pwd = "pwd";
340
+
341
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
342
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
343
+
344
+ chai.request(server)
345
+ .post('/' + savedProject._id + '/faq_kb')
346
+ .auth(email, pwd)
347
+ .send({ "name": "testbot", type: "internal", language: 'fr', template: "blank" })
348
+ .end((err, res) => {
349
+ if (log) {
350
+ console.log("res.body: ", res.body);
351
+ }
352
+ res.should.have.status(200);
353
+ res.body.should.be.a('object');
354
+ expect(res.body.name).to.equal("testbot");
355
+ expect(res.body.language).to.equal("fr");
356
+ let id_faq_kb = res.body._id;
357
+
358
+ chai.request(server)
359
+ .post('/' + savedProject._id + '/faq_kb/importjson/' + id_faq_kb)
360
+ .auth(email, pwd)
361
+ .set('Content-Type', 'text/plain')
362
+ .attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example-json.txt')), 'example-json.txt')
363
+ .end((err, res) => {
364
+ if (log) {
365
+ console.log("import json res: ", res.body);
366
+ }
367
+ res.should.have.status(200);
368
+ res.should.be.a('object');
369
+ expect(res.body.name).to.equal("examplebot");
370
+ expect(res.body.language).to.equal("en");
371
+
372
+ chai.request(server)
373
+ .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
374
+ .auth(email, pwd)
375
+ .end((err, res) => {
376
+ if (log) {
377
+ console.log("faq_list: ", res.body);
378
+ }
379
+ res.should.have.status(200);
380
+ res.body.should.be.an('array').that.is.not.empty;
381
+
382
+ done();
383
+
384
+ })
385
+ })
386
+ })
387
+ })
388
+ })
389
+ })
390
+
391
+ it('import json (simple)', (done) => {
392
+
393
+ var email = "test-signup-" + Date.now() + "@email.com";
394
+ var pwd = "pwd";
395
+
396
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
397
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
398
+
399
+ chai.request(server)
400
+ .post('/' + savedProject._id + '/faq_kb')
401
+ .auth(email, pwd)
402
+ .send({ "name": "testbot", type: "internal", language: 'fr' })
403
+ .end((err, res) => {
404
+ if (log) {
405
+ console.log("res.body: ", res.body);
406
+ }
407
+ res.should.have.status(200);
408
+ res.body.should.be.a('object');
409
+ expect(res.body.name).to.equal("testbot");
410
+ expect(res.body.language).to.equal("fr");
411
+ let id_faq_kb = res.body._id;
412
+
413
+ chai.request(server)
414
+ .post('/' + savedProject._id + '/faq_kb/importjson/' + id_faq_kb + '?intentsOnly=true&overwrite=true')
415
+ .auth(email, pwd)
416
+ .set('Content-Type', 'text/plain')
417
+ .attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example-json-intents.txt')), 'example-json-intents.txt')
418
+ .end((err, res) => {
419
+ if (log) {
420
+ console.log("import (intents only) json res: ", res.body);
421
+ }
422
+ res.should.have.status(200);
423
+ //res.should.be.a('object');
424
+ //expect(res.body.success).to.equal(true);
425
+
426
+ chai.request(server)
427
+ .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
428
+ .auth(email, pwd)
429
+ .end((err, res) => {
430
+ if (log) {
431
+ console.log("faq_list: ", res.body);
432
+ }
433
+ res.should.have.status(200);
434
+ res.body.should.be.an('array').that.is.not.empty;
435
+
436
+ done();
437
+
438
+ })
439
+ })
440
+ })
441
+ })
442
+ })
443
+ })
444
+
445
+
446
+ it('import json (intents only) (overwrite true)', (done) => {
447
+
448
+ var email = "test-signup-" + Date.now() + "@email.com";
449
+ var pwd = "pwd";
450
+
451
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
452
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
453
+
454
+ chai.request(server)
455
+ .post('/' + savedProject._id + '/faq_kb')
456
+ .auth(email, pwd)
457
+ .send({ "name": "testbot", type: "internal", language: 'fr', template: 'blank' })
458
+ .end((err, res) => {
459
+ if (log) {
460
+ console.log("res.body: ", res.body);
461
+ }
462
+ res.should.have.status(200);
463
+ res.body.should.be.a('object');
464
+ expect(res.body.name).to.equal("testbot");
465
+ expect(res.body.language).to.equal("fr");
466
+ let id_faq_kb = res.body._id;
467
+
468
+ chai.request(server)
469
+ .post('/' + savedProject._id + '/faq_kb/importjson/' + id_faq_kb + '?intentsOnly=true&overwrite=true')
470
+ .auth(email, pwd)
471
+ .set('Content-Type', 'text/plain')
472
+ .attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example-json-intents.txt')), 'example-json-intents.txt')
473
+ .end((err, res) => {
474
+ if (log) {
475
+ console.log("import (intents only) json res: ", res.body);
476
+ }
477
+ res.should.have.status(200);
478
+ //res.should.be.a('object');
479
+ //expect(res.body.success).to.equal(true);
480
+
481
+ chai.request(server)
482
+ .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
483
+ .auth(email, pwd)
484
+ .end((err, res) => {
485
+ if (log) {
486
+ console.log("faq_list: ", res.body);
487
+ }
488
+ res.should.have.status(200);
489
+ res.body.should.be.an('array').that.is.not.empty;
490
+
491
+ done();
492
+
493
+ })
494
+ })
495
+ })
496
+ })
497
+ })
498
+ })
499
+
500
+
501
+ it('import json (intents only) (overwrite false)', (done) => {
502
+
503
+ var email = "test-signup-" + Date.now() + "@email.com";
504
+ var pwd = "pwd";
505
+
506
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
507
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
508
+
509
+ chai.request(server)
510
+ .post('/' + savedProject._id + '/faq_kb')
511
+ .auth(email, pwd)
512
+ .send({ "name": "testbot", type: "internal", language: 'fr', template: 'blank' })
513
+ .end((err, res) => {
514
+ if (log) {
515
+ console.log("res.body: ", res.body);
516
+ }
517
+ res.should.have.status(200);
518
+ res.body.should.be.a('object');
519
+ expect(res.body.name).to.equal("testbot");
520
+ expect(res.body.language).to.equal("fr");
521
+ let id_faq_kb = res.body._id;
522
+
523
+ chai.request(server)
524
+ .post('/' + savedProject._id + '/faq_kb/importjson/' + id_faq_kb + '?intentsOnly=true')
525
+ .auth(email, pwd)
526
+ .set('Content-Type', 'text/plain')
527
+ .attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example-json-intents.txt')), 'example-json-intents.txt')
528
+ .end((err, res) => {
529
+ if (log) {
530
+ console.log("import (intents only) json res: ", res.body);
531
+ }
532
+ res.should.have.status(200);
533
+ //res.should.be.a('object');
534
+ //expect(res.body.success).to.equal(true);
535
+
536
+ chai.request(server)
537
+ .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
538
+ .auth(email, pwd)
539
+ .end((err, res) => {
540
+ if (log) {
541
+ console.log("faq_list: ", res.body);
542
+ }
543
+ res.should.have.status(200);
544
+ res.body.should.be.an('array').that.is.not.empty;
545
+
546
+ done();
547
+
548
+ })
549
+ })
550
+ })
551
+ })
552
+ })
553
+ })
554
+
555
+
556
+ it('export json', (done) => {
557
+
558
+
559
+ // this.timeout();
560
+
561
+ var email = "test-signup-" + Date.now() + "@email.com";
562
+ var pwd = "pwd";
563
+
564
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
565
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
566
+
567
+ chai.request(server)
568
+ .post('/' + savedProject._id + '/faq_kb')
569
+ .auth(email, pwd)
570
+ .send({ "name": "testbot", type: "internal", template: "example", language: 'fr' })
571
+ .end((err, res) => {
572
+ if (log) {
573
+ console.log("res.body: ", res.body);
574
+ }
575
+ res.should.have.status(200);
576
+ res.body.should.be.a('object');
577
+ expect(res.body.name).to.equal("testbot");
578
+ expect(res.body.language).to.equal("fr");
579
+ let id_faq_kb = res.body._id;
580
+ if (log) {
581
+ console.log("res.body._id: ", res.body._id)
582
+ }
583
+
584
+ chai.request(server)
585
+ .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
586
+ .auth(email, pwd)
587
+ .end((err, res) => {
588
+ if (log) {
589
+ console.log("faq_list: ", res.body);
590
+ }
591
+ res.should.have.status(200);
592
+ res.body.should.be.an('array').that.is.not.empty;
593
+
594
+ chai.request(server)
595
+ .get('/' + savedProject._id + '/faq_kb/exportjson/' + id_faq_kb)
596
+ .auth(email, pwd)
597
+ .end((err, res) => {
598
+ if (log) {
599
+ console.log("export json res: ", res.body);
600
+ }
601
+ res.should.have.status(200);
602
+ //res.body.should.be.a('string');
603
+
604
+ done();
605
+ })
606
+ })
607
+ });
608
+ });
114
609
  });
610
+
115
611
  }).timeout(20000);
116
-
117
-
118
612
 
119
613
 
614
+ it('export json (intents only)', (done) => {
120
615
 
121
- });
616
+
617
+ // this.timeout();
618
+
619
+ var email = "test-signup-" + Date.now() + "@email.com";
620
+ var pwd = "pwd";
621
+
622
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
623
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
624
+
625
+ chai.request(server)
626
+ .post('/' + savedProject._id + '/faq_kb')
627
+ .auth(email, pwd)
628
+ .send({ "name": "testbot", type: "internal", template: "example", language: 'fr' })
629
+ .end((err, res) => {
630
+ //console.log("res", res);
631
+ if (log) {
632
+ console.log("res.body: ", res.body);
633
+ }
634
+ res.should.have.status(200);
635
+ res.body.should.be.a('object');
636
+ expect(res.body.name).to.equal("testbot");
637
+ expect(res.body.language).to.equal("fr");
638
+ let id_faq_kb = res.body._id;
639
+ if (log) {
640
+ console.log("res.body._id: ", res.body._id)
641
+ }
642
+
643
+ chai.request(server)
644
+ .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
645
+ .auth(email, pwd)
646
+ .end((err, res) => {
647
+ if (log) {
648
+ console.log("faq_list: ", res.body);
649
+ }
650
+ res.should.have.status(200);
651
+ res.body.should.be.an('array').that.is.not.empty;
652
+
653
+ chai.request(server)
654
+ .get('/' + savedProject._id + '/faq_kb/exportjson/' + id_faq_kb + "?intentsOnly=true")
655
+ .auth(email, pwd)
656
+ .end((err, res) => {
657
+ if (log) {
658
+ console.log("export json res: ", res.body);
659
+ }
660
+ res.should.have.status(200);
661
+ //res.body.should.be.a('string');
662
+
663
+ done();
664
+ })
665
+ })
666
+ });
667
+ });
668
+ });
669
+
670
+ }).timeout(20000);
671
+
672
+
673
+ // mocha test/faqkbRoute.js --grep 'train'
674
+ it('train', (done) => {
675
+
676
+
677
+ // this.timeout();
678
+
679
+ var email = "test-signup-" + Date.now() + "@email.com";
680
+ var pwd = "pwd";
681
+
682
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
683
+ projectService.create("test-faqkb-train", savedUser._id).then(function (savedProject) {
684
+ faqService.create("testbot", "http://54.228.177.1644", savedProject._id, savedUser._id).then(function (savedBot) {
685
+
686
+ var newFaq = new Faq({
687
+ id_faq_kb: savedBot._id,
688
+ question: "question1\nquestion2",
689
+ answer: "answer",
690
+ id_project: savedProject._id,
691
+ topic: "default",
692
+ createdBy: savedUser._id,
693
+ updatedBy: savedUser._id
694
+ });
695
+
696
+ newFaq.save(function (err, savedFaq) {
697
+ console.log("err", err);
698
+ console.log("savedFaq", savedFaq);
699
+ expect(savedBot.name).to.equal("testbot");
700
+ expect(savedBot.secret).to.not.equal(null);
701
+
702
+ chai.request(server)
703
+ .post('/' + savedProject._id + '/faq_kb/train')
704
+ .auth(email, pwd)
705
+ .send({ "id_faq_kb": savedBot._id })
706
+ .end((err, res) => {
707
+ //console.log("res", res);
708
+ console.log("res.body", res.body);
709
+ res.should.have.status(200);
710
+ res.body.should.be.a('object');
711
+ expect(res.body.train.nlu.intent).to.equal(savedBot.intent_display_name);
712
+ // expect(res.body.text).to.equal("addestramento avviato");
713
+
714
+
715
+ done();
716
+ });
717
+
718
+
719
+ });
720
+ });
721
+ });
722
+ });
723
+ }).timeout(20000);
724
+
725
+
726
+ });
122
727
 
123
728
  });
124
729