@tiledesk/tiledesk-server 2.1.41 → 2.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. package/.circleci/config.yml +54 -0
  2. package/.env.sample +1 -1
  3. package/.github/workflows/docker-community-push-latest.yml +22 -0
  4. package/.github/workflows/{docker-image-push.yml → docker-image-en-tag-push.yml} +1 -1
  5. package/.github/workflows/docker-image-tag-community-tag-push.yml +21 -0
  6. package/.github/workflows/{docker-push-latest.yml → docker-push-en-push-latest.yml} +1 -1
  7. package/CHANGELOG.md +198 -1
  8. package/Dockerfile +1 -1
  9. package/Dockerfile-en +1 -1
  10. package/README.md +5 -7
  11. package/app.js +12 -1
  12. package/channels/chat21/chat21Contact.js +34 -8
  13. package/channels/chat21/chat21Handler.js +48 -5
  14. package/channels/chat21/chat21WebHook.js +34 -5
  15. package/channels/chat21/nativeauth.js +2 -2
  16. package/config/email.js +2 -1
  17. package/config/global.js +3 -0
  18. package/config/labels/widget.json +170 -16
  19. package/event/messageEvent.js +18 -1
  20. package/middleware/passport.js +10 -4
  21. package/models/actionsConstants.js +7 -0
  22. package/models/department.js +3 -0
  23. package/models/faq.js +8 -2
  24. package/models/faq_kb.js +6 -0
  25. package/models/message.js +10 -4
  26. package/models/messageConstants.js +3 -3
  27. package/models/request.js +33 -3
  28. package/package.json +31 -28
  29. package/pubmodules/emailNotification/requestNotification.js +380 -62
  30. package/pubmodules/messageActions/messageActionsInterceptor.js +20 -7
  31. package/pubmodules/messageTransformer/index.js +1 -1
  32. package/pubmodules/messageTransformer/microLanguageAttributesTransformerInterceptor.js +67 -0
  33. package/pubmodules/pubModulesManager.js +66 -14
  34. package/pubmodules/rules/conciergeBot.js +81 -49
  35. package/routes/auth.js +34 -10
  36. package/routes/campaigns.js +117 -25
  37. package/routes/faq.js +19 -0
  38. package/routes/faq_kb.js +13 -4
  39. package/routes/faqpub.js +1 -1
  40. package/routes/images.js +1 -1
  41. package/routes/jwt.js +0 -1
  42. package/routes/logs.js +26 -0
  43. package/routes/message.js +7 -2
  44. package/routes/messagesRoot.js +73 -16
  45. package/routes/project_user.js +36 -1
  46. package/routes/request.js +88 -12
  47. package/routes/requestUtilRoot.js +30 -0
  48. package/routes/urls.js +12 -0
  49. package/routes/users.js +5 -1
  50. package/services/BotSubscriptionNotifier.js +1 -0
  51. package/services/departmentService.js +29 -5
  52. package/services/emailService.js +1103 -298
  53. package/services/faqBotHandler.js +176 -61
  54. package/services/faqBotSupport.js +181 -117
  55. package/services/faqService.js +17 -14
  56. package/services/messageService.js +57 -9
  57. package/services/modulesManager.js +86 -23
  58. package/services/requestService.js +58 -17
  59. package/template/email/assignedEmailMessage.html +205 -0
  60. package/template/email/assignedRequest.html +44 -14
  61. package/template/email/beenInvitedExistingUser.html +2 -2
  62. package/template/email/beenInvitedNewUser.html +1 -1
  63. package/template/email/newMessage.html +31 -12
  64. package/template/email/passwordChanged.html +2 -3
  65. package/template/email/pooledEmailMessage.html +208 -0
  66. package/template/email/pooledRequest.html +41 -14
  67. package/template/email/resetPassword.html +2 -3
  68. package/template/email/sendTranscript.html +1 -1
  69. package/template/email/test.html +1 -1
  70. package/template/email/ticket.html +78 -52
  71. package/template/email/ticket.txt +5 -1
  72. package/template/email/verify.html +1 -1
  73. package/test/authentication.js +76 -4
  74. package/test/authenticationJwt.js +76 -2
  75. package/test/campaignsRoute.js +226 -0
  76. package/test/faqService.js +3 -3
  77. package/test/faqkbRoute.js +3 -2
  78. package/test/messageRootRoute.js +193 -0
  79. package/test/messageRoute.js +75 -0
  80. package/test/messageService.js +5 -5
  81. package/test/requestRoute.js +27 -9
  82. package/test/requestService.js +472 -11
  83. package/test-int/bot.js +673 -8
  84. package/websocket/webSocketServer.js +7 -4
  85. package/template/email/ticket-taking.txt +0 -7
@@ -27,6 +27,7 @@ var leadService = require('../services/leadService');
27
27
  var userService = require('../services/userService');
28
28
 
29
29
  var Request = require("../models/request");
30
+ var Group = require("../models/group");
30
31
  var Project_user = require("../models/project_user");
31
32
  // var Tag = require('../models/tag');
32
33
  var requestEvent = require('../event/requestEvent');
@@ -60,7 +61,7 @@ describe('RequestService', function () {
60
61
  expect(savedRequest.requester.toString()).to.equal(savedProjectAndPU.project_user._id.toString());
61
62
  expect(savedRequest.first_text).to.equal("first_text");
62
63
  expect(savedRequest.department).to.not.equal(null);
63
- // expect(savedRequest.ticket_id).to.equal(1);
64
+ expect(savedRequest.ticket_id).to.equal(1);
64
65
  expect(savedRequest.status).to.equal(200);
65
66
  expect(savedRequest.participants).to.have.lengthOf(1);
66
67
  expect(savedRequest.participants).to.contains(userid);
@@ -71,6 +72,7 @@ describe('RequestService', function () {
71
72
  expect(savedRequest.participants[0].toString()).to.equal(userid);
72
73
  expect(savedRequest.participantsAgents[0].toString()).to.equal(userid);
73
74
  expect(savedRequest.assigned_at).to.not.equal(null);
75
+ console.log("savedRequest.participants1");
74
76
 
75
77
  expect(savedRequest.snapshot.department.name).to.not.equal(null);
76
78
  expect(savedRequest.snapshot.agents).to.have.lengthOf(1);
@@ -79,14 +81,15 @@ describe('RequestService', function () {
79
81
  expect(savedRequest.snapshot.requester.role).to.equal("owner");
80
82
  expect(savedRequest.snapshot.requester.isAuthenticated).to.equal(true);
81
83
  // expect(savedRequest.snapshot.requester.role).to.equal("owner");
82
-
84
+ console.log("savedRequest.participants2");
85
+
83
86
  expect(savedRequest.createdBy).to.equal(savedProjectAndPU.project_user._id.toString());
84
87
 
85
88
  // console.log("savedProject._id", savedProject._id, typeof savedProject._id);
86
89
  // console.log("savedRequest.id_project", savedRequest.id_project, typeof savedRequest.id_project);
87
90
 
88
91
  expect(savedRequest.id_project).to.equal(savedProject._id.toString());
89
-
92
+ console.log("savedRequest.participants3");
90
93
  // aiuto
91
94
  // expect(savedRequest.department).to.equal("requester_id1");
92
95
 
@@ -137,7 +140,6 @@ describe('RequestService', function () {
137
140
  expect(savedRequest.requester.toString()).to.equal(savedProjectAndPU.project_user._id.toString());
138
141
  expect(savedRequest.first_text).to.equal("first_text");
139
142
  expect(savedRequest.department).to.not.equal(null);
140
- // expect(savedRequest.ticket_id).to.equal(1);
141
143
  expect(savedRequest.status).to.equal(200);
142
144
  expect(savedRequest.participants).to.have.lengthOf(1);
143
145
  expect(savedRequest.participants).to.contains(userid);
@@ -544,6 +546,31 @@ describe('RequestService', function () {
544
546
 
545
547
 
546
548
 
549
+ // mocha test/requestService.js --grep 'createWithWrongDepartmentId'
550
+
551
+ it('createWithWrongDepartmentId', function (done) {
552
+ // this.timeout(10000);
553
+
554
+ var email = "test-request-create-" + Date.now() + "@email.com";
555
+ var pwd = "pwd";
556
+
557
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
558
+ var userid = savedUser.id;
559
+ projectService.createAndReturnProjectAndProjectUser("createWithWrongDepartmentId", userid).then(function(savedProjectAndPU) {
560
+ var savedProject = savedProjectAndPU.project;
561
+ // createWithIdAndRequester(request_id, project_user_id, lead_id, id_project, first_text, departmentid, sourcePage, language, userAgent, status, createdBy, attributes) {
562
+ requestService.createWithIdAndRequester("request_id1", savedProjectAndPU.project_user._id, null, savedProject._id, "first_text", "5ebd890b3f2702001915c89e", null, null,null,null, "user1").then(function(savedRequest) {
563
+
564
+ })
565
+ .catch(function(err) {
566
+ console.log("test reject",err);
567
+ done();
568
+ });
569
+ });
570
+ });
571
+ });
572
+
573
+
547
574
 
548
575
  it('createWithIdWithPooledDepartment', function (done) {
549
576
  // this.timeout(10000);
@@ -581,7 +608,8 @@ describe('RequestService', function () {
581
608
  });
582
609
  });
583
610
 
584
-
611
+ // mocha test/requestService.js --grep 'updateWaitingTimeRequest'
612
+
585
613
  it('updateWaitingTimeRequest', function (done) {
586
614
  this.timeout(1000);
587
615
  var email = "test-request-create-" + Date.now() + "@email.com";
@@ -601,14 +629,20 @@ describe('RequestService', function () {
601
629
  messageService.create(messageSender, "test sender", savedRequest.request_id, "hello2",
602
630
  savedProject._id, messageSender)]).then(function(all) {
603
631
  requestService.updateWaitingTimeByRequestId(savedRequest.request_id, savedProject._id).then(function(upRequest) {
604
- winston.debug("resolve closedRequest", upRequest.toObject());
605
632
  var maxWaitingTime = Date.now() - upRequest.createdAt;
633
+ console.log("resolve closedRequest", upRequest.toObject(),maxWaitingTime);
634
+
606
635
  expect(upRequest.status).to.equal(200);
636
+ // console.log("1")
607
637
  // expect(upRequest.status).to.equal(300);
608
638
  expect(upRequest.waiting_time).to.not.equal(null);
609
- expect(upRequest.waiting_time).to.gte(500);
639
+ // console.log("2")
640
+ expect(upRequest.waiting_time).to.gte(300);
641
+ // console.log("3")
610
642
  expect(upRequest.waiting_time).to.lte(maxWaitingTime);
643
+ // console.log("4")
611
644
  expect(upRequest.first_response_at).to.not.equal(null);
645
+ // console.log("5")
612
646
  done();
613
647
  }).catch(function(err){
614
648
  winston.error("test reject", err);
@@ -616,7 +650,7 @@ describe('RequestService', function () {
616
650
  done();
617
651
  });
618
652
  });
619
- }, 500);
653
+ }, 300);
620
654
  });
621
655
  });
622
656
  });
@@ -627,6 +661,8 @@ describe('RequestService', function () {
627
661
 
628
662
 
629
663
 
664
+ // mocha test/requestService.js --grep 'closeRequest'
665
+
630
666
 
631
667
  it('closeRequest', function (done) {
632
668
 
@@ -650,6 +686,8 @@ describe('RequestService', function () {
650
686
  expect(closedRequest.closed_at).to.not.equal(null);
651
687
  expect(closedRequest.transcript).to.contains("hello1");
652
688
  expect(closedRequest.transcript).to.contains("hello2");
689
+ expect(closedRequest.snapshot.agents).to.equal(undefined);
690
+
653
691
  done();
654
692
  }).catch(function(err){
655
693
  winston.error("test reject", err);
@@ -688,6 +726,8 @@ describe('RequestService', function () {
688
726
  expect(closedRequest.closed_at).to.not.equal(null);
689
727
  expect(closedRequest.transcript).to.contains("hello1");
690
728
  expect(closedRequest.transcript).to.contains("hello2");
729
+ expect(closedRequest.snapshot.agents).to.equal(undefined);
730
+
691
731
  done();
692
732
  }).catch(function(err){
693
733
  winston.error("test reject", err);
@@ -730,7 +770,8 @@ describe('RequestService', function () {
730
770
  expect(reopenedRequest.status).to.equal(200);
731
771
  expect(reopenedRequest.closed_at).to.not.equal(null);
732
772
  expect(reopenedRequest.participants).to.have.lengthOf(1);
733
-
773
+ expect(reopenedRequest.snapshot.agents).to.equal(undefined);
774
+
734
775
 
735
776
  done();
736
777
  }).catch(function(err){
@@ -744,7 +785,7 @@ describe('RequestService', function () {
744
785
  });
745
786
  });
746
787
 
747
-
788
+ // mocha test/requestService.js --grep 'addparticipant'
748
789
 
749
790
  it('addparticipant', function (done) {
750
791
 
@@ -810,6 +851,8 @@ describe('RequestService', function () {
810
851
  expect(savedRequestParticipant.hasBot).to.equal(false);
811
852
  expect(savedRequestParticipant.id_project).to.equal(savedProject._id.toString());
812
853
 
854
+ expect(savedRequestParticipant.snapshot.agents).to.equal(undefined);
855
+
813
856
  done();
814
857
  }).catch(function(err) {
815
858
  console.log("test reject", err);
@@ -957,6 +1000,252 @@ it('removeparticipant', function (done) {
957
1000
 
958
1001
 
959
1002
 
1003
+ // mocha test/requestService.js --grep 'routeDepartmentSameAgentSameDepartmentSkipUpdate'
1004
+ it('routeDepartmentSameAgentSameDepartmentSkipUpdate', function (done) {
1005
+ // this.timeout(10000);
1006
+
1007
+ var email = "test-route-create-" + Date.now() + "@email.com";
1008
+ var pwd = "pwd";
1009
+
1010
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
1011
+ var userid = savedUser.id;
1012
+
1013
+ projectService.createAndReturnProjectAndProjectUser("routeDepartmentSameAgentSameDepartmentSkipUpdate", userid).then(function(savedProjectAndPU) {
1014
+ var savedProject = savedProjectAndPU.project;
1015
+
1016
+ requestService.createWithIdAndRequester("routeDepartmentSameAgentSameDepartmentSkipUpdate", savedProjectAndPU.project_user._id, null, savedProject._id, "first_text").then(function(savedRequest) {
1017
+ winston.debug("resolve savedRequest");
1018
+ expect(savedRequest.request_id).to.equal("routeDepartmentSameAgentSameDepartmentSkipUpdate");
1019
+ expect(savedRequest.requester.toString()).to.equal(savedProjectAndPU.project_user._id.toString());
1020
+ expect(savedRequest.first_text).to.equal("first_text");
1021
+ expect(savedRequest.snapshot.agents).to.have.lengthOf(1);
1022
+ expect(savedRequest.status).to.equal(200);
1023
+ expect(savedRequest.participants).to.have.lengthOf(1);
1024
+ expect(savedRequest.participantsAgents).to.have.lengthOf(1);
1025
+ expect(savedRequest.participantsBots).to.have.lengthOf(0);
1026
+ expect(savedRequest.hasBot).to.equal(false);
1027
+ expect(savedRequest.id_project).to.equal(savedProject._id.toString());
1028
+
1029
+ console.log("savedRequest.department",savedRequest.department);
1030
+ // expect(savedRequest.department.name).to.equal("Default");
1031
+
1032
+ // departmentService.create("AssignedDepartment-for-routeDepartmentSameAgentSameDepartmentSkipUpdate", savedProject._id, 'assigned', userid).then(function(createdDepartment) {
1033
+ let dep = savedRequest.department;
1034
+
1035
+ // route(request_id, departmentid, id_project, nobot, no_populate) {
1036
+ requestService.route("routeDepartmentSameAgentSameDepartmentSkipUpdate", dep, savedProject._id, false).then(function(routedRequest) {
1037
+
1038
+ expect(routedRequest.request_id).to.equal("routeDepartmentSameAgentSameDepartmentSkipUpdate");
1039
+ expect(routedRequest.requester._id.toString()).to.equal(savedProjectAndPU.project_user._id.toString());
1040
+ expect(routedRequest.first_text).to.equal("first_text");
1041
+ expect(routedRequest.snapshot.agents).to.have.lengthOf(1);
1042
+ expect(routedRequest.status).to.equal(200);
1043
+ expect(routedRequest.participants).to.have.lengthOf(1);
1044
+ expect(routedRequest.participantsAgents).to.have.lengthOf(1);
1045
+ expect(routedRequest.participantsBots).to.have.lengthOf(0);
1046
+ expect(routedRequest.hasBot).to.equal(false);
1047
+ expect(routedRequest.id_project).to.equal(savedProject._id.toString());
1048
+
1049
+ console.log("routedRequest.department.name",routedRequest.department.name);
1050
+ expect(routedRequest.department._id.toString()).to.equal(dep.toString());
1051
+ expect(routedRequest.snapshot.department._id.toString()).to.equal(dep.toString());
1052
+
1053
+ done();
1054
+
1055
+ });
1056
+
1057
+ }).catch(function(err) {
1058
+ console.log("test reject",err);
1059
+ assert.isNotOk(err,'Promise error');
1060
+ done();
1061
+ });
1062
+ });
1063
+ });
1064
+ });
1065
+
1066
+
1067
+
1068
+ // mocha test/requestService.js --grep 'routeDepartmentSameAgentDifferentDepartment'
1069
+ it('routeDepartmentSameAgentDifferentDepartment', function (done) {
1070
+ // this.timeout(10000);
1071
+
1072
+ var email = "test-route-create-" + Date.now() + "@email.com";
1073
+ var pwd = "pwd";
1074
+
1075
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
1076
+ var userid = savedUser.id;
1077
+
1078
+ projectService.createAndReturnProjectAndProjectUser("routeDepartmentSameAgentDifferentDepartment", userid).then(function(savedProjectAndPU) {
1079
+ var savedProject = savedProjectAndPU.project;
1080
+
1081
+ requestService.createWithIdAndRequester("routeDepartmentSameAgentDifferentDepartment", savedProjectAndPU.project_user._id, null, savedProject._id, "first_text").then(function(savedRequest) {
1082
+ winston.debug("resolve savedRequest");
1083
+ expect(savedRequest.request_id).to.equal("routeDepartmentSameAgentDifferentDepartment");
1084
+ expect(savedRequest.requester.toString()).to.equal(savedProjectAndPU.project_user._id.toString());
1085
+ expect(savedRequest.first_text).to.equal("first_text");
1086
+ expect(savedRequest.snapshot.agents).to.have.lengthOf(1);
1087
+ expect(savedRequest.status).to.equal(200);
1088
+ expect(savedRequest.participants).to.have.lengthOf(1);
1089
+ expect(savedRequest.participantsAgents).to.have.lengthOf(1);
1090
+ expect(savedRequest.participantsBots).to.have.lengthOf(0);
1091
+ expect(savedRequest.hasBot).to.equal(false);
1092
+ expect(savedRequest.id_project).to.equal(savedProject._id.toString());
1093
+
1094
+ console.log("savedRequest.department",savedRequest.department);
1095
+ // expect(savedRequest.department.name).to.equal("Default");
1096
+
1097
+ departmentService.create("AssignedDepartment-for-routeDepartmentSameAgentDifferentDepartment", savedProject._id, 'assigned', userid).then(function(createdDepartment) {
1098
+
1099
+ // route(request_id, departmentid, id_project, nobot, no_populate) {
1100
+ requestService.route("routeDepartmentSameAgentDifferentDepartment", createdDepartment._id, savedProject._id, false).then(function(routedRequest) {
1101
+
1102
+ expect(routedRequest.request_id).to.equal("routeDepartmentSameAgentDifferentDepartment");
1103
+ expect(routedRequest.requester._id.toString()).to.equal(savedProjectAndPU.project_user._id.toString());
1104
+ expect(routedRequest.first_text).to.equal("first_text");
1105
+ expect(routedRequest.snapshot.agents).to.have.lengthOf(1);
1106
+ expect(routedRequest.status).to.equal(200);
1107
+ expect(routedRequest.participants).to.have.lengthOf(1);
1108
+ expect(routedRequest.participantsAgents).to.have.lengthOf(1);
1109
+ expect(routedRequest.participantsBots).to.have.lengthOf(0);
1110
+ expect(routedRequest.hasBot).to.equal(false);
1111
+ expect(routedRequest.id_project).to.equal(savedProject._id.toString());
1112
+
1113
+ console.log("routedRequest.department.name",routedRequest.department.name);
1114
+ expect(routedRequest.department._id.toString()).to.equal(createdDepartment._id.toString());
1115
+ expect(routedRequest.snapshot.department._id.toString()).to.equal(createdDepartment._id.toString());
1116
+
1117
+ done();
1118
+
1119
+ });
1120
+
1121
+ }).catch(function(err) {
1122
+ console.log("test reject",err);
1123
+ assert.isNotOk(err,'Promise error');
1124
+ done();
1125
+ });
1126
+ });
1127
+ });
1128
+ });
1129
+ });
1130
+
1131
+
1132
+
1133
+
1134
+ // mocha test/requestService.js --grep 'routeDepartmentDifferentAgentDifferentDepartment'
1135
+ it('routeDepartmentDifferentAgentDifferentDepartment', function (done) {
1136
+ // this.timeout(10000);
1137
+
1138
+ var email = "test-route-create-" + Date.now() + "@email.com";
1139
+ var pwd = "pwd";
1140
+
1141
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
1142
+ var userid = savedUser.id;
1143
+
1144
+ projectService.createAndReturnProjectAndProjectUser("routeDepartmentDifferentAgentDifferentDepartment", userid).then(function(savedProjectAndPU) {
1145
+ var savedProject = savedProjectAndPU.project;
1146
+
1147
+
1148
+
1149
+
1150
+ var email2 = "test-route-create-" + Date.now() + "@email.com";
1151
+ var pwd2 = "pwd";
1152
+
1153
+ userService.signup( email2 ,pwd2, "Test Firstname", "Test lastname").then(function(savedUser2) {
1154
+ var userid2 = savedUser2.id;
1155
+
1156
+
1157
+ var newProject_user = new Project_user({
1158
+ // _id: new mongoose.Types.ObjectId(),
1159
+ id_project: savedProject._id.toString(),
1160
+ id_user: savedUser2._id.toString(),
1161
+ role: "agent",
1162
+ user_available: true,
1163
+ createdBy: userid,
1164
+ updatedBy: userid
1165
+ });
1166
+
1167
+ newProject_user.save(function (err, savedProject_user) {
1168
+
1169
+ if (err) {
1170
+ console.log("err",err)
1171
+ }
1172
+
1173
+ requestService.createWithIdAndRequester("routeDepartmentDifferentAgentDifferentDepartment", savedProjectAndPU.project_user._id, null, savedProject._id, "first_text").then(function(savedRequest) {
1174
+ winston.debug("resolve savedRequest");
1175
+ expect(savedRequest.request_id).to.equal("routeDepartmentDifferentAgentDifferentDepartment");
1176
+ expect(savedRequest.requester.toString()).to.equal(savedProjectAndPU.project_user._id.toString());
1177
+ expect(savedRequest.first_text).to.equal("first_text");
1178
+ expect(savedRequest.snapshot.agents).to.have.lengthOf(2);
1179
+ expect(savedRequest.status).to.equal(200);
1180
+ expect(savedRequest.participants).to.have.lengthOf(1);
1181
+ // expect(savedRequest.participants[0]).to.equal(userid);
1182
+ expect(savedRequest.participantsAgents).to.have.lengthOf(1);
1183
+ expect(savedRequest.participantsBots).to.have.lengthOf(0);
1184
+ expect(savedRequest.hasBot).to.equal(false);
1185
+ expect(savedRequest.id_project).to.equal(savedProject._id.toString());
1186
+
1187
+ console.log("savedRequest.department",savedRequest.department);
1188
+ // expect(savedRequest.department.name).to.equal("Default");
1189
+
1190
+
1191
+ var newGroup = new Group({
1192
+ name: "group1",
1193
+ members: [userid2],
1194
+ trashed: false,
1195
+ id_project: savedProject._id,
1196
+ createdBy: userid,
1197
+ updatedBy: userid
1198
+ });
1199
+ newGroup.save(function (err, savedGroup) {
1200
+ console.log("savedGroup",savedGroup)
1201
+
1202
+
1203
+
1204
+ departmentService.create("AssignedDepartment-for-routeDepartmentDifferentAgentDifferentDepartment", savedProject._id, 'assigned', userid).then(function(createdDepartment) {
1205
+
1206
+
1207
+ createdDepartment.id_group = newGroup._id;
1208
+ createdDepartment.save(function (err, savedGroupDepartment) {
1209
+ console.log("savedGroupDepartment",savedGroupDepartment)
1210
+
1211
+
1212
+ // route(request_id, departmentid, id_project, nobot, no_populate) {
1213
+ requestService.route("routeDepartmentDifferentAgentDifferentDepartment", createdDepartment._id, savedProject._id, false).then(function(routedRequest) {
1214
+
1215
+ expect(routedRequest.request_id).to.equal("routeDepartmentDifferentAgentDifferentDepartment");
1216
+ expect(routedRequest.requester._id.toString()).to.equal(savedProjectAndPU.project_user._id.toString());
1217
+ expect(routedRequest.first_text).to.equal("first_text");
1218
+ expect(routedRequest.snapshot.agents).to.have.lengthOf(1);
1219
+ expect(routedRequest.status).to.equal(200);
1220
+ expect(routedRequest.participants).to.have.lengthOf(1);
1221
+ expect(routedRequest.participants[0]).to.equal(userid2);
1222
+ expect(routedRequest.participantsAgents).to.have.lengthOf(1);
1223
+ expect(routedRequest.participantsBots).to.have.lengthOf(0);
1224
+ expect(routedRequest.hasBot).to.equal(false);
1225
+ expect(routedRequest.id_project).to.equal(savedProject._id.toString());
1226
+
1227
+ console.log("routedRequest.department.name",routedRequest.department.name);
1228
+ expect(routedRequest.department._id.toString()).to.equal(createdDepartment._id.toString());
1229
+ expect(routedRequest.snapshot.department._id.toString()).to.equal(createdDepartment._id.toString());
1230
+
1231
+ done();
1232
+
1233
+ });
1234
+
1235
+ });
1236
+ });
1237
+ });
1238
+ });
1239
+ });
1240
+ });
1241
+ });
1242
+ });
1243
+ });
1244
+
1245
+
1246
+
1247
+
1248
+
960
1249
 
961
1250
 
962
1251
 
@@ -1138,4 +1427,176 @@ it('removeTag', function (done) {
1138
1427
 
1139
1428
 
1140
1429
 
1141
- });
1430
+
1431
+
1432
+
1433
+
1434
+
1435
+ // mocha test/requestService.js --grep 'createMessageMicroLanguageAttributes'
1436
+
1437
+ it('createMessageMicroLanguageAttributes', function (done) {
1438
+ // this.timeout(10000);
1439
+
1440
+
1441
+ var microLanguageTransformerInterceptor = require('../pubmodules/messageTransformer/microLanguageAttributesTransformerInterceptor');
1442
+ // var microLanguageTransformerInterceptor = require('../pubmodules/messageTransformer/microLanguageTransformerInterceptor');
1443
+ console.log("microLanguageTransformerInterceptor",microLanguageTransformerInterceptor);
1444
+ microLanguageTransformerInterceptor.listen();
1445
+
1446
+
1447
+
1448
+ var email = "test-request-create-" + Date.now() + "@email.com";
1449
+ var pwd = "pwd";
1450
+
1451
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
1452
+ var userid = savedUser.id;
1453
+
1454
+ projectService.createAndReturnProjectAndProjectUser("createWithId", userid).then(function(savedProjectAndPU) {
1455
+ var savedProject = savedProjectAndPU.project;
1456
+
1457
+ leadService.createIfNotExists("leadfullname", "email@email.com", savedProject._id).then(function(createdLead) {
1458
+
1459
+ var request = {
1460
+ request_id:"request_id1", project_user_id:savedProjectAndPU.project_user._id, lead_id:createdLead._id,
1461
+ id_project:savedProject._id, first_text: "first_text",
1462
+ participants: [userid],
1463
+ lead:createdLead, requester: savedProjectAndPU.project_user };
1464
+
1465
+ requestService.create(request).then(function(savedRequest) {
1466
+ winston.info("resolve", savedRequest.toObject());
1467
+
1468
+ // create(sender, senderFullname, recipient, text, id_project, createdBy, status, attributes, type, metadata) {
1469
+ messageService.create(userid, "test sender", "testrecipient-createMessageMicroLanguageFromBot", "ciao\n* Button1",
1470
+ savedProject._id, userid, undefined, {microlanguage:true}).then(function(savedMessage){
1471
+ winston.debug("resolve savedMessage", savedMessage.toObject());
1472
+
1473
+ expect(savedMessage.text).to.equal("ciao");
1474
+ expect(savedMessage.type).to.equal("text");
1475
+ expect(savedMessage.attributes._raw_message).to.equal("ciao\n* Button1","attachment");
1476
+ expect(savedMessage.attributes.attachment.type).to.equal("template");
1477
+ expect(savedMessage.attributes.attachment.buttons[0].value).to.equal("Button1");
1478
+ expect(savedMessage.sender).to.equal(userid);
1479
+ expect(savedMessage.senderFullname).to.equal("test sender");
1480
+ expect(savedMessage.recipient).to.equal("testrecipient-createMessageMicroLanguageFromBot");
1481
+ done();
1482
+
1483
+ })
1484
+ });
1485
+ });
1486
+ });
1487
+
1488
+ });
1489
+ });
1490
+
1491
+
1492
+
1493
+
1494
+
1495
+
1496
+
1497
+
1498
+
1499
+
1500
+
1501
+ // mocha test/requestService.js --grep 'createMessageMicroLanguageFromBot'
1502
+
1503
+ it('createMessageMicroLanguageFromBot', function (done) {
1504
+ // this.timeout(10000);
1505
+
1506
+
1507
+ // var microLanguageTransformerInterceptor = require('../pubmodules/messageTransformer/microLanguageAttributesTransformerInterceptor');
1508
+ var microLanguageTransformerInterceptor = require('../pubmodules/messageTransformer/microLanguageTransformerInterceptor');
1509
+ console.log("microLanguageTransformerInterceptor",microLanguageTransformerInterceptor);
1510
+ microLanguageTransformerInterceptor.listen();
1511
+
1512
+
1513
+
1514
+ var email = "test-request-create-" + Date.now() + "@email.com";
1515
+ var pwd = "pwd";
1516
+
1517
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
1518
+ var userid = savedUser.id;
1519
+
1520
+ projectService.createAndReturnProjectAndProjectUser("createWithId", userid).then(function(savedProjectAndPU) {
1521
+ var savedProject = savedProjectAndPU.project;
1522
+
1523
+ leadService.createIfNotExists("leadfullname", "email@email.com", savedProject._id).then(function(createdLead) {
1524
+
1525
+ var request = {
1526
+ request_id:"request_id1", project_user_id:savedProjectAndPU.project_user._id, lead_id:createdLead._id,
1527
+ id_project:savedProject._id, first_text: "first_text",
1528
+ participants: ["bot_"+userid],
1529
+ lead:createdLead, requester: savedProjectAndPU.project_user };
1530
+
1531
+ requestService.create(request).then(function(savedRequest) {
1532
+ winston.info("resolve", savedRequest.toObject());
1533
+
1534
+ // create(sender, senderFullname, recipient, text, id_project, createdBy, status, attributes, type, metadata) {
1535
+ messageService.create(userid, "test sender", "testrecipient-createMessageMicroLanguageFromBot", "ciao\n* Button1",
1536
+ savedProject._id, userid, undefined, {microlanguage:true}).then(function(savedMessage){
1537
+ winston.debug("resolve savedMessage", savedMessage.toObject());
1538
+
1539
+ expect(savedMessage.text).to.equal("ciao");
1540
+ expect(savedMessage.type).to.equal("text");
1541
+ expect(savedMessage.attributes._raw_message).to.equal("ciao\n* Button1","attachment");
1542
+ expect(savedMessage.attributes.attachment.type).to.equal("template");
1543
+ expect(savedMessage.attributes.attachment.buttons[0].value).to.equal("Button1");
1544
+ expect(savedMessage.sender).to.equal(userid);
1545
+ expect(savedMessage.senderFullname).to.equal("test sender");
1546
+ expect(savedMessage.recipient).to.equal("testrecipient-createMessageMicroLanguageFromBot");
1547
+ done();
1548
+
1549
+ })
1550
+ });
1551
+ });
1552
+ });
1553
+
1554
+ });
1555
+ });
1556
+
1557
+
1558
+
1559
+ // mocha test/requestService.js --grep 'selectSnapshot'
1560
+
1561
+ it('selectSnapshot', function (done) {
1562
+ // this.timeout(10000);
1563
+ // return new Promise(function (resolve) {
1564
+ var email = "test-request-create-" + Date.now() + "@email.com";
1565
+ var pwd = "pwd";
1566
+
1567
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
1568
+ var userid = savedUser.id;
1569
+
1570
+ projectService.createAndReturnProjectAndProjectUser("createWithId", userid).then(function(savedProjectAndPU) {
1571
+ var savedProject = savedProjectAndPU.project;
1572
+
1573
+ leadService.createIfNotExists("leadfullname", "email@email.com", savedProject._id).then(function(createdLead) {
1574
+
1575
+ var request = {
1576
+ request_id:"request_id1", project_user_id:savedProjectAndPU.project_user._id, lead_id:createdLead._id,
1577
+ id_project:savedProject._id, first_text: "first_text",
1578
+ participants: ["bot_"+userid],
1579
+ lead:createdLead, requester: savedProjectAndPU.project_user };
1580
+
1581
+ requestService.create(request).then(async function(savedRequest) {
1582
+ winston.info("resolve", savedRequest.toObject());
1583
+
1584
+ var snapshotAgents = await Request.findById(savedRequest.id).select({"snapshot":1}).exec();
1585
+
1586
+ console.log("snapshotAgents",snapshotAgents);
1587
+
1588
+ expect(snapshotAgents.snapshot.agents.length).to.equal(1);
1589
+ // return;
1590
+ done();
1591
+
1592
+ });
1593
+ });
1594
+ });
1595
+ });
1596
+ // });
1597
+ });
1598
+
1599
+ });
1600
+
1601
+
1602
+