@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
@@ -146,7 +146,7 @@ it('upload-avatar', (done) => {
146
146
  });
147
147
 
148
148
  });
149
- });
149
+ }).timeout(1000);
150
150
 
151
151
 
152
152
 
@@ -112,13 +112,14 @@ describe('MessageRoute', () => {
112
112
  .end(function(err, res) {
113
113
  //console.log("res", res);
114
114
  console.log("res.body", res.body);
115
- res.should.have.status(500);
115
+ res.should.have.status(422);
116
116
 
117
117
  done();
118
118
  });
119
119
  });
120
120
  });
121
- });
121
+ }).timeout(20000);
122
+
122
123
 
123
124
 
124
125
 
@@ -144,7 +145,7 @@ it('createSimpleNoText', function (done) {
144
145
  .end(function(err, res) {
145
146
  //console.log("res", res);
146
147
  console.log("res.body", res.body);
147
- res.should.have.status(500);
148
+ res.should.have.status(422);
148
149
 
149
150
  done();
150
151
  });
@@ -789,6 +790,387 @@ it('createSimpleWithFollowers', function (done) {
789
790
 
790
791
 
791
792
 
793
+
794
+
795
+
796
+
797
+
798
+ // mocha test/messageRoute.js --grep 'createMultiTextNoSender1'
799
+
800
+ it('createMultiTextNoSender1', function (done) {
801
+
802
+ var email = "test-message-create-" + Date.now() + "@email.com";
803
+ var pwd = "pwd";
804
+
805
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
806
+ projectService.createAndReturnProjectAndProjectUser("message-createMultiText", savedUser._id).then(function(savedProjectAndPU) {
807
+
808
+ var savedProject = savedProjectAndPU.project;
809
+
810
+
811
+ chai.request(server)
812
+ .post('/'+ savedProject._id + '/requests')
813
+ .auth(email, pwd)
814
+ .set('content-type', 'application/json')
815
+ .send({"first_text":"first_text"})
816
+ .end(function(err, res) {
817
+
818
+ console.log("res.body", res.body);
819
+ res.should.have.status(200);
820
+ res.body.should.be.a('object');
821
+ res.body.should.have.property('first_text').eql('first_text');
822
+
823
+ var request_id = res.body.request_id;
824
+ console.log("request_id",request_id);
825
+
826
+ chai.request(server)
827
+ .post('/'+ savedProject._id + '/requests/'+request_id+'/messages/multi')
828
+ .auth(email, pwd)
829
+ .set('content-type', 'application/json')
830
+ .send([{"text":"text1"}, {"text":"text2"}])
831
+ .end(function(err, res) {
832
+ //console.log("res", res);
833
+ console.log("res.body", res.body);
834
+ res.should.have.status(200);
835
+ res.body.should.be.a('array');
836
+
837
+ expect(res.body[0].sender).to.equal(savedUser._id.toString());
838
+ expect(res.body[0].senderFullname).to.equal("Test Firstname Test lastname");
839
+ expect(res.body[0].recipient).to.equal(request_id);
840
+ expect(res.body[0].text).to.equal("text1");
841
+ expect(res.body[0].id_project).to.equal(savedProject._id.toString());
842
+ expect(res.body[0].createdBy).to.equal(savedUser._id.toString());
843
+ expect(res.body[0].status).to.equal(0);
844
+ expect(res.body[0].channel_type).to.equal("group");
845
+ expect(res.body[0].channel.name).to.equal("chat21");
846
+
847
+
848
+
849
+ expect(res.body[1].sender).to.equal(savedUser._id.toString());
850
+ expect(res.body[0].senderFullname).to.equal("Test Firstname Test lastname");
851
+ expect(res.body[1].recipient).to.equal(request_id);
852
+ expect(res.body[1].text).to.equal("text2");
853
+ expect(res.body[1].id_project).to.equal(savedProject._id.toString());
854
+ expect(res.body[1].createdBy).to.equal(savedUser._id.toString());
855
+ expect(res.body[1].status).to.equal(0);
856
+ expect(res.body[1].channel_type).to.equal("group");
857
+ expect(res.body[1].channel.name).to.equal("chat21");
858
+
859
+ done();
860
+ });
861
+ });
862
+ });
863
+ });
864
+ });
865
+
866
+
867
+
868
+
869
+
870
+ // mocha test/messageRoute.js --grep 'createMultiTextNoSenderNoText'
871
+
872
+ it('createMultiTextNoSenderNoText', function (done) {
873
+
874
+ var email = "test-message-create-" + Date.now() + "@email.com";
875
+ var pwd = "pwd";
876
+
877
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
878
+ projectService.createAndReturnProjectAndProjectUser("message-createMultiText", savedUser._id).then(function(savedProjectAndPU) {
879
+
880
+ var savedProject = savedProjectAndPU.project;
881
+
882
+
883
+ chai.request(server)
884
+ .post('/'+ savedProject._id + '/requests')
885
+ .auth(email, pwd)
886
+ .set('content-type', 'application/json')
887
+ .send({"first_text":"first_text"})
888
+ .end(function(err, res) {
889
+
890
+ console.log("res.body", res.body);
891
+ res.should.have.status(200);
892
+ res.body.should.be.a('object');
893
+ res.body.should.have.property('first_text').eql('first_text');
894
+
895
+ var request_id = res.body.request_id;
896
+ console.log("request_id",request_id);
897
+
898
+ chai.request(server)
899
+ .post('/'+ savedProject._id + '/requests/'+request_id+'/messages/multi')
900
+ .auth(email, pwd)
901
+ .set('content-type', 'application/json')
902
+ .send([{}, {"text":"text2"}])
903
+ .end(function(err, res) {
904
+ //console.log("res", res);
905
+ console.log("res.body", res.body);
906
+ res.should.have.status(500);
907
+
908
+ done();
909
+ });
910
+ });
911
+ });
912
+ });
913
+ });
914
+
915
+
916
+
917
+
918
+
919
+ // mocha test/messageRoute.js --grep 'createMultiTextWithSender'
920
+
921
+ it('createMultiTextWithSender', function (done) {
922
+
923
+ var email = "test-message-create-" + Date.now() + "@email.com";
924
+ var pwd = "pwd";
925
+
926
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
927
+
928
+ var email2 = "test-message-createwithsender22-" + Date.now() + "@email.com";
929
+ var pwd2 = "pwd";
930
+
931
+ userService.signup( email2 ,pwd2, "Test Firstname22", "Test lastname22").then(function(savedUser2) {
932
+
933
+
934
+ projectService.createAndReturnProjectAndProjectUser("message-createMultiText", savedUser._id).then(function(savedProjectAndPU) {
935
+
936
+ var savedProject = savedProjectAndPU.project;
937
+
938
+
939
+
940
+ var pu2 = new Project_user({
941
+ // _id: new mongoose.Types.ObjectId(),
942
+ id_project: savedProject._id,
943
+ id_user: savedUser2._id,
944
+ role: roleConstants.USER,
945
+ user_available: true,
946
+ createdBy: savedUser2._id,
947
+ updatedBy: savedUser2._id,
948
+ });
949
+ pu2.save(function (err, savedProject_user2) {
950
+
951
+
952
+ chai.request(server)
953
+ .post('/'+ savedProject._id + '/requests')
954
+ .auth(email, pwd)
955
+ .set('content-type', 'application/json')
956
+ .send({"first_text":"first_text"})
957
+ .end(function(err, res) {
958
+
959
+ console.log("res.body", res.body);
960
+ res.should.have.status(200);
961
+ res.body.should.be.a('object');
962
+
963
+ res.body.should.have.property('first_text').eql('first_text');
964
+
965
+ var request_id = res.body.request_id;
966
+ console.log("request_id",request_id);
967
+
968
+ chai.request(server)
969
+ .post('/'+ savedProject._id + '/requests/'+request_id+'/messages/multi')
970
+ .auth(email, pwd)
971
+ .set('content-type', 'application/json')
972
+ .send([{"sender":savedUser2._id,"text":"text1"}, {"sender":savedUser2._id,"text":"text2"}])
973
+ .end(function(err, res) {
974
+ //console.log("res", res);
975
+ console.log("res.body", res.body);
976
+ res.should.have.status(200);
977
+ res.body.should.be.a('array');
978
+
979
+ expect(res.body[0].sender).to.equal(savedUser2._id.toString());
980
+ expect(res.body[0].senderFullname).to.equal("Test Firstname Test lastname");
981
+ expect(res.body[0].recipient).to.equal(request_id);
982
+ expect(res.body[0].text).to.equal("text1");
983
+ expect(res.body[0].id_project).to.equal(savedProject._id.toString());
984
+ expect(res.body[0].createdBy).to.equal(savedUser2._id.toString());
985
+ expect(res.body[0].status).to.equal(0);
986
+ expect(res.body[0].channel_type).to.equal("group");
987
+ expect(res.body[0].channel.name).to.equal("chat21");
988
+
989
+
990
+
991
+ expect(res.body[1].sender).to.equal(savedUser2._id.toString());
992
+ expect(res.body[1].senderFullname).to.equal("Test Firstname Test lastname");
993
+ expect(res.body[1].recipient).to.equal(request_id);
994
+ expect(res.body[1].text).to.equal("text2");
995
+ expect(res.body[1].id_project).to.equal(savedProject._id.toString());
996
+ expect(res.body[1].createdBy).to.equal(savedUser2._id.toString());
997
+ expect(res.body[1].status).to.equal(0);
998
+ expect(res.body[1].channel_type).to.equal("group");
999
+ expect(res.body[1].channel.name).to.equal("chat21");
1000
+
1001
+ done();
1002
+ });
1003
+ });
1004
+ });
1005
+ });
1006
+ });
1007
+ });
1008
+ });
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+ // mocha test/messageRoute.js --grep 'createMultiTextWithHardcodedSender'
1019
+
1020
+ it('createMultiTextWithHardcodedSender', function (done) {
1021
+
1022
+ var email = "test-message-create-" + Date.now() + "@email.com";
1023
+ var pwd = "pwd";
1024
+
1025
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
1026
+
1027
+
1028
+
1029
+
1030
+ projectService.createAndReturnProjectAndProjectUser("message-createMultiTextWithHardcodedSender", savedUser._id).then(function(savedProjectAndPU) {
1031
+
1032
+ var savedProject = savedProjectAndPU.project;
1033
+
1034
+ chai.request(server)
1035
+ .post('/'+ savedProject._id + '/requests')
1036
+ .auth(email, pwd)
1037
+ .set('content-type', 'application/json')
1038
+ .send({"first_text":"first_text"})
1039
+ .end(function(err, res) {
1040
+
1041
+ console.log("res.body", res.body);
1042
+ res.should.have.status(200);
1043
+ res.body.should.be.a('object');
1044
+
1045
+ res.body.should.have.property('first_text').eql('first_text');
1046
+
1047
+ var request_id = res.body.request_id;
1048
+ console.log("request_id",request_id);
1049
+
1050
+ chai.request(server)
1051
+ .post('/'+ savedProject._id + '/requests/'+request_id+'/messages/multi')
1052
+ .auth(email, pwd)
1053
+ .set('content-type', 'application/json')
1054
+ .send([{"sender":"andrealeo","text":"text1"}, {"sender":"rocco","text":"text2"}])
1055
+ .end(function(err, res) {
1056
+ //console.log("res", res);
1057
+ console.log("res.body", res.body);
1058
+ res.should.have.status(200);
1059
+ res.body.should.be.a('array');
1060
+
1061
+ expect(res.body[0].sender).to.equal("andrealeo");
1062
+ expect(res.body[0].senderFullname).to.equal("Test Firstname Test lastname");
1063
+ expect(res.body[0].recipient).to.equal(request_id);
1064
+ expect(res.body[0].text).to.equal("text1");
1065
+ expect(res.body[0].id_project).to.equal(savedProject._id.toString());
1066
+ expect(res.body[0].createdBy).to.equal("andrealeo");
1067
+ expect(res.body[0].status).to.equal(0);
1068
+ expect(res.body[0].channel_type).to.equal("group");
1069
+ expect(res.body[0].channel.name).to.equal("chat21");
1070
+
1071
+
1072
+
1073
+ expect(res.body[1].sender).to.equal("rocco");
1074
+ expect(res.body[1].senderFullname).to.equal("Test Firstname Test lastname");
1075
+ expect(res.body[1].recipient).to.equal(request_id);
1076
+ expect(res.body[1].text).to.equal("text2");
1077
+ expect(res.body[1].id_project).to.equal(savedProject._id.toString());
1078
+ expect(res.body[1].createdBy).to.equal("rocco");
1079
+ expect(res.body[1].status).to.equal(0);
1080
+ expect(res.body[1].channel_type).to.equal("group");
1081
+ expect(res.body[1].channel.name).to.equal("chat21");
1082
+
1083
+ done();
1084
+ });
1085
+ });
1086
+ });
1087
+ });
1088
+ });
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+ // mocha test/messageRoute.js --grep 'createMultiTextWithHardcodedSenderAndSenderFullname'
1097
+
1098
+ it('createMultiTextWithHardcodedSenderAndSenderFullname', function (done) {
1099
+
1100
+ var email = "test-message-create-" + Date.now() + "@email.com";
1101
+ var pwd = "pwd";
1102
+
1103
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
1104
+
1105
+
1106
+
1107
+
1108
+ projectService.createAndReturnProjectAndProjectUser("message-createMultiTextWithHardcodedSenderAndSenderFullname", savedUser._id).then(function(savedProjectAndPU) {
1109
+
1110
+ var savedProject = savedProjectAndPU.project;
1111
+
1112
+ chai.request(server)
1113
+ .post('/'+ savedProject._id + '/requests')
1114
+ .auth(email, pwd)
1115
+ .set('content-type', 'application/json')
1116
+ .send({"first_text":"first_text"})
1117
+ .end(function(err, res) {
1118
+
1119
+ console.log("res.body", res.body);
1120
+ res.should.have.status(200);
1121
+ res.body.should.be.a('object');
1122
+
1123
+ res.body.should.have.property('first_text').eql('first_text');
1124
+
1125
+ var request_id = res.body.request_id;
1126
+ console.log("request_id",request_id);
1127
+
1128
+ chai.request(server)
1129
+ .post('/'+ savedProject._id + '/requests/'+request_id+'/messages/multi')
1130
+ .auth(email, pwd)
1131
+ .set('content-type', 'application/json')
1132
+ .send([{"sender":"andrealeo", "senderFullname":"Andrea","text":"text1"}, {"sender":"rocco", "senderFullname":"Rocco", "text":"text2"}])
1133
+ .end(function(err, res) {
1134
+ //console.log("res", res);
1135
+ console.log("res.body", res.body);
1136
+ res.should.have.status(200);
1137
+ res.body.should.be.a('array');
1138
+
1139
+ expect(res.body[0].sender).to.equal("andrealeo");
1140
+ expect(res.body[0].senderFullname).to.equal("Andrea");
1141
+ expect(res.body[0].recipient).to.equal(request_id);
1142
+ expect(res.body[0].text).to.equal("text1");
1143
+ expect(res.body[0].id_project).to.equal(savedProject._id.toString());
1144
+ expect(res.body[0].createdBy).to.equal("andrealeo");
1145
+ expect(res.body[0].status).to.equal(0);
1146
+ expect(res.body[0].channel_type).to.equal("group");
1147
+ expect(res.body[0].channel.name).to.equal("chat21");
1148
+
1149
+
1150
+
1151
+ expect(res.body[1].sender).to.equal("rocco");
1152
+ expect(res.body[1].senderFullname).to.equal("Rocco");
1153
+ expect(res.body[1].recipient).to.equal(request_id);
1154
+ expect(res.body[1].text).to.equal("text2");
1155
+ expect(res.body[1].id_project).to.equal(savedProject._id.toString());
1156
+ expect(res.body[1].createdBy).to.equal("rocco");
1157
+ expect(res.body[1].status).to.equal(0);
1158
+ expect(res.body[1].channel_type).to.equal("group");
1159
+ expect(res.body[1].channel.name).to.equal("chat21");
1160
+
1161
+ done();
1162
+ });
1163
+ });
1164
+ });
1165
+ });
1166
+ });
1167
+
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
792
1174
  it('getall', function (done) {
793
1175
  // this.timeout(10000);
794
1176
 
@@ -1016,7 +1398,7 @@ describe('/SendMessageSigninAnonym', () => {
1016
1398
  var userId = res.body.user._id;
1017
1399
  expect(res.body.success).to.equal(true);
1018
1400
  expect(res.body.user.email).to.equal(undefined);
1019
- expect(res.body.user.firstname).to.equal("Guest");
1401
+ expect(res.body.user.firstname).to.contains("guest#"); // guest_here
1020
1402
 
1021
1403
  expect(res.body.token).to.not.equal(undefined);
1022
1404
 
@@ -1065,7 +1447,7 @@ describe('/SendMessageSigninAnonym', () => {
1065
1447
  console.log("res.body", res.body);
1066
1448
  expect(res.body.lead.lead_id).to.equal(userId);
1067
1449
  expect(res.body.lead.email).to.equal(undefined);
1068
- expect(res.body.lead.fullname).to.equal("Guest ");
1450
+ expect(res.body.lead.fullname).to.contains("guest#"); // guest_here
1069
1451
  expect(res.body.requester.role).to.equal("guest");
1070
1452
  expect(res.body.requester.uuid_user).to.equal(userId);
1071
1453
  expect(res.body.requester.id_user).to.equal(undefined);
@@ -47,7 +47,7 @@ describe('RequestRoute', () => {
47
47
  .post('/'+ savedProject._id + '/requests/')
48
48
  .auth(email, pwd)
49
49
  .set('content-type', 'application/json')
50
- .send({"text":"first_text"})
50
+ .send({"first_text":"first_text"})
51
51
  .end(function(err, res) {
52
52
  //console.log("res", res);
53
53
  console.log("res.body", res.body);
@@ -102,7 +102,7 @@ it('createUpperCaseEmail', function (done) {
102
102
  .post('/'+ savedProject._id + '/requests/')
103
103
  .auth("test-request-create-" + now + "@email.com", pwd)
104
104
  .set('content-type', 'application/json')
105
- .send({"text":"first_text"})
105
+ .send({"first_text":"first_text"})
106
106
  .end(function(err, res) {
107
107
  //console.log("res", res);
108
108
  console.log("res.body", res.body);
@@ -528,7 +528,7 @@ it('getallFilter-snap_department_routing', function (done) {
528
528
 
529
529
 
530
530
 
531
- // mocha test/requestRoute.js --grep 'getallSimple'
531
+ // mocha test/requestRoute.js --grep 'getallFilter-snap_department_default'
532
532
 
533
533
  it('getallFilter-snap_department_default', function (done) {
534
534
  // this.timeout(10000);
@@ -819,7 +819,7 @@ it('getallWithLoLead', function (done) {
819
819
  .post('/'+ savedProject._id + '/requests/')
820
820
  .auth(email, pwd)
821
821
  .set('content-type', 'application/json')
822
- .send({"text":"first_text"})
822
+ .send({"first_text":"first_text"})
823
823
  .end(function(err, res) {
824
824
  //console.log("res", res);
825
825
  console.log("res.body", res.body);
@@ -898,7 +898,7 @@ it('getallWithLoLead', function (done) {
898
898
  .post('/'+ savedProject._id + '/requests/')
899
899
  .auth(email, pwd)
900
900
  .set('content-type', 'application/json')
901
- .send({"text":"first_text"})
901
+ .send({"first_text":"first_text"})
902
902
  .end(function(err, res) {
903
903
  //console.log("res", res);
904
904
  console.log("res.body", res.body);
@@ -976,7 +976,7 @@ it('createAndAssign2', function (done) {
976
976
  .post('/'+ savedProject._id + '/requests/')
977
977
  .auth(email, pwd)
978
978
  .set('content-type', 'application/json')
979
- .send({"text":"first_text"})
979
+ .send({"first_text":"first_text"})
980
980
  .end(function(err, res) {
981
981
  //console.log("res", res);
982
982
  console.log("res.body", res.body);
@@ -633,7 +633,7 @@ describe('RequestService', function () {
633
633
  savedProject._id, messageSender),
634
634
  messageService.create(messageSender, "test sender", savedRequest.request_id, "hello2",
635
635
  savedProject._id, messageSender)]).then(function(all) {
636
- requestService.updateWaitingTimeByRequestId(savedRequest.request_id, savedProject._id).then(function(upRequest) {
636
+ requestService.updateWaitingTimeByRequestId(savedRequest.request_id, savedProject._id, true).then(function(upRequest) {
637
637
  var maxWaitingTime = Date.now() - upRequest.createdAt;
638
638
  console.log("resolve closedRequest", upRequest.toObject(),maxWaitingTime);
639
639
 
@@ -669,7 +669,52 @@ describe('RequestService', function () {
669
669
  // mocha test/requestService.js --grep 'closeRequest'
670
670
 
671
671
 
672
- it('closeRequest', function (done) {
672
+ it('closeRequest', function (done) {
673
+
674
+ var email = "test-request-create-" + Date.now() + "@email.com";
675
+ var pwd = "pwd";
676
+
677
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
678
+ var userid = savedUser.id;
679
+
680
+ projectService.createAndReturnProjectAndProjectUser("test1", userid).then(function(savedProjectAndPU) {
681
+ var savedProject = savedProjectAndPU.project;
682
+ var now = Date.now();
683
+ requestService.createWithIdAndRequester("request_id-closeRequest-"+now, savedProjectAndPU.project_user._id, null, savedProject._id, "first_text").then(function(savedRequest) {
684
+ Promise.all([
685
+ messageService.create("5badfe5d553d1844ad654072", "test sender", savedRequest.request_id, "hello1",
686
+ savedProject._id, "5badfe5d553d1844ad654072"),
687
+ messageService.create("5badfe5d553d1844ad654072", "test sender", savedRequest.request_id, "hello2",
688
+ savedProject._id, "5badfe5d553d1844ad654072")]).then(function(all) {
689
+ // closeRequestByRequestId(request_id, id_project, skipStatsUpdate, notify, closed_by)
690
+ requestService.closeRequestByRequestId(savedRequest.request_id, savedProject._id, false, true, "user1").then(function(closedRequest) {
691
+ winston.debug("resolve closedRequest", closedRequest.toObject());
692
+ expect(closedRequest.status).to.equal(1000);
693
+ expect(closedRequest.closed_at).to.not.equal(null);
694
+ expect(closedRequest.transcript).to.contains("hello1");
695
+ expect(closedRequest.transcript).to.contains("hello2");
696
+ expect(closedRequest.snapshot.agents).to.equal(undefined);
697
+ expect(closedRequest.closed_by).to.equal("user1");
698
+
699
+ done();
700
+ }).catch(function(err){
701
+ winston.error("test reject", err);
702
+ assert.isNotOk(err,'Promise error');
703
+ done();
704
+ });
705
+ });
706
+ });
707
+ });
708
+ });
709
+ });
710
+
711
+
712
+
713
+
714
+ // mocha test/requestService.js --grep 'closeRequestForce'
715
+
716
+
717
+ it('closeRequestForce', function (done) {
673
718
 
674
719
  var email = "test-request-create-" + Date.now() + "@email.com";
675
720
  var pwd = "pwd";
@@ -686,7 +731,7 @@ describe('RequestService', function () {
686
731
  savedProject._id, "5badfe5d553d1844ad654072"),
687
732
  messageService.create("5badfe5d553d1844ad654072", "test sender", savedRequest.request_id, "hello2",
688
733
  savedProject._id, "5badfe5d553d1844ad654072")]).then(function(all) {
689
- // closeRequestByRequestId(request_id, id_project, skipStatsUpdate, notify, closed_by)
734
+ // closeRequestByRequestId(request_id, id_project, skipStatsUpdate, notify, closed_by, force)
690
735
  requestService.closeRequestByRequestId(savedRequest.request_id, savedProject._id, false, true, "user1").then(function(closedRequest) {
691
736
  winston.debug("resolve closedRequest", closedRequest.toObject());
692
737
  expect(closedRequest.status).to.equal(1000);
@@ -696,7 +741,11 @@ describe('RequestService', function () {
696
741
  expect(closedRequest.snapshot.agents).to.equal(undefined);
697
742
  expect(closedRequest.closed_by).to.equal("user1");
698
743
 
699
- done();
744
+ requestService.closeRequestByRequestId(savedRequest.request_id, savedProject._id, false, true, "user1", true).then(function(closedRequest) {
745
+ expect(closedRequest.status).to.equal(1000);
746
+ done();
747
+ });
748
+
700
749
  }).catch(function(err){
701
750
  winston.error("test reject", err);
702
751
  assert.isNotOk(err,'Promise error');
@@ -710,6 +759,8 @@ describe('RequestService', function () {
710
759
 
711
760
 
712
761
 
762
+
763
+
713
764
  it('closeRequestAndSendTranscript', function (done) {
714
765
 
715
766
  var email = "test-request-create-" + Date.now() + "@email.com";
@@ -0,0 +1,90 @@
1
+
2
+ process.env.NODE_ENV = 'test';
3
+
4
+
5
+ //Require the dev-dependencies
6
+ let chai = require('chai');
7
+ let chaiHttp = require('chai-http');
8
+ let server = require('../app');
9
+ var projectService = require('../services/projectService');
10
+ var userService = require('../services/userService');
11
+ let should = chai.should();
12
+ var Project_user = require("../models/project_user");
13
+
14
+ var expect = chai.expect;
15
+ var assert = chai.assert;
16
+
17
+ //server client
18
+ var express = require('express');
19
+ const bodyParser = require('body-parser');
20
+
21
+ //end server client
22
+
23
+ chai.use(chaiHttp);
24
+
25
+ describe('Cache', () => {
26
+
27
+ if (process.env.CACHE_ENABLED == "true") {
28
+
29
+ }else {
30
+ console.log("Cache disabled");
31
+ expect(true).to.equal(false);
32
+ }
33
+ describe('/project', () => {
34
+
35
+
36
+ // mocha test-int/bot.js --grep 'createSimpleExatMatch'
37
+ it('getProject', (done) => {
38
+
39
+ var email = "test-bot-" + Date.now() + "@email.com";
40
+ var pwd = "pwd";
41
+
42
+
43
+
44
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
45
+ projectService.create("test-getProject", savedUser._id).then(function(savedProject) {
46
+
47
+ chai.request(server)
48
+ .get('/projects/'+ savedProject._id + '/')
49
+ .auth(email, pwd)
50
+ .set('content-type', 'application/json')
51
+ .send()
52
+ .end((err, res) => {
53
+ console.log("res.body", JSON.stringify(res.body));
54
+ // console.dir("res.body 1", res.body);
55
+ console.log("res.headers", res.headers);
56
+ res.should.have.status(200);
57
+ res.body.should.be.a('object');
58
+ expect(res.body.name).to.equal("test-getProject");
59
+ expect(res.body.status).to.equal(100);
60
+ expect(res.body.isActiveSubscription).to.equal(false);
61
+ expect(res.body.trialDaysLeft).to.equal(-30);
62
+ expect(res.body.trialExpired).to.equal(false);
63
+
64
+
65
+ chai.request(server)
66
+ .get('/projects/'+ savedProject._id + '/')
67
+ .auth(email, pwd)
68
+ .set('content-type', 'application/json') //from cache
69
+ .send()
70
+ .end((err, res) => {
71
+ console.log("res.body", JSON.stringify(res.body));
72
+ // console.dir("res.body 1", res.body);
73
+ console.log("res.headers", res.headers);
74
+ res.should.have.status(200);
75
+ res.body.should.be.a('object');
76
+ expect(res.body.name).to.equal("test-getProject");
77
+ expect(res.body.status).to.equal(100);
78
+ expect(res.body.isActiveSubscription).to.equal(false);
79
+ expect(res.body.trialDaysLeft).to.equal(-30);
80
+ expect(res.body.trialExpired).to.equal(false);
81
+ done()
82
+ });
83
+ });
84
+ });
85
+ });
86
+
87
+ });
88
+ });
89
+
90
+ });