@tiledesk/tiledesk-server 2.28.2 → 2.29.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.
@@ -309,15 +309,15 @@ describe('FaqKBRoute', () => {
309
309
  .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
310
310
  .auth(email, pwd)
311
311
  .end((err, res) => {
312
-
312
+
313
313
  if (err) { console.error("err: ", err); }
314
314
  if (log) { console.log("res.body", res.body); }
315
-
315
+
316
316
  res.should.have.status(200);
317
317
  res.body.should.be.an('array').that.is.not.empty;
318
-
318
+
319
319
  done();
320
-
320
+
321
321
  })
322
322
  }, 1000)
323
323
 
@@ -622,14 +622,6 @@ describe('FaqKBRoute', () => {
622
622
  async getBotById(id, published, api_url, chatbot_templates_api_url, token, project_id) {
623
623
  return chatbot_mock.existing_chatbot_mock;
624
624
  }
625
-
626
- async createBot(api_url, token, chatbot, project_id) {
627
- return chatbot_mock.empty_chatbot_mock
628
- }
629
-
630
- async importFaqs(api_url, id_faq_kb, token, chatbot, project_id) {
631
- return chatbot_mock.import_faqs_res_mock
632
- }
633
625
  }
634
626
 
635
627
  server.set('chatbot_service', new chatbot_service());
@@ -660,7 +652,8 @@ describe('FaqKBRoute', () => {
660
652
  if (log) { console.log("res.body", res.body); }
661
653
  res.should.have.status(200);
662
654
  res.should.have.be.a('object');
663
- expect(res.body.bot_id).to.equal(chatbot_mock.empty_chatbot_mock._id)
655
+ expect(res.body.bot_id).to.exist;
656
+ expect(res.body.message).to.equal("Chatbot forked successfully");
664
657
 
665
658
  done();
666
659
 
@@ -689,14 +682,6 @@ describe('FaqKBRoute', () => {
689
682
  reject({ success: false, msg: "Chatbot not found" })
690
683
  })
691
684
  }
692
-
693
- async createBot(api_url, token, chatbot, project_id) {
694
- return chatbot_mock.empty_chatbot_mock
695
- }
696
-
697
- async importFaqs(api_url, id_faq_kb, token, chatbot, project_id) {
698
- return chatbot_mock.import_faqs_res_mock
699
- }
700
685
  }
701
686
 
702
687
  server.set('chatbot_service', new chatbot_service());
@@ -724,7 +709,7 @@ describe('FaqKBRoute', () => {
724
709
 
725
710
  if (err) { console.error("err: ", err); }
726
711
  if (log) { console.log("res.body: ", res.body); }
727
-
712
+
728
713
  res.should.have.status(500);
729
714
  res.body.should.be.a('object');
730
715
  expect(res.body.success).to.equal(false);
@@ -755,14 +740,6 @@ describe('FaqKBRoute', () => {
755
740
  async getBotById(id, published, api_url, chatbot_templates_api_url, token, project_id) {
756
741
  return chatbot_mock.existing_chatbot_mock;
757
742
  }
758
-
759
- async createBot(api_url, token, chatbot, project_id) {
760
- return chatbot_mock.empty_chatbot_mock
761
- }
762
-
763
- async importFaqs(api_url, id_faq_kb, token, chatbot, project_id) {
764
- return chatbot_mock.import_faqs_res_mock
765
- }
766
743
  }
767
744
 
768
745
  server.set('chatbot_service', new chatbot_service());
@@ -792,6 +769,8 @@ describe('FaqKBRoute', () => {
792
769
  if (log) { console.log("res.body", res.body); }
793
770
 
794
771
  res.should.have.status(200);
772
+ expect(res.body.bot_id).to.exist;
773
+ expect(res.body.message).to.equal("Chatbot forked successfully");
795
774
 
796
775
  done();
797
776
  })
@@ -829,19 +808,19 @@ describe('FaqKBRoute', () => {
829
808
  let id_faq_kb = res.body._id;
830
809
 
831
810
  chai.request(server)
832
- .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
833
- .auth(email, pwd)
834
- .end((err, res) => {
811
+ .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
812
+ .auth(email, pwd)
813
+ .end((err, res) => {
835
814
 
836
- if (err) { console.error("err: ", err); }
837
- if (log) { console.log("res.body", res.body); }
815
+ if (err) { console.error("err: ", err); }
816
+ if (log) { console.log("res.body", res.body); }
838
817
 
839
- res.should.have.status(200);
840
- //res.body.should.be.an('array').that.is.not.empty;
818
+ res.should.have.status(200);
819
+ //res.body.should.be.an('array').that.is.not.empty;
841
820
 
842
- done();
821
+ done();
843
822
 
844
- })
823
+ })
845
824
  })
846
825
 
847
826
  })
@@ -939,7 +918,7 @@ describe('FaqKBRoute', () => {
939
918
 
940
919
  if (err) { console.error("err: ", err); }
941
920
  if (log) { console.log("import json res: ", JSON.stringify(res.body, null, 2)); }
942
-
921
+
943
922
  res.should.have.status(200);
944
923
  res.should.be.a('object');
945
924
  expect(res.body.name).to.equal("example bot");
@@ -1055,7 +1034,7 @@ describe('FaqKBRoute', () => {
1055
1034
 
1056
1035
  if (err) { console.error("err: ", err) };
1057
1036
  if (log) { console.log("res.body: ", res.body) };
1058
-
1037
+
1059
1038
  res.should.have.status(200);
1060
1039
  //res.body.should.be.a('string');
1061
1040
 
@@ -1079,6 +1058,94 @@ describe('FaqKBRoute', () => {
1079
1058
 
1080
1059
  }).timeout(20000);
1081
1060
 
1061
+ it('export-json-with-subagents', (done) => {
1062
+
1063
+ var email = "test-signup-" + Date.now() + "@email.com";
1064
+ var pwd = "pwd";
1065
+
1066
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1067
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
1068
+
1069
+ // Create parent bot
1070
+ let parentBot = {
1071
+ name: "parentbot",
1072
+ type: "tilebot",
1073
+ template: "blank",
1074
+ language: 'en'
1075
+ }
1076
+
1077
+ chai.request(server)
1078
+ .post('/' + savedProject._id + '/faq_kb')
1079
+ .auth(email, pwd)
1080
+ .send(parentBot)
1081
+ .end((err, res) => {
1082
+
1083
+ if (err) { console.error("err: ", err) };
1084
+ if (log) { console.log("res.body: ", res.body) };
1085
+
1086
+ res.should.have.status(200);
1087
+ res.body.should.be.a('object');
1088
+ expect(res.body.name).to.equal("parentbot");
1089
+ expect(res.body.language).to.equal("en");
1090
+ let id_faq_kb = res.body._id;
1091
+
1092
+ // Create subagent
1093
+ let subAgent = {
1094
+ name: "subagent1",
1095
+ type: "tilebot",
1096
+ subtype: "subagent",
1097
+ template: "blank",
1098
+ language: 'en',
1099
+ parent_id: id_faq_kb,
1100
+ }
1101
+
1102
+ chai.request(server)
1103
+ .post('/' + savedProject._id + '/faq_kb')
1104
+ .auth(email, pwd)
1105
+ .send(subAgent)
1106
+ .end((err, res) => {
1107
+
1108
+ if (err) { console.error("err: ", err) };
1109
+ if (log) { console.log("res.body: ", res.body) };
1110
+
1111
+ const source_subagent_id = res.body._id;
1112
+
1113
+ chai.request(server)
1114
+ .get('/' + savedProject._id + '/faq_kb/exportjson/' + id_faq_kb)
1115
+ .auth(email, pwd)
1116
+ .end((err, res) => {
1117
+
1118
+ if (err) { console.error("err: ", err) };
1119
+ if (log) { console.log("res.text: ", res.text) };
1120
+
1121
+ res.should.have.status(200);
1122
+
1123
+ const exported = JSON.parse(res.text);
1124
+ expect(exported.name).to.equal("parentbot");
1125
+ expect(exported.language).to.equal("en");
1126
+ expect(exported._id).to.be.undefined;
1127
+ expect(exported.subagents.length).to.equal(1);
1128
+ expect(exported.subagents[0].name).to.equal("subagent1");
1129
+ expect(exported.subagents[0]._id).to.equal(source_subagent_id);
1130
+ expect(exported.subagents[0].id_project).to.be.undefined;
1131
+ expect(exported.subagents[0].language).to.equal("en");
1132
+ expect(exported.subagents[0].intents.length).to.equal(3);
1133
+ expect(exported.subagents[0].intents[0].intent_display_name).to.equal("start");
1134
+ expect(exported.subagents[0].intents[0]._id).to.be.undefined;
1135
+ expect(exported.subagents[0].intents[1].intent_display_name).to.equal("untitled_block_1");
1136
+ expect(exported.subagents[0].intents[1]._id).to.be.undefined;
1137
+ expect(exported.subagents[0].intents[2].intent_display_name).to.equal("return");
1138
+ expect(exported.subagents[0].intents[2]._id).to.be.undefined;
1139
+ done();
1140
+ })
1141
+ })
1142
+
1143
+ });
1144
+ });
1145
+ });
1146
+
1147
+ }).timeout(20000);
1148
+
1082
1149
  it('export-json-intents-only)', (done) => {
1083
1150
 
1084
1151
  var email = "test-signup-" + Date.now() + "@email.com";
@@ -1134,6 +1201,397 @@ describe('FaqKBRoute', () => {
1134
1201
 
1135
1202
  }).timeout(20000);
1136
1203
 
1204
+ it('import-json-with-subagents', (done) => {
1205
+
1206
+ var email = "test-signup-" + Date.now() + "@email.com";
1207
+ var pwd = "pwd";
1208
+
1209
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1210
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
1211
+
1212
+ chai.request(server)
1213
+ .post('/' + savedProject._id + '/faq_kb/importjson/null?create=true')
1214
+ .auth(email, pwd)
1215
+ .set('Content-Type', 'text/plain')
1216
+ .attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './fixtures/example-json-with-subagents.txt')), 'example-json-with-subagents.txt')
1217
+ .end((err, res) => {
1218
+
1219
+ if (err) { console.error("err: ", err) };
1220
+ if (log) { console.log("res.body: ", res.body) };
1221
+
1222
+ res.should.have.status(200);
1223
+ res.should.be.a('object');
1224
+
1225
+ expect(res.body.name).to.equal("parentbot");
1226
+ expect(res.body.language).to.equal("en");
1227
+
1228
+ const id_faq_kb = res.body._id;
1229
+
1230
+ chai.request(server)
1231
+ .get('/' + savedProject._id + '/faq_kb/' + id_faq_kb + '/subagents')
1232
+ .auth(email, pwd)
1233
+ .end((err, res) => {
1234
+ if (err) { console.error("err: ", err) };
1235
+ if (log) { console.log("res.body: ", res.body) };
1236
+
1237
+ res.should.have.status(200);
1238
+ res.body.should.be.an('array').that.is.not.empty;
1239
+
1240
+ const importedSubagent = res.body[0];
1241
+ expect(importedSubagent.parent_id).to.equal(id_faq_kb);
1242
+ expect(importedSubagent.id_project).to.equal(savedProject._id.toString());
1243
+ expect(importedSubagent.name).to.equal("subagent1");
1244
+ expect(importedSubagent.language).to.equal("en");
1245
+ expect(importedSubagent.type).to.equal("tilebot");
1246
+ expect(importedSubagent.subtype).to.equal("subagent");
1247
+ expect(importedSubagent._id).to.not.be.undefined;
1248
+
1249
+ done();
1250
+ })
1251
+
1252
+ })
1253
+ })
1254
+ })
1255
+ });
1256
+
1257
+ it('import-json-with-subagents-remaps-id_project-to-destination-project', (done) => {
1258
+
1259
+ var email = "test-signup-" + Date.now() + "@email.com";
1260
+ var pwd = "pwd";
1261
+
1262
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1263
+ projectService.create("source-project", savedUser._id).then(function (sourceProject) {
1264
+ projectService.create("destination-project", savedUser._id).then(function (destinationProject) {
1265
+
1266
+ chai.request(server)
1267
+ .post('/' + sourceProject._id + '/faq_kb')
1268
+ .auth(email, pwd)
1269
+ .send({ name: "parentbot", type: "tilebot", template: "blank", language: 'en' })
1270
+ .end((err, res) => {
1271
+
1272
+ if (err) { console.error("err: ", err) };
1273
+ if (log) { console.log("res.body: ", res.body) };
1274
+
1275
+ res.should.have.status(200);
1276
+ let source_parent_id = res.body._id;
1277
+
1278
+ chai.request(server)
1279
+ .post('/' + sourceProject._id + '/faq_kb')
1280
+ .auth(email, pwd)
1281
+ .send({ name: "subagent1", type: "tilebot", subtype: "subagent", template: "blank", language: 'en', parent_id: source_parent_id })
1282
+ .end((err, res) => {
1283
+
1284
+ if (err) { console.error("err: ", err) };
1285
+ if (log) { console.log("res.body: ", res.body) };
1286
+
1287
+ res.should.have.status(200);
1288
+ expect(res.body.id_project).to.equal(sourceProject._id.toString());
1289
+
1290
+ chai.request(server)
1291
+ .get('/' + sourceProject._id + '/faq_kb/exportjson/' + source_parent_id)
1292
+ .auth(email, pwd)
1293
+ .end((err, res) => {
1294
+
1295
+ if (err) { console.error("err: ", err) };
1296
+ if (log) { console.log("res.text: ", res.text) };
1297
+
1298
+ res.should.have.status(200);
1299
+
1300
+ const exported = JSON.parse(res.text);
1301
+ exported.id_project = sourceProject._id.toString();
1302
+ exported.subagents.forEach((subagent) => {
1303
+ subagent.id_project = sourceProject._id.toString();
1304
+ subagent.parent_id = source_parent_id;
1305
+ (subagent.intents || []).forEach((intent) => {
1306
+ intent.id_project = sourceProject._id.toString();
1307
+ });
1308
+ });
1309
+
1310
+ chai.request(server)
1311
+ .post('/' + destinationProject._id + '/faq_kb/importjson/null?create=true')
1312
+ .auth(email, pwd)
1313
+ .set('Content-Type', 'application/json')
1314
+ .send(exported)
1315
+ .end((err, res) => {
1316
+
1317
+ if (err) { console.error("err: ", err) };
1318
+ if (log) { console.log("res.body: ", res.body) };
1319
+
1320
+ res.should.have.status(200);
1321
+ expect(res.body.id_project).to.equal(destinationProject._id.toString());
1322
+ const imported_parent_id = res.body._id;
1323
+
1324
+ chai.request(server)
1325
+ .get('/' + destinationProject._id + '/faq_kb/' + imported_parent_id + '/subagents')
1326
+ .auth(email, pwd)
1327
+ .end((err, res) => {
1328
+
1329
+ if (err) { console.error("err: ", err) };
1330
+ if (log) { console.log("res.body: ", res.body) };
1331
+
1332
+ res.should.have.status(200);
1333
+ res.body.should.be.an('array').that.is.not.empty;
1334
+
1335
+ const importedSubagent = res.body[0];
1336
+ expect(importedSubagent.name).to.equal("subagent1");
1337
+ expect(importedSubagent.parent_id).to.equal(imported_parent_id);
1338
+ expect(importedSubagent.id_project).to.equal(destinationProject._id.toString());
1339
+ expect(importedSubagent.id_project).to.not.equal(sourceProject._id.toString());
1340
+
1341
+ chai.request(server)
1342
+ .get('/' + destinationProject._id + '/faq/?id_faq_kb=' + importedSubagent._id)
1343
+ .auth(email, pwd)
1344
+ .end((err, res) => {
1345
+
1346
+ if (err) { console.error("err: ", err) };
1347
+ if (log) { console.log("res.body: ", res.body) };
1348
+
1349
+ res.should.have.status(200);
1350
+ res.body.should.be.an('array').that.is.not.empty;
1351
+ res.body.forEach((intent) => {
1352
+ expect(intent.id_project).to.equal(destinationProject._id.toString());
1353
+ expect(intent.id_faq_kb).to.equal(importedSubagent._id);
1354
+ });
1355
+
1356
+ done();
1357
+ });
1358
+ });
1359
+ });
1360
+ });
1361
+ });
1362
+ });
1363
+ });
1364
+ });
1365
+ });
1366
+ }).timeout(20000);
1367
+
1368
+ it('import-json-with-subagents-remaps-botId-in-parent-intents', (done) => {
1369
+
1370
+ var email = "test-signup-" + Date.now() + "@email.com";
1371
+ var pwd = "pwd";
1372
+
1373
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1374
+ projectService.create("source-project-botid", savedUser._id).then(function (sourceProject) {
1375
+ projectService.create("destination-project-botid", savedUser._id).then(function (destinationProject) {
1376
+
1377
+ chai.request(server)
1378
+ .post('/' + sourceProject._id + '/faq_kb')
1379
+ .auth(email, pwd)
1380
+ .send({ name: "parentbot", type: "tilebot", template: "blank", language: 'en' })
1381
+ .end((err, res) => {
1382
+
1383
+ if (err) { console.error("err: ", err) };
1384
+ if (log) { console.log("res.body: ", res.body) };
1385
+
1386
+ res.should.have.status(200);
1387
+ let source_parent_id = res.body._id;
1388
+
1389
+ chai.request(server)
1390
+ .post('/' + sourceProject._id + '/faq_kb')
1391
+ .auth(email, pwd)
1392
+ .send({ name: "subagent1", type: "tilebot", subtype: "subagent", template: "blank", language: 'en', parent_id: source_parent_id })
1393
+ .end((err, res) => {
1394
+
1395
+ if (err) { console.error("err: ", err) };
1396
+ if (log) { console.log("res.body: ", res.body) };
1397
+
1398
+ res.should.have.status(200);
1399
+ let source_subagent_id = res.body._id;
1400
+
1401
+ chai.request(server)
1402
+ .post('/' + sourceProject._id + '/faq')
1403
+ .auth(email, pwd)
1404
+ .send({
1405
+ id_faq_kb: source_parent_id,
1406
+ intent_display_name: "call-subagent",
1407
+ question: "call subagent",
1408
+ answer: "calling",
1409
+ actions: [{
1410
+ _tdActionType: "replacebotv3",
1411
+ botId: source_subagent_id
1412
+ }]
1413
+ })
1414
+ .end((err, res) => {
1415
+
1416
+ if (err) { console.error("err: ", err) };
1417
+ if (log) { console.log("res.body: ", res.body) };
1418
+
1419
+ res.should.have.status(200);
1420
+
1421
+ chai.request(server)
1422
+ .get('/' + sourceProject._id + '/faq_kb/exportjson/' + source_parent_id)
1423
+ .auth(email, pwd)
1424
+ .end((err, res) => {
1425
+
1426
+ if (err) { console.error("err: ", err) };
1427
+ if (log) { console.log("res.text: ", res.text) };
1428
+
1429
+ res.should.have.status(200);
1430
+ const exported = JSON.parse(res.text);
1431
+ const callIntent = exported.intents.find((intent) => intent.intent_display_name === "call-subagent");
1432
+ expect(callIntent).to.not.equal(undefined);
1433
+ expect(callIntent.actions[0].botId).to.equal(source_subagent_id);
1434
+ expect(exported.subagents[0]._id).to.equal(source_subagent_id);
1435
+
1436
+ chai.request(server)
1437
+ .post('/' + destinationProject._id + '/faq_kb/importjson/null?create=true')
1438
+ .auth(email, pwd)
1439
+ .set('Content-Type', 'application/json')
1440
+ .send(exported)
1441
+ .end((err, res) => {
1442
+
1443
+ if (err) { console.error("err: ", err) };
1444
+ if (log) { console.log("res.body: ", res.body) };
1445
+
1446
+ res.should.have.status(200);
1447
+ const imported_parent_id = res.body._id;
1448
+ expect(imported_parent_id).to.not.equal(source_parent_id);
1449
+
1450
+ chai.request(server)
1451
+ .get('/' + destinationProject._id + '/faq_kb/' + imported_parent_id + '/subagents')
1452
+ .auth(email, pwd)
1453
+ .end((err, res) => {
1454
+
1455
+ if (err) { console.error("err: ", err) };
1456
+ if (log) { console.log("res.body: ", res.body) };
1457
+
1458
+ res.should.have.status(200);
1459
+ const importedSubagent = res.body[0];
1460
+ expect(importedSubagent._id).to.not.equal(source_subagent_id);
1461
+
1462
+ chai.request(server)
1463
+ .get('/' + destinationProject._id + '/faq/?id_faq_kb=' + imported_parent_id)
1464
+ .auth(email, pwd)
1465
+ .end((err, res) => {
1466
+
1467
+ if (err) { console.error("err: ", err) };
1468
+ if (log) { console.log("res.body: ", res.body) };
1469
+
1470
+ res.should.have.status(200);
1471
+ const importedCallIntent = res.body.find((intent) => intent.intent_display_name === "call-subagent");
1472
+ expect(importedCallIntent).to.not.equal(undefined);
1473
+ expect(importedCallIntent.actions[0].botId).to.equal(importedSubagent._id);
1474
+ expect(importedCallIntent.actions[0].botId).to.not.equal(source_subagent_id);
1475
+
1476
+ done();
1477
+ });
1478
+ });
1479
+ });
1480
+ });
1481
+ });
1482
+ });
1483
+ });
1484
+ });
1485
+ });
1486
+ });
1487
+ }).timeout(20000);
1488
+
1489
+ it('fork-with-skipSubagents-keeps-development-botId', (done) => {
1490
+
1491
+ var email = "test-signup-" + Date.now() + "@email.com";
1492
+ var pwd = "pwd";
1493
+
1494
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1495
+ projectService.create("publish-skip-subagents", savedUser._id).then(function (savedProject) {
1496
+
1497
+ chai.request(server)
1498
+ .post('/' + savedProject._id + '/faq_kb')
1499
+ .auth(email, pwd)
1500
+ .send({ name: "parentbot", type: "tilebot", template: "blank", language: 'en' })
1501
+ .end((err, res) => {
1502
+
1503
+ if (err) { console.error("err: ", err) };
1504
+ res.should.have.status(200);
1505
+ let source_parent_id = res.body._id;
1506
+
1507
+ chai.request(server)
1508
+ .post('/' + savedProject._id + '/faq_kb')
1509
+ .auth(email, pwd)
1510
+ .send({ name: "subagent1", type: "tilebot", subtype: "subagent", template: "blank", language: 'en', parent_id: source_parent_id })
1511
+ .end((err, res) => {
1512
+
1513
+ if (err) { console.error("err: ", err) };
1514
+ res.should.have.status(200);
1515
+ let source_subagent_id = res.body._id;
1516
+
1517
+ chai.request(server)
1518
+ .post('/' + savedProject._id + '/faq')
1519
+ .auth(email, pwd)
1520
+ .send({
1521
+ id_faq_kb: source_parent_id,
1522
+ intent_display_name: "call-subagent",
1523
+ question: "call subagent",
1524
+ answer: "calling",
1525
+ actions: [{
1526
+ _tdActionType: "replacebotv3",
1527
+ botId: source_subagent_id
1528
+ }]
1529
+ })
1530
+ .end((err, res) => {
1531
+
1532
+ if (err) { console.error("err: ", err) };
1533
+ res.should.have.status(200);
1534
+
1535
+ chai.request(server)
1536
+ .get('/' + savedProject._id + '/faq_kb/exportjson/' + source_parent_id)
1537
+ .auth(email, pwd)
1538
+ .end((err, res) => {
1539
+
1540
+ if (err) { console.error("err: ", err) };
1541
+ res.should.have.status(200);
1542
+ const exported = JSON.parse(res.text);
1543
+
1544
+ const previousService = server.get('chatbot_service');
1545
+ server.set('chatbot_service', {
1546
+ async getBotById() {
1547
+ return JSON.parse(JSON.stringify(exported));
1548
+ }
1549
+ });
1550
+
1551
+ chai.request(server)
1552
+ .post('/' + savedProject._id + '/faq_kb/fork/' + source_parent_id + "?public=false&globals=true&projectid=" + savedProject._id + "&skipSubagents=true")
1553
+ .auth(email, pwd)
1554
+ .set('Content-Type', 'application/json')
1555
+ .end((err, res) => {
1556
+
1557
+ server.set('chatbot_service', previousService);
1558
+
1559
+ if (err) { console.error("err: ", err) };
1560
+ res.should.have.status(200);
1561
+ const forked_parent_id = res.body.bot_id;
1562
+ expect(forked_parent_id).to.not.equal(source_parent_id);
1563
+
1564
+ chai.request(server)
1565
+ .get('/' + savedProject._id + '/faq_kb/' + forked_parent_id + '/subagents')
1566
+ .auth(email, pwd)
1567
+ .end((err, res) => {
1568
+
1569
+ if (err) { console.error("err: ", err) };
1570
+ res.should.have.status(200);
1571
+ expect(res.body).to.have.length(0);
1572
+
1573
+ chai.request(server)
1574
+ .get('/' + savedProject._id + '/faq/?id_faq_kb=' + forked_parent_id)
1575
+ .auth(email, pwd)
1576
+ .end((err, res) => {
1577
+
1578
+ if (err) { console.error("err: ", err) };
1579
+ res.should.have.status(200);
1580
+ const callIntent = res.body.find((intent) => intent.intent_display_name === "call-subagent");
1581
+ expect(callIntent).to.not.equal(undefined);
1582
+ expect(callIntent.actions[0].botId).to.equal(source_subagent_id);
1583
+ done();
1584
+ });
1585
+ });
1586
+ });
1587
+ });
1588
+ });
1589
+ });
1590
+ });
1591
+ });
1592
+ });
1593
+ }).timeout(20000);
1594
+
1137
1595
  it('import-webhook-json', (done) => {
1138
1596
 
1139
1597
  var email = "test-signup-" + Date.now() + "@email.com";
@@ -1178,7 +1636,7 @@ describe('FaqKBRoute', () => {
1178
1636
  })
1179
1637
  })
1180
1638
  })
1181
-
1639
+
1182
1640
 
1183
1641
  })
1184
1642
 
@@ -1227,7 +1685,7 @@ describe('FaqKBRoute', () => {
1227
1685
  .get('/' + savedProject._id + '/faq/?id_faq_kb=' + chatbot_id)
1228
1686
  .auth(email, pwd)
1229
1687
  .end((err, res) => {
1230
-
1688
+
1231
1689
  if (err) { console.error("err: ", err); }
1232
1690
  if (log) { console.log("res.body", res.body); }
1233
1691
 
@@ -1246,7 +1704,7 @@ describe('FaqKBRoute', () => {
1246
1704
  });
1247
1705
  })
1248
1706
 
1249
- it('logical-webhook-delete-with-ttl', (done) => {
1707
+ it('logical-delete-cascades-ttl-to-subagents', (done) => {
1250
1708
 
1251
1709
  var email = "test-signup-" + Date.now() + "@email.com";
1252
1710
  var pwd = "pwd";
@@ -1257,529 +1715,530 @@ describe('FaqKBRoute', () => {
1257
1715
  chai.request(server)
1258
1716
  .post('/' + savedProject._id + '/faq_kb')
1259
1717
  .auth(email, pwd)
1260
- .send({ name: "test-webhook", type: "tilebot", subtype: "webhook", template: "blank_webhook", language: 'en' })
1718
+ .send({ name: "parent-bot", type: "tilebot", subtype: "chatbot", template: "blank", language: 'en' })
1261
1719
  .end((err, res) => {
1262
1720
 
1263
1721
  if (err) { console.error("err: ", err); }
1264
1722
  if (log) { console.log("res.body", res.body); }
1265
1723
 
1266
1724
  res.should.have.status(200);
1267
- res.body.should.be.a('object');
1268
- expect(res.body.name).to.equal("test-webhook");
1269
- expect(res.body.language).to.equal("en");
1270
-
1271
- let chatbot_id = res.body._id;
1725
+ let parent_id = res.body._id;
1272
1726
 
1273
1727
  chai.request(server)
1274
- .post('/' + savedProject._id + '/webhooks')
1728
+ .post('/' + savedProject._id + '/faq_kb')
1275
1729
  .auth(email, pwd)
1276
- .send({ chatbot_id: chatbot_id, block_id: "example-block-id", async: false })
1730
+ .send({ name: "subagent1", type: "tilebot", subtype: "subagent", parent_id: parent_id, language: 'en' })
1277
1731
  .end((err, res) => {
1278
1732
 
1279
1733
  if (err) { console.error("err: ", err); }
1280
1734
  if (log) { console.log("res.body", res.body); }
1281
1735
 
1282
1736
  res.should.have.status(200);
1283
- res.body.should.be.a('object');
1737
+ expect(res.body.parent_id).to.equal(parent_id);
1738
+ let subagent_id = res.body._id;
1284
1739
 
1285
1740
  chai.request(server)
1286
- .put('/' + savedProject._id + '/faq_kb/' + chatbot_id)
1741
+ .put('/' + savedProject._id + '/faq_kb/' + parent_id)
1287
1742
  .auth(email, pwd)
1288
1743
  .send({ trashed: true })
1289
1744
  .end((err, res) => {
1290
-
1745
+
1291
1746
  if (err) { console.error("err: ", err); }
1292
1747
  if (log) { console.log("res.body", res.body); }
1293
-
1748
+
1294
1749
  res.should.have.status(200);
1295
- res.body.should.be.a('object');
1296
1750
  expect(res.body.trashed).to.equal(true);
1297
1751
  expect(res.body.trashedAt).to.exist;
1298
-
1299
- chai.request(server)
1300
- .get('/' + savedProject._id + '/faq/?id_faq_kb=' + chatbot_id)
1301
- .auth(email, pwd)
1302
- .end((err, res) => {
1303
-
1304
- if (err) { console.error("err: ", err); }
1305
- if (log) { console.log("res.body", res.body); }
1306
-
1307
- res.should.have.status(200);
1308
- res.body.should.be.a('array');
1309
- expect(res.body.length).to.equal(2);
1310
- expect(res.body[0].trashed).to.equal(true);
1311
- expect(res.body[0].trashedAt).to.exist;
1312
-
1313
- done();
1314
- })
1315
-
1752
+ let parentTrashedAt = res.body.trashedAt;
1753
+
1754
+ // Allow cascade async handler to complete
1755
+ setTimeout(() => {
1756
+ chai.request(server)
1757
+ .get('/' + savedProject._id + '/faq_kb/' + subagent_id)
1758
+ .auth(email, pwd)
1759
+ .end((err, res) => {
1760
+
1761
+ if (err) { console.error("err: ", err); }
1762
+ if (log) { console.log("res.body", res.body); }
1763
+
1764
+ res.should.have.status(200);
1765
+ expect(res.body.trashed).to.equal(true);
1766
+ expect(res.body.trashedAt).to.exist;
1767
+ expect(new Date(res.body.trashedAt).getTime()).to.equal(new Date(parentTrashedAt).getTime());
1768
+
1769
+ chai.request(server)
1770
+ .get('/' + savedProject._id + '/faq/?id_faq_kb=' + subagent_id)
1771
+ .auth(email, pwd)
1772
+ .end((err, res) => {
1773
+
1774
+ if (err) { console.error("err: ", err); }
1775
+ if (log) { console.log("res.body", res.body); }
1776
+
1777
+ res.should.have.status(200);
1778
+ res.body.should.be.a('array');
1779
+ expect(res.body.length).to.be.above(0);
1780
+ expect(res.body[0].trashed).to.equal(true);
1781
+ expect(res.body[0].trashedAt).to.exist;
1782
+
1783
+ done();
1784
+ })
1785
+ })
1786
+ }, 300);
1316
1787
  })
1317
1788
  })
1318
-
1319
1789
  });
1320
1790
  });
1321
1791
  });
1322
1792
  })
1323
- })
1324
1793
 
1325
- // describe('Train', () => {
1326
-
1327
- // it('train', (done) => {
1794
+ it('logical-webhook-delete-with-ttl', (done) => {
1328
1795
 
1329
- // var email = "test-signup-" + Date.now() + "@email.com";
1330
- // var pwd = "pwd";
1796
+ var email = "test-signup-" + Date.now() + "@email.com";
1797
+ var pwd = "pwd";
1331
1798
 
1332
- // userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1333
- // projectService.create("test-faqkb-train", savedUser._id).then(function (savedProject) {
1334
- // faqService.create("testbot", "http://54.228.177.1644", savedProject._id, savedUser._id).then(function (savedBot) {
1799
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1800
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
1335
1801
 
1336
- // var newFaq = new Faq({
1337
- // id_faq_kb: savedBot._id,
1338
- // question: "question1\nquestion2",
1339
- // answer: "answer",
1340
- // id_project: savedProject._id,
1341
- // topic: "default",
1342
- // createdBy: savedUser._id,
1343
- // updatedBy: savedUser._id
1344
- // });
1802
+ chai.request(server)
1803
+ .post('/' + savedProject._id + '/faq_kb')
1804
+ .auth(email, pwd)
1805
+ .send({ name: "test-webhook", type: "tilebot", subtype: "webhook", template: "blank_webhook", language: 'en' })
1806
+ .end((err, res) => {
1345
1807
 
1346
- // newFaq.save(function (err, savedFaq) {
1347
- // expect(savedBot.name).to.equal("testbot");
1348
- // expect(savedBot.secret).to.not.equal(null);
1808
+ if (err) { console.error("err: ", err); }
1809
+ if (log) { console.log("res.body", res.body); }
1349
1810
 
1350
- // chai.request(server)
1351
- // .post('/' + savedProject._id + '/faq_kb/train')
1352
- // .auth(email, pwd)
1353
- // .send({ "id_faq_kb": savedBot._id })
1354
- // .end((err, res) => {
1811
+ res.should.have.status(200);
1812
+ res.body.should.be.a('object');
1813
+ expect(res.body.name).to.equal("test-webhook");
1814
+ expect(res.body.language).to.equal("en");
1355
1815
 
1356
- // if (err) { console.error("err: ", err) };
1357
- // if (log) { console.log("res.body: ", res.body) };
1816
+ let chatbot_id = res.body._id;
1817
+
1818
+ chai.request(server)
1819
+ .post('/' + savedProject._id + '/webhooks')
1820
+ .auth(email, pwd)
1821
+ .send({ chatbot_id: chatbot_id, block_id: "example-block-id", async: false })
1822
+ .end((err, res) => {
1358
1823
 
1359
- // res.should.have.status(200);
1360
- // res.body.should.be.a('object');
1361
- // expect(res.body.train.nlu.intent).to.equal(savedBot.intent_display_name);
1362
- // // expect(res.body.text).to.equal("addestramento avviato");
1824
+ if (err) { console.error("err: ", err); }
1825
+ if (log) { console.log("res.body", res.body); }
1363
1826
 
1827
+ res.should.have.status(200);
1828
+ res.body.should.be.a('object');
1364
1829
 
1365
- // done();
1366
- // });
1830
+ chai.request(server)
1831
+ .put('/' + savedProject._id + '/faq_kb/' + chatbot_id)
1832
+ .auth(email, pwd)
1833
+ .send({ trashed: true })
1834
+ .end((err, res) => {
1367
1835
 
1836
+ if (err) { console.error("err: ", err); }
1837
+ if (log) { console.log("res.body", res.body); }
1368
1838
 
1369
- // });
1370
- // });
1371
- // });
1372
- // });
1373
- // }).timeout(20000);
1839
+ res.should.have.status(200);
1840
+ res.body.should.be.a('object');
1841
+ expect(res.body.trashed).to.equal(true);
1842
+ expect(res.body.trashedAt).to.exist;
1374
1843
 
1375
- // })
1844
+ chai.request(server)
1845
+ .get('/' + savedProject._id + '/faq/?id_faq_kb=' + chatbot_id)
1846
+ .auth(email, pwd)
1847
+ .end((err, res) => {
1376
1848
 
1377
- });
1849
+ if (err) { console.error("err: ", err); }
1850
+ if (log) { console.log("res.body", res.body); }
1851
+
1852
+ res.should.have.status(200);
1853
+ res.body.should.be.a('array');
1854
+ expect(res.body.length).to.equal(2);
1855
+ expect(res.body[0].trashed).to.equal(true);
1856
+ expect(res.body[0].trashedAt).to.exist;
1857
+
1858
+ done();
1859
+ })
1860
+
1861
+ })
1862
+ })
1863
+
1864
+ });
1865
+ });
1866
+ });
1867
+ })
1868
+ })
1869
+
1870
+ describe('Subagents', () => {
1871
+
1872
+ it('create-subagent', (done) => {
1873
+ let email = "test-signup-" + Date.now() + "@email.com";
1874
+ let pwd = "pwd";
1875
+
1876
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1877
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
1878
+
1879
+ chai.request(server)
1880
+ .post('/' + savedProject._id + '/faq_kb')
1881
+ .auth(email, pwd)
1882
+ .send({ name: "Parent", type: "tilebot", language: 'en' })
1883
+ .end((err, res) => {
1884
+
1885
+ if (err) { console.error("err: ", err); }
1886
+ if (log) { console.log("res.body", res.body); }
1887
+
1888
+ res.should.have.status(200);
1889
+ res.body.should.be.a('object');
1890
+ expect(res.body.name).to.equal("Parent");
1891
+ expect(res.body.language).to.equal("en");
1892
+
1893
+ let parent_id = res.body._id;
1894
+
1895
+ chai.request(server)
1896
+ .post('/' + savedProject._id + '/faq_kb')
1897
+ .auth(email, pwd)
1898
+ .send({ name: "Subagent", type: "tilebot", subtype: "subagent", parent_id: parent_id, language: 'en' })
1899
+ .end((err, res) => {
1900
+
1901
+ if (err) { console.error("err: ", err); }
1902
+ if (log) { console.log("res.body", res.body); }
1903
+
1904
+ res.should.have.status(200);
1905
+ res.body.should.be.a('object');
1906
+ expect(res.body.name).to.equal("Subagent");
1907
+ expect(res.body.language).to.equal("en");
1908
+ expect(res.body.parent_id).to.equal(parent_id);
1909
+ expect(res.body.attributes).to.exist;
1910
+ expect(res.body.attributes.notes).to.be.a('array');
1911
+ expect(res.body.attributes.notes.length).to.equal(1);
1912
+ expect(res.body.attributes.notes[0].id_faq_kb).to.equal(res.body._id);
1913
+
1914
+ let subagent_id = res.body._id;
1915
+
1916
+ chai.request(server)
1917
+ .get('/' + savedProject._id + '/faq/?id_faq_kb=' + subagent_id)
1918
+ .auth(email, pwd)
1919
+ .end((err, res) => {
1920
+ if (err) { console.error("err: ", err); }
1921
+ if (log) { console.log("res.body", res.body); }
1922
+
1923
+ res.should.have.status(200);
1924
+ res.body.should.be.a('array');
1925
+ res.body.length.should.equal(3);
1926
+
1927
+ done()
1928
+ })
1929
+
1930
+ })
1931
+
1932
+ })
1933
+ })
1934
+ })
1935
+ })
1936
+
1937
+ it('get-chatbot-subagents-list', (done) => {
1938
+ let email = "test-signup-" + Date.now() + "@email.com";
1939
+ let pwd = "pwd";
1940
+
1941
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1942
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
1943
+
1944
+ chai.request(server)
1945
+ .post('/' + savedProject._id + '/faq_kb')
1946
+ .auth(email, pwd)
1947
+ .send({ name: "Parent", type: "tilebot", language: 'en' })
1948
+ .end((err, res) => {
1949
+
1950
+ if (err) { console.error("err: ", err); }
1951
+ if (log) { console.log("res.body", res.body); }
1952
+
1953
+ res.should.have.status(200);
1954
+ res.body.should.be.a('object');
1955
+ expect(res.body.name).to.equal("Parent");
1956
+ expect(res.body.language).to.equal("en");
1957
+
1958
+ let parent_id = res.body._id;
1959
+
1960
+ chai.request(server)
1961
+ .post('/' + savedProject._id + '/faq_kb')
1962
+ .auth(email, pwd)
1963
+ .send({ name: "Subagent 1", type: "tilebot", subtype: "subagent", parent_id: parent_id, language: 'en' })
1964
+ .end((err, res) => {
1965
+
1966
+ if (err) { console.error("err: ", err); }
1967
+ if (log) { console.log("res.body", res.body); }
1968
+
1969
+ res.should.have.status(200);
1970
+ res.body.should.be.a('object');
1971
+ expect(res.body.name).to.equal("Subagent 1");
1972
+ expect(res.body.language).to.equal("en");
1973
+ expect(res.body.parent_id).to.equal(parent_id);
1974
+
1975
+ chai.request(server)
1976
+ .post('/' + savedProject._id + '/faq_kb')
1977
+ .auth(email, pwd)
1978
+ .send({ name: "Subagent 2", type: "tilebot", subtype: "subagent", parent_id: parent_id, language: 'en' })
1979
+ .end((err, res) => {
1980
+
1981
+ if (err) { console.error("err: ", err); }
1982
+ if (log) { console.log("res.body", res.body); }
1983
+
1984
+ res.should.have.status(200);
1985
+ res.body.should.be.a('object');
1986
+ expect(res.body.name).to.equal("Subagent 2");
1987
+ expect(res.body.language).to.equal("en");
1988
+ expect(res.body.parent_id).to.equal(parent_id);
1989
+
1990
+ chai.request(server)
1991
+ .get('/' + savedProject._id + '/faq_kb/' + parent_id + '/subagents')
1992
+ .auth(email, pwd)
1993
+ .end((err, res) => {
1994
+ if (err) { console.error("err: ", err); }
1995
+ if (log) { console.log("res.body", res.body); }
1996
+
1997
+ res.should.have.status(200);
1998
+ res.body.should.be.a('array');
1999
+ expect(res.body.length).to.equal(2);
2000
+ expect(res.body[0].name).to.equal("Subagent 2");
2001
+ expect(res.body[1].name).to.equal("Subagent 1");
2002
+
2003
+ done();
2004
+ })
2005
+
2006
+ })
2007
+
2008
+ })
2009
+
2010
+ })
2011
+ })
2012
+ })
2013
+ })
2014
+
2015
+ it('delete-subagent-allowed-when-not-referenced', (done) => {
2016
+ let email = "test-signup-" + Date.now() + "@email.com";
2017
+ let pwd = "pwd";
2018
+
2019
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
2020
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
2021
+
2022
+ chai.request(server)
2023
+ .post('/' + savedProject._id + '/faq_kb')
2024
+ .auth(email, pwd)
2025
+ .send({ name: "Parent", type: "tilebot", language: 'en' })
2026
+ .end((err, res) => {
2027
+
2028
+ if (err) { console.error("err: ", err); }
2029
+ if (log) { console.log("res.body", res.body); }
2030
+
2031
+ res.should.have.status(200);
2032
+ let parent_id = res.body._id;
2033
+
2034
+ chai.request(server)
2035
+ .post('/' + savedProject._id + '/faq_kb')
2036
+ .auth(email, pwd)
2037
+ .send({ name: "Subagent", type: "tilebot", subtype: "subagent", parent_id: parent_id, language: 'en' })
2038
+ .end((err, res) => {
2039
+
2040
+ if (err) { console.error("err: ", err); }
2041
+ if (log) { console.log("res.body", res.body); }
2042
+
2043
+ res.should.have.status(200);
2044
+ let subagent_id = res.body._id;
2045
+
2046
+ chai.request(server)
2047
+ .delete('/' + savedProject._id + '/faq_kb/' + subagent_id)
2048
+ .auth(email, pwd)
2049
+ .end((err, res) => {
2050
+
2051
+ if (err) { console.error("err: ", err); }
2052
+ if (log) { console.log("res.body", res.body); }
2053
+
2054
+ res.should.have.status(200);
2055
+ expect(res.body.success).to.equal(true);
2056
+
2057
+ chai.request(server)
2058
+ .get('/' + savedProject._id + '/faq_kb/' + subagent_id)
2059
+ .auth(email, pwd)
2060
+ .end((err, res) => {
2061
+ if (err) { console.error("err: ", err); }
2062
+ if (log) { console.log("res.body", res.body); }
2063
+
2064
+ res.should.have.status(404);
2065
+ done();
2066
+ })
2067
+ })
2068
+ })
2069
+ })
2070
+ })
2071
+ })
2072
+ })
2073
+
2074
+ it('delete-subagent-blocked-when-referenced-by-parent-botId', (done) => {
2075
+ let email = "test-signup-" + Date.now() + "@email.com";
2076
+ let pwd = "pwd";
2077
+
2078
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
2079
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
2080
+
2081
+ chai.request(server)
2082
+ .post('/' + savedProject._id + '/faq_kb')
2083
+ .auth(email, pwd)
2084
+ .send({ name: "Parent", type: "tilebot", template: "blank", language: 'en' })
2085
+ .end((err, res) => {
1378
2086
 
2087
+ if (err) { console.error("err: ", err); }
2088
+ if (log) { console.log("res.body", res.body); }
2089
+
2090
+ res.should.have.status(200);
2091
+ let parent_id = res.body._id;
1379
2092
 
1380
- /**
1381
- * This test will be no longer available after merge with master because
1382
- * the profile section can no longer be modified via api.
1383
- */
1384
- // it('createMaximumNumberExceeded', (done) => {
1385
-
1386
- // var email = "test-signup-" + Date.now() + "@email.com";
1387
- // var pwd = "pwd";
1388
-
1389
- // userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1390
- // projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
1391
-
1392
- // chai.request(server)
1393
- // .put('/projects/' + savedProject._id)
1394
- // .auth(email, pwd)
1395
- // .send({ profile: { quotes: { chatbots: 2 } } })
1396
- // .end((err, res) => {
1397
-
1398
- // if (log) { console.log("res.body", res.body); }
1399
-
1400
- // chai.request(server)
1401
- // .post('/' + savedProject._id + '/faq_kb')
1402
- // .auth(email, pwd)
1403
- // .send({ "name": "testbot1", type: "external", language: 'en' })
1404
- // .end((err, res) => {
1405
- // if (log) { console.log("res.body", res.body); }
1406
- // res.should.have.status(200);
1407
- // res.body.should.be.a('object');
1408
- // expect(res.body.name).to.equal("testbot1");
1409
- // expect(res.body.language).to.equal("en");
1410
-
1411
- // chai.request(server)
1412
- // .post('/' + savedProject._id + '/faq_kb')
1413
- // .auth(email, pwd)
1414
- // .send({ "name": "testbot2", type: "external", language: 'en' })
1415
- // .end((err, res) => {
1416
- // if (log) { console.log("res.body", res.body); }
1417
- // res.should.have.status(200);
1418
- // res.body.should.be.a('object');
1419
- // expect(res.body.name).to.equal("testbot2");
1420
- // expect(res.body.language).to.equal("en");
1421
-
1422
- // chai.request(server)
1423
- // .post('/' + savedProject._id + '/faq_kb')
1424
- // .auth(email, pwd)
1425
- // .send({ "name": "testbot3", type: "external", language: 'en' })
1426
- // .end((err, res) => {
1427
-
1428
- // if (log) { console.log("res.body", res.body); }
1429
-
1430
- // res.should.have.status(403);
1431
- // res.body.should.be.a('object');
1432
- // expect(res.body.success).to.equal(false);
1433
- // expect(res.body.error).to.equal("Maximum number of chatbots reached for the current plan");
1434
- // expect(res.body.plan_limit).to.equal(2);
1435
-
1436
- // done()
1437
-
1438
- // });
1439
- // });
1440
- // });
1441
- // })
1442
- // });
1443
- // });
1444
-
1445
- // }).timeout(20000);
1446
-
1447
-
1448
- // it('train with tiledesk-ai', (done) => {
1449
- // var email = "test-signup-" + Date.now() + "@email.com";
1450
- // var pwd = "pwd";
1451
-
1452
- // userService.signup(email, pwd, "Test Firstname", "Test Lastname").then((savedUser) => {
1453
- // projectService.create("test-faqkb-create", savedUser._id).then((savedProject) => {
1454
-
1455
- // chai.request(server)
1456
- // .post('/' + savedProject._id + '/faq_kb')
1457
- // .auth(email, pwd)
1458
- // .send({ "name": "testbot", type: "internal", template: "example", intentsEngine: "tiledesk-ai" })
1459
- // .end((err, res) => {
1460
- // if (log) {
1461
- // console.log("res.body", res.body);
1462
- // }
1463
- // res.should.have.status(200);
1464
- // res.body.should.be.a('object');
1465
- // expect(res.body.name).to.equal("testbot");
1466
- // var id_faq_kb = res.body._id;
1467
-
1468
- // chai.request(server)
1469
- // .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
1470
- // .auth(email, pwd)
1471
- // .end((err, res) => {
1472
- // if (log) { console.log("faq_list: ", res.body); }
1473
- // res.should.have.status(200);
1474
- // res.body.should.be.an('array').that.is.not.empty;
1475
-
1476
- // chai.request(server)
1477
- // .post('/' + savedProject._id + '/faq_kb/aitrain')
1478
- // .auth(email, pwd)
1479
- // .send({ id_faq_kb: id_faq_kb, webhook_enabled: false })
1480
- // .end((err, res) => {
1481
- // if (log) { console.log("train res.body: ", res.body); }
1482
-
1483
- // done();
1484
- // })
1485
-
1486
- // })
1487
-
1488
-
1489
-
1490
- // });
1491
- // })
1492
- // })
1493
- // })
1494
-
1495
-
1496
- // DEPRECATED
1497
- // it('import json (simple)', (done) => {
1498
-
1499
- // var email = "test-signup-" + Date.now() + "@email.com";
1500
- // var pwd = "pwd";
1501
-
1502
- // userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1503
- // projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
1504
-
1505
- // chai.request(server)
1506
- // .post('/' + savedProject._id + '/faq_kb')
1507
- // .auth(email, pwd)
1508
- // .send({ "name": "testbot", type: "internal", language: 'fr' })
1509
- // .end((err, res) => {
1510
- // if (log) {
1511
- // console.log("res.body: ", res.body);
1512
- // }
1513
- // res.should.have.status(200);
1514
- // res.body.should.be.a('object');
1515
- // expect(res.body.name).to.equal("testbot");
1516
- // expect(res.body.language).to.equal("fr");
1517
- // let id_faq_kb = res.body._id;
1518
-
1519
- // chai.request(server)
1520
- // .post('/' + savedProject._id + '/faq_kb/importjson/' + id_faq_kb + '?intentsOnly=true&overwrite=true')
1521
- // .auth(email, pwd)
1522
- // .set('Content-Type', 'text/plain')
1523
- // .attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example-json-intents.txt')), 'example-json-intents.txt')
1524
- // .end((err, res) => {
1525
- // if (log) {
1526
- // console.log("import (intents only) json res: ", res.body);
1527
- // }
1528
- // res.should.have.status(200);
1529
- // //res.should.be.a('object');
1530
- // //expect(res.body.success).to.equal(true);
1531
-
1532
- // chai.request(server)
1533
- // .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
1534
- // .auth(email, pwd)
1535
- // .end((err, res) => {
1536
- // if (log) {
1537
- // console.log("faq_list: ", res.body);
1538
- // }
1539
- // res.should.have.status(200);
1540
- // res.body.should.be.an('array').that.is.not.empty;
1541
-
1542
- // done();
1543
-
1544
- // })
1545
- // })
1546
- // })
1547
- // })
1548
- // })
1549
- // })
1550
-
1551
-
1552
- // DEPRECATED
1553
- // it('import json (intents only) (overwrite true)', (done) => {
1554
-
1555
- // var email = "test-signup-" + Date.now() + "@email.com";
1556
- // var pwd = "pwd";
1557
-
1558
- // userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1559
- // projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
1560
-
1561
- // chai.request(server)
1562
- // .post('/' + savedProject._id + '/faq_kb')
1563
- // .auth(email, pwd)
1564
- // .send({ "name": "testbot", type: "internal", language: 'fr', template: 'blank' })
1565
- // .end((err, res) => {
1566
- // if (log) {
1567
- // console.log("res.body: ", res.body);
1568
- // }
1569
- // res.should.have.status(200);
1570
- // res.body.should.be.a('object');
1571
- // expect(res.body.name).to.equal("testbot");
1572
- // expect(res.body.language).to.equal("fr");
1573
- // let id_faq_kb = res.body._id;
1574
-
1575
- // chai.request(server)
1576
- // .post('/' + savedProject._id + '/faq_kb/importjson/' + id_faq_kb + '?intentsOnly=true&overwrite=true')
1577
- // .auth(email, pwd)
1578
- // .set('Content-Type', 'text/plain')
1579
- // .attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example-json-intents.txt')), 'example-json-intents.txt')
1580
- // .end((err, res) => {
1581
- // if (log) {
1582
- // console.log("import (intents only) json res: ", res.body);
1583
- // }
1584
- // res.should.have.status(200);
1585
- // //res.should.be.a('object');
1586
- // //expect(res.body.success).to.equal(true);
1587
-
1588
- // chai.request(server)
1589
- // .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
1590
- // .auth(email, pwd)
1591
- // .end((err, res) => {
1592
- // if (log) {
1593
- // console.log("faq_list: ", res.body);
1594
- // }
1595
- // res.should.have.status(200);
1596
- // res.body.should.be.an('array').that.is.not.empty;
1597
-
1598
- // done();
1599
-
1600
- // })
1601
- // })
1602
- // })
1603
- // })
1604
- // })
1605
- // })
1606
-
1607
-
1608
- // DEPRECATED
1609
- // it('import json (intents only) (overwrite false)', (done) => {
1610
-
1611
- // var email = "test-signup-" + Date.now() + "@email.com";
1612
- // var pwd = "pwd";
1613
-
1614
- // userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1615
- // projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
1616
-
1617
- // chai.request(server)
1618
- // .post('/' + savedProject._id + '/faq_kb')
1619
- // .auth(email, pwd)
1620
- // .send({ "name": "testbot", type: "internal", language: 'fr', template: 'blank' })
1621
- // .end((err, res) => {
1622
- // if (log) {
1623
- // console.log("res.body: ", res.body);
1624
- // }
1625
- // res.should.have.status(200);
1626
- // res.body.should.be.a('object');
1627
- // expect(res.body.name).to.equal("testbot");
1628
- // expect(res.body.language).to.equal("fr");
1629
- // let id_faq_kb = res.body._id;
1630
-
1631
- // chai.request(server)
1632
- // .post('/' + savedProject._id + '/faq_kb/importjson/' + id_faq_kb + '?intentsOnly=true')
1633
- // .auth(email, pwd)
1634
- // .set('Content-Type', 'text/plain')
1635
- // .attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example-json-intents.txt')), 'example-json-intents.txt')
1636
- // .end((err, res) => {
1637
- // if (log) {
1638
- // console.log("import (intents only) json res: ", res.body);
1639
- // }
1640
- // res.should.have.status(200);
1641
- // //res.should.be.a('object');
1642
- // //expect(res.body.success).to.equal(true);
1643
-
1644
- // chai.request(server)
1645
- // .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
1646
- // .auth(email, pwd)
1647
- // .end((err, res) => {
1648
- // if (log) {
1649
- // console.log("faq_list: ", res.body);
1650
- // }
1651
- // res.should.have.status(200);
1652
- // res.body.should.be.an('array').that.is.not.empty;
1653
-
1654
- // done();
1655
-
1656
- // })
1657
- // })
1658
- // })
1659
- // })
1660
- // })
1661
- // })
1662
-
1663
- // it('publishChatbot', (done) => {
1664
-
1665
- // var email = "test-signup-" + Date.now() + "@email.com";
1666
- // var pwd = "pwd";
1667
-
1668
- // userService.signup(email, pwd, "Test Firstname", "Test Lastname").then(function (savedUser) {
1669
- // projectService.create("current-project", savedUser._id).then(function (currentProject) {
1670
-
1671
- // console.log("declare chatbot_service functions...")
1672
-
1673
- // class chatbot_service {
1674
- // async fork(id, api_url, token, project_id) {
1675
- // console.log("chatbot_service test fork called")
1676
- // return { message: "Chatbot forked successfully", bot_id: savedChatbot._id }
1677
- // //return chatbot_mock.existing_chatbot_mock;
1678
- // }
1679
-
1680
- // async getBotById(id, published, api_url, chatbot_templates_api_url, token, project_id, globals) {
1681
- // return chatbot_mock.existing_chatbot_mock;
1682
- // }
1683
-
1684
- // async createBot(api_url, token, chatbot, project_id) {
1685
- // return chatbot_mock.empty_chatbot_mock
1686
- // }
1687
-
1688
- // async importFaqs(api_url, id_faq_kb, token, chatbot, project_id) {
1689
- // return chatbot_mock.import_faqs_res_mock
1690
- // }
1691
- // }
1692
-
1693
- // server.set('chatbot_service', new chatbot_service());
1694
- // console.log("chatbot_service functions declared")
1695
-
1696
- // chai.request(server)
1697
- // .post('/' + currentProject._id + '/faq_kb')
1698
- // .auth(email, pwd)
1699
- // .send({ "name": "privateBot", type: "internal", language: 'en', public: "false", template: "blank" })
1700
- // .end((err, res) => {
1701
- // console.log("res.body: ", res.body);
1702
- // if (log) {
1703
- // }
1704
- // res.should.have.status(200);
1705
- // res.body.should.be.a('object');
1706
- // expect(res.body.name).to.equal("privateBot");
1707
- // expect(res.body.language).to.equal("en");
1708
- // let id_faq_kb = res.body._id;
1709
-
1710
- // chai.request(server)
1711
- // .put('/' + currentProject._id + '/faq_kb/' + id_faq_kb + '/publish')
1712
- // .auth(email, pwd)
1713
- // .set('Content-Type', 'application/json')
1714
- // .end((err, res) => {
1715
- // console.log("publish bot res.body: ", res.body);
1716
- // res.should.have.status(200);
1717
-
1718
- // done();
1719
- // })
1720
- // })
1721
-
1722
-
1723
- // })
1724
- // })
1725
- // })
1726
-
1727
- // DEPRECATED
1728
- // it('import-json-overwrite-true', (done) => {
1729
-
1730
- // var email = "test-signup-" + Date.now() + "@email.com";
1731
- // var pwd = "pwd";
1732
-
1733
- // userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
1734
- // projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
1735
-
1736
-
1737
- // chai.request(server)
1738
- // .post('/' + savedProject._id + '/faq_kb')
1739
- // .auth(email, pwd)
1740
- // .send({ "name": "testbot", type: "internal", language: 'fr', template: "blank" })
1741
- // .end((err, res) => {
1742
-
1743
- // if (err) { console.error("err: ", err) };
1744
- // if (log) { console.log("res.body: ", res.body) };
1745
-
1746
- // res.should.have.status(200);
1747
- // res.body.should.be.a('object');
1748
- // expect(res.body.name).to.equal("testbot");
1749
- // expect(res.body.language).to.equal("fr");
1750
- // let id_faq_kb = res.body._id;
1751
-
1752
- // chai.request(server)
1753
- // .post('/' + savedProject._id + '/faq_kb/importjson/' + id_faq_kb + "?overwrite=true")
1754
- // .auth(email, pwd)
1755
- // .set('Content-Type', 'text/plain')
1756
- // .attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example.json')), 'example.json')
1757
- // .end((err, res) => {
1758
-
1759
- // if (err) { console.error("err: ", err) };
1760
- // if (log) { console.log("res.body: ", res.body) };
1761
-
1762
- // res.should.have.status(200);
1763
- // res.should.be.a('object');
1764
- // expect(res.body.name).to.equal("examplebot");
1765
- // expect(res.body.language).to.equal("en");
1766
-
1767
- // chai.request(server)
1768
- // .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
1769
- // .auth(email, pwd)
1770
- // .end((err, res) => {
1771
-
1772
- // if (err) { console.error("err: ", err) };
1773
- // if (log) { console.log("res.body: ", res.body) };
1774
-
1775
- // res.should.have.status(200);
1776
- // res.body.should.be.an('array').that.is.not.empty;
1777
-
1778
- // done();
1779
-
1780
- // })
1781
- // })
1782
- // })
1783
- // })
1784
- // })
1785
- // })
2093
+ chai.request(server)
2094
+ .post('/' + savedProject._id + '/faq_kb')
2095
+ .auth(email, pwd)
2096
+ .send({ name: "subagent-2", type: "tilebot", subtype: "subagent", parent_id: parent_id, language: 'en' })
2097
+ .end((err, res) => {
2098
+
2099
+ if (err) { console.error("err: ", err); }
2100
+ if (log) { console.log("res.body", res.body); }
2101
+
2102
+ res.should.have.status(200);
2103
+ let subagent_id = res.body._id;
2104
+ let subagent_slug = res.body.slug;
2105
+
2106
+ chai.request(server)
2107
+ .post('/' + savedProject._id + '/faq')
2108
+ .auth(email, pwd)
2109
+ .send({
2110
+ id_faq_kb: parent_id,
2111
+ intent_display_name: "call-subagent",
2112
+ question: "call subagent",
2113
+ answer: "calling",
2114
+ actions: [{
2115
+ _tdActionType: "replacebotv3",
2116
+ blockName: "start",
2117
+ botId: subagent_id,
2118
+ botSlug: subagent_slug,
2119
+ useSlug: false
2120
+ }]
2121
+ })
2122
+ .end((err, res) => {
2123
+
2124
+ if (err) { console.error("err: ", err); }
2125
+ if (log) { console.log("res.body", res.body); }
2126
+
2127
+ res.should.have.status(200);
2128
+
2129
+ chai.request(server)
2130
+ .delete('/' + savedProject._id + '/faq_kb/' + subagent_id)
2131
+ .auth(email, pwd)
2132
+ .end((err, res) => {
2133
+
2134
+ if (err) { console.error("err: ", err); }
2135
+ if (log) { console.log("res.body", res.body); }
2136
+
2137
+ res.should.have.status(409);
2138
+ expect(res.body.success).to.equal(false);
2139
+ expect(res.body.error_code).to.equal(12002);
2140
+ expect(res.body.referenced_by).to.exist;
2141
+ expect(res.body.referenced_by.id_faq_kb).to.equal(parent_id);
2142
+ expect(res.body.referenced_by.intent_display_name).to.equal("call-subagent");
2143
+
2144
+ done();
2145
+ })
2146
+ })
2147
+ })
2148
+ })
2149
+ })
2150
+ })
2151
+ })
2152
+
2153
+ it('delete-subagent-blocked-when-referenced-by-sibling-botSlug', (done) => {
2154
+ let email = "test-signup-" + Date.now() + "@email.com";
2155
+ let pwd = "pwd";
2156
+
2157
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
2158
+ projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
2159
+
2160
+ chai.request(server)
2161
+ .post('/' + savedProject._id + '/faq_kb')
2162
+ .auth(email, pwd)
2163
+ .send({ name: "Parent", type: "tilebot", language: 'en' })
2164
+ .end((err, res) => {
2165
+
2166
+ if (err) { console.error("err: ", err); }
2167
+ if (log) { console.log("res.body", res.body); }
2168
+
2169
+ res.should.have.status(200);
2170
+ let parent_id = res.body._id;
2171
+
2172
+ chai.request(server)
2173
+ .post('/' + savedProject._id + '/faq_kb')
2174
+ .auth(email, pwd)
2175
+ .send({ name: "subagent-1", type: "tilebot", subtype: "subagent", parent_id: parent_id, language: 'en' })
2176
+ .end((err, res) => {
2177
+
2178
+ if (err) { console.error("err: ", err); }
2179
+ if (log) { console.log("res.body", res.body); }
2180
+
2181
+ res.should.have.status(200);
2182
+ let sibling_id = res.body._id;
2183
+
2184
+ chai.request(server)
2185
+ .post('/' + savedProject._id + '/faq_kb')
2186
+ .auth(email, pwd)
2187
+ .send({ name: "subagent-2", type: "tilebot", subtype: "subagent", parent_id: parent_id, language: 'en' })
2188
+ .end((err, res) => {
2189
+
2190
+ if (err) { console.error("err: ", err); }
2191
+ if (log) { console.log("res.body", res.body); }
2192
+
2193
+ res.should.have.status(200);
2194
+ let subagent_id = res.body._id;
2195
+ let subagent_slug = res.body.slug;
2196
+
2197
+ chai.request(server)
2198
+ .post('/' + savedProject._id + '/faq')
2199
+ .auth(email, pwd)
2200
+ .send({
2201
+ id_faq_kb: sibling_id,
2202
+ intent_display_name: "call-sibling",
2203
+ question: "call sibling",
2204
+ answer: "calling",
2205
+ actions: [{
2206
+ _tdActionType: "replacebotv3",
2207
+ blockName: "start",
2208
+ botSlug: subagent_slug,
2209
+ useSlug: true
2210
+ }]
2211
+ })
2212
+ .end((err, res) => {
2213
+
2214
+ if (err) { console.error("err: ", err); }
2215
+ if (log) { console.log("res.body", res.body); }
2216
+
2217
+ res.should.have.status(200);
2218
+
2219
+ chai.request(server)
2220
+ .delete('/' + savedProject._id + '/faq_kb/' + subagent_id)
2221
+ .auth(email, pwd)
2222
+ .end((err, res) => {
2223
+
2224
+ if (err) { console.error("err: ", err); }
2225
+ if (log) { console.log("res.body", res.body); }
2226
+
2227
+ res.should.have.status(409);
2228
+ expect(res.body.success).to.equal(false);
2229
+ expect(res.body.error_code).to.equal(12002);
2230
+ expect(res.body.referenced_by.id_faq_kb).to.equal(sibling_id);
2231
+ expect(res.body.referenced_by.intent_display_name).to.equal("call-sibling");
2232
+
2233
+ done();
2234
+ })
2235
+ })
2236
+ })
2237
+ })
2238
+ })
2239
+ })
2240
+ })
2241
+ })
2242
+ })
2243
+
2244
+ });