@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
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
2
+ <html lang="en" xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
3
3
 
4
4
  <body>
5
5
  Hi {{user.name}}, this is a test email from Tiledesk
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
2
+ <html lang="en" xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
3
3
 
4
4
  <head>
5
5
  <meta name="viewport" content="width=device-width" />
@@ -64,27 +64,28 @@
64
64
 
65
65
  <body itemscope itemtype="http://schema.org/EmailMessage" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; line-height: 1.6em; background-color: #f6f6f6; margin: 0;" bgcolor="#f6f6f6">
66
66
 
67
- <table class="body-wrap" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; background-color: #f6f6f6; margin: 0;" bgcolor="#f6f6f6">
68
- <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
69
- <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;" valign="top"></td>
70
- <td class="container" width="600" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; display: block !important; max-width: 600px !important; clear: both !important; margin: 0 auto;" valign="top">
71
- <div class="content" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; max-width: 600px; display: block; margin: 0 auto; padding: 20px;">
67
+ {{#if baseScope.replyEnabled}}
68
+ <div>\# Please type your reply above this line \#</div>
69
+ {{/if}}
70
+
72
71
  <table class="main" width="100%" cellpadding="0" cellspacing="0" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; border-radius: 3px; background-color: #fff; margin: 0; border: 1px solid #e9e9e9;" bgcolor="#fff">
73
72
 
74
73
  <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
75
-
76
- <div style="text-align:center">
77
- <a href="http://www.tiledesk.com" style="color:#2daae1;font-weight:bold;text-decoration:none;word-break:break-word" target="_blank">
78
- <img src="https://tiledesk.com/tiledesk-logo-x1.png" style="width:50%;outline:none;text-decoration:none;border:none;min-height:36px" class="CToWUd">
79
- </a>
80
- </div>
74
+ <td class="alert alert-warning" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: top; font-weight: 500; text-align: center; border-radius: 3px 3px 0 0; margin: 0;" align="center" valign="top">
75
+
76
+ <div style="text-align:center">
77
+ <a href="http://www.tiledesk.com" style="color:#2daae1;font-weight:bold;text-decoration:none;word-break:break-word" target="_blank">
78
+ <img src="https://tiledesk.com/tiledesk-logo-x1.png" style="width:20%;outline:none;text-decoration:none;border:none;min-height:36px" class="CToWUd">
79
+ </a>
80
+ </div>
81
+ </td>
81
82
  </tr>
82
83
 
83
84
  <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
84
85
 
85
86
  <td class="alert alert-warning" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: top; font-weight: 500; text-align: center; border-radius: 3px 3px 0 0; margin: 0;" align="center" valign="top">
86
87
  <div>
87
- <h2>Ticket</h2>
88
+ <h2>Ticket number: #{{message.request.ticket_id}}</h2>
88
89
  </div>
89
90
 
90
91
  </td>
@@ -95,47 +96,77 @@
95
96
  <table width="100%" cellpadding="0" cellspacing="0" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
96
97
 
97
98
 
98
- <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
99
- <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
100
- Message: <strong style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">{{message.text}}</strong>
101
- </td>
102
- </tr>
99
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
100
+ <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
101
+ Sender: <strong style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">{{message.senderFullname}}</strong>
102
+ </td>
103
+ </tr>
103
104
 
105
+
104
106
 
105
-
107
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
108
+ <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
109
+ {{#ifEquals message.type "text"}}
110
+ <div style="white-space: pre-wrap;">{{{msgText}}}</div>
111
+ {{/ifEquals}}
112
+ {{#ifEquals message.type "image"}}
113
+ <img src="{{message.metadata.src}}"/>
114
+ {{#if msgText}}
115
+ <div style="white-space: pre-wrap;">{{{msgText}}}</div>
116
+ {{/if}}
117
+ {{/ifEquals}}
118
+ {{#ifEquals message.type "file"}}
119
+ <a href="{{message.metadata.src}}">{{message.metadata.name}}</a>
120
+ {{/ifEquals}}
121
+ {{#ifEquals message.type "frame"}}
122
+ <a href="{{message.metadata.src}}">{{message.metadata.name}}</a>
123
+ {{#if msgText}}
124
+ <div style="white-space: pre-wrap;">{{{msgText}}}</div>
125
+ {{/if}}
126
+ {{/ifEquals}}
127
+
128
+ {{#if message.attributes}}
129
+ {{#if message.attributes.attachment}}
130
+ {{#if message.attributes.attachment.buttons}}
131
+ {{#each message.attributes.attachment.buttons}}
132
+ {{#ifEquals this.type "url"}}
133
+ <li><a href="{{this.link}}" class="dynamic_button">{{this.value}}</a></li>
134
+ {{else}}
135
+ <li><a href="mailto:{{../message.request.request_id}}@{{../baseScope.inboundDomain}}?subject=Re:%20{{../message.request.subject}}&body={{this.value}}" class="dynamic_button">{{this.value}}</a></li>
136
+ {{/ifEquals}}
137
+ {{/each}}
138
+
139
+
140
+ {{/if}}
141
+ {{/if}}
142
+ {{/if}}
143
+
144
+ <!-- {{#if message.attributes.intent_info}}
145
+ {{#if message.attributes.intent_info.others}}
146
+ Others:
147
+ {{#each message.attributes.intent_info.others}}
148
+ <li><span>{{this.answer}}</span></li>
149
+ {{/each}}
150
+ {{/if}}
151
+ {{/if}} -->
106
152
 
107
- <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
108
- <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
109
- Project name : <strong style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">{{project.name}}</strong>
110
- </td>
111
- </tr>
112
-
113
- <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
114
- <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
115
- Agent name : <strong style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">{{message.senderFullname}}</strong>
116
- </td>
117
- </tr>
118
153
 
119
154
 
120
- <!-- <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
121
- <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
122
- Source page : <strong style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">{{message.request.sourcePage}}</strong>
123
- </td>
124
- </tr> -->
125
155
 
126
-
127
156
 
128
-
129
- <!--
130
- <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
131
- <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
157
+ </td>
158
+ </tr>
132
159
 
133
- Click <a href="{{message.request.sourcePage}}{{tokenQueryString}}">here</a> to continue the conversation.
134
- </td>
135
- </tr> -->
136
-
160
+
161
+
162
+
163
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
164
+ <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
165
+
166
+ Click <a href="{{seamlessPage}}{{tokenQueryString}}">here</a> to continue by chat the conversation.
167
+ </td>
168
+ </tr>
137
169
 
138
-
139
170
 
140
171
 
141
172
  <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
@@ -151,15 +182,10 @@
151
182
  <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
152
183
  <td class="aligncenter content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; vertical-align: top; color: #999; text-align: center; margin: 0; padding: 0 0 20px;" align="center" valign="top">
153
184
  <span><a href="http://www.tiledesk.com" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; color: #999; text-decoration: underline; margin: 0;" > Tiledesk.com </a></span>
154
- <br><span><a href="%unsubscribe_url%" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; color: #999; text-decoration: underline; margin: 0;">Unsubscribe</a></span>
185
+ <!-- <br><span><a href="%unsubscribe_url%" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; color: #999; text-decoration: underline; margin: 0;">Unsubscribe</a></span> -->
155
186
  </td>
156
187
  </tr>
157
188
  </table>
158
- </div>
159
- </div>
160
- </td>
161
- <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;" valign="top"></td>
162
- </tr>
163
- </table>
189
+
164
190
  </body>
165
191
  </html>
@@ -1,7 +1,11 @@
1
- ##- Please type your reply above this line -##
1
+ \# Please type your reply above this line \#
2
+
3
+ Ticket number: #{{message.request.ticket_id}}
2
4
 
3
5
  {{message.senderFullname}}
4
6
 
5
7
  {{message.text}}
6
8
 
9
+ Continue the conversation by chat here: {{seamlessPage}}{{tokenQueryString}}
10
+
7
11
  Powered by Tiledesk : https://tiledesk.com
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
2
+ <html lang="en" xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
3
3
 
4
4
  <head>
5
5
  <meta name="viewport" content="width=device-width" />
@@ -87,6 +87,78 @@ describe('Authentication', () => {
87
87
 
88
88
 
89
89
 
90
+
91
+
92
+ it('signinValidation', (done) => {
93
+
94
+
95
+ // this.timeout();
96
+
97
+ var email = "test-signinko-" + Date.now() + "@email.com";
98
+ var pwd = "pwd";
99
+
100
+
101
+ chai.request(server)
102
+ .post('/auth/signin' )
103
+ .send()
104
+ .end((err, res) => {
105
+ //console.log("res", res);
106
+ console.log("res.body", res.body);
107
+ res.should.have.status(422);
108
+
109
+
110
+ done();
111
+ });
112
+
113
+
114
+ });
115
+
116
+
117
+ // mocha test/authentication.js --grep 'signinLowercase'
118
+
119
+ it('signinLowercase', (done) => {
120
+
121
+
122
+ // this.timeout();
123
+
124
+ var email = "Test-SigninKO-" + Date.now() + "@email.com";
125
+ var pwd = "pwd";
126
+
127
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
128
+
129
+ chai.request(server)
130
+ .post('/auth/signin' )
131
+ .send({"email":email, "password":pwd})
132
+ .end((err, res) => {
133
+ console.log("res.body", res.body);
134
+ res.should.have.status(200);
135
+ res.body.should.be.a('object');
136
+ expect(res.body.success).to.equal(true);
137
+ expect(res.body.token).to.not.equal(null);
138
+ expect(res.body.user.email).to.equal(email.toLowerCase());
139
+ expect(res.body.user.password).to.equal(undefined);
140
+
141
+
142
+
143
+ chai.request(server)
144
+ .get('/users/' )
145
+ .auth(email, pwd)
146
+ .end((err, res) => {
147
+ console.log("res.body", res.body);
148
+ res.should.have.status(200);
149
+ res.body.should.be.a('object');
150
+
151
+ done();
152
+ });
153
+
154
+ });
155
+
156
+ });
157
+
158
+ });
159
+ });
160
+
161
+
90
162
  });
91
163
 
92
164
 
@@ -129,6 +201,8 @@ describe('/signup', () => {
129
201
 
130
202
  });
131
203
 
204
+ // mocha test/authentication.js --grep 'signupUpperCaseEmail'
205
+
132
206
 
133
207
  it('signupUpperCaseEmail', (done) => {
134
208
 
@@ -153,9 +227,7 @@ describe('/signup', () => {
153
227
 
154
228
  done();
155
229
  });
156
-
157
-
158
-
230
+
159
231
  });
160
232
 
161
233
 
@@ -184,7 +256,7 @@ describe('/signup', () => {
184
256
  });
185
257
 
186
258
 
187
- });
259
+ // });
188
260
 
189
261
 
190
262
 
@@ -379,6 +379,79 @@ it('signinJWt-userYESAudYesSubject', (done) => {
379
379
 
380
380
 
381
381
 
382
+
383
+
384
+
385
+
386
+ // // mocha test/authenticationJwt.js --grep 'signinJWt-Project-external-user-YESAudYesSubjectAndRole'
387
+
388
+ // it('signinJWt-Project-external-user-YESAudYesSubjectAndRole', (done) => {
389
+
390
+
391
+ // // this.timeout();
392
+
393
+ // var email = "test-signup-" + Date.now() + "@email.com";
394
+ // var pwd = "pwd";
395
+
396
+ // userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
397
+ // // create(name, createdBy, settings)
398
+ // projectService.create("test-signinJWt-user", savedUser._id).then(function(savedProject) {
399
+
400
+ // chai.request(server)
401
+ // .post('/'+ savedProject._id + '/keys/generate')
402
+ // .auth(email, pwd)
403
+ // .send()
404
+ // .end((err, res) => {
405
+ // //console.log("res", res);
406
+ // console.log("res.body", res.body);
407
+ // res.should.have.status(200);
408
+ // res.body.should.be.a('object');
409
+ // expect(res.body.jwtSecret).to.not.equal(null);
410
+
411
+
412
+ // var externalUserObj = {_id:"123",name:"andrea", surname:"leo",role : 'agent'};
413
+
414
+ // console.log("externalUserObj", externalUserObj);
415
+
416
+
417
+ // var signOptions = {
418
+ // subject: 'userexternal',
419
+ // audience: 'https://tiledesk.com/projects/'+savedProject._id ,
420
+ // };
421
+
422
+
423
+ // var jwtToken = jwt.sign(externalUserObj, res.body.jwtSecret,signOptions);
424
+
425
+
426
+
427
+ // console.log("jwtToken", jwtToken);
428
+
429
+ // chai.request(server)
430
+ // .get('/testauth/noentitycheck')
431
+ // .set('Authorization', 'JWT '+jwtToken)
432
+ // .send()
433
+ // .end((err, res) => {
434
+ // console.log("res.body", res.body);
435
+ // res.should.have.status(200);
436
+
437
+ // done();
438
+ // });
439
+
440
+
441
+
442
+
443
+ // });
444
+
445
+
446
+
447
+
448
+
449
+ // });
450
+
451
+
452
+ // });
453
+ // });
454
+
382
455
  it('signinJWt-bot-YESAudYesSubject', (done) => {
383
456
 
384
457
 
@@ -389,8 +462,9 @@ it('signinJWt-userYESAudYesSubject', (done) => {
389
462
 
390
463
  userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
391
464
  // create(name, createdBy, settings)
392
- projectService.create("test-signinJWt-user", savedUser._id).then(function(savedProject) {
393
- faqService.create("testbot", null, savedProject._id, savedUser._id, true).then(function(savedBot) {
465
+ projectService.create("test-signinJWt-user", savedUser._id).then(function(savedProject) {
466
+ // create(name, url, projectid, user_id, type, description, webhook_url, webhook_enabled, language) {
467
+ faqService.create("testbot", null, savedProject._id, savedUser._id).then(function(savedBot) {
394
468
  var savedBotObj = savedBot.toObject();
395
469
  console.log("savedBotObj", savedBotObj);
396
470
 
@@ -0,0 +1,226 @@
1
+ //During the test the env variable is set to test
2
+ process.env.NODE_ENV = 'test';
3
+
4
+ var User = require('../models/user');
5
+ var projectService = require('../services/projectService');
6
+ var Group = require('../models/group');
7
+ var userService = require('../services/userService');
8
+
9
+ //Require the dev-dependencies
10
+ let chai = require('chai');
11
+ let chaiHttp = require('chai-http');
12
+ let server = require('../app');
13
+ let should = chai.should();
14
+ var winston = require('../config/winston');
15
+ var jwt = require('jsonwebtoken');
16
+ // chai.config.includeStack = true;
17
+
18
+ var expect = chai.expect;
19
+ var assert = chai.assert;
20
+
21
+ chai.use(chaiHttp);
22
+
23
+ describe('CampaignsRoute', () => {
24
+
25
+
26
+ // mocha test/campaignsRoute.js --grep 'directSimpleNoOut'
27
+
28
+ it('directSimpleNoOut', function (done) {
29
+
30
+ var email = "test-message-create-" + Date.now() + "@email.com";
31
+ var pwd = "pwd";
32
+
33
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
34
+ projectService.createAndReturnProjectAndProjectUser("directSimple", savedUser._id).then(function (savedProjectAndPU) {
35
+
36
+ var savedProject = savedProjectAndPU.project;
37
+ var recipient = "5f8972c82db41c003473cb03";
38
+
39
+ chai.request(server)
40
+ .post('/' + savedProject._id + '/campaigns/direct')
41
+ .auth(email, pwd)
42
+ .set('content-type', 'application/json')
43
+ .send({ "text": "ciao", "recipient": recipient })
44
+ .end(function (err, res) {
45
+ //console.log("res", res);
46
+ console.log("res.body", res.body);
47
+ res.should.have.status(200);
48
+ res.body.should.be.a('object');
49
+
50
+
51
+
52
+ expect(res.body.success).to.equal(true);
53
+
54
+
55
+ done();
56
+ });
57
+ });
58
+ });
59
+ });
60
+
61
+
62
+
63
+
64
+
65
+
66
+ // mocha test/campaignsRoute.js --grep 'directSimple'
67
+
68
+ it('directSimple', function (done) {
69
+
70
+ var email = "test-message-create-" + Date.now() + "@email.com";
71
+ var pwd = "pwd";
72
+
73
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
74
+ projectService.createAndReturnProjectAndProjectUser("directSimple", savedUser._id).then(function (savedProjectAndPU) {
75
+
76
+ var savedProject = savedProjectAndPU.project;
77
+ var recipient = "5f8972c82db41c003473cb03";
78
+
79
+ chai.request(server)
80
+ .post('/' + savedProject._id + '/campaigns/direct')
81
+ .auth(email, pwd)
82
+ .set('content-type', 'application/json')
83
+ .send({ "text": "ciao", "recipient": recipient, returnobject: true })
84
+ .end(function (err, res) {
85
+ //console.log("res", res);
86
+ console.log("res.body", res.body);
87
+ res.should.have.status(200);
88
+ res.body.should.be.a('object');
89
+
90
+ expect(res.body.channel_type).to.equal("direct");
91
+ expect(res.body.senderFullname).to.equal("Test Firstname Test lastname");
92
+ expect(res.body.sender).to.equal(savedUser._id.toString());
93
+ expect(res.body.recipient).to.equal(recipient);
94
+
95
+
96
+ // expect(res.body.success).to.equal(true);
97
+
98
+
99
+ done();
100
+ });
101
+ });
102
+ });
103
+ });
104
+
105
+
106
+
107
+
108
+ // mocha test/campaignsRoute.js --grep 'directGroupIdNoOut'
109
+
110
+ it('directGroupIdNoOut', function (done) {
111
+
112
+ var email = "test-message-create-" + Date.now() + "@email.com";
113
+ var pwd = "pwd";
114
+
115
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
116
+ projectService.createAndReturnProjectAndProjectUser("directSimple", savedUser._id).then(function (savedProjectAndPU) {
117
+
118
+ var savedProject = savedProjectAndPU.project;
119
+
120
+ var userid = savedUser._id;
121
+
122
+ var email2 = "test-message-create-" + Date.now() + "@email.com";
123
+ userService.signup(email2, pwd, "Test Firstname", "Test lastname").then(function (savedUser2) {
124
+
125
+ var newGroup = new Group({
126
+ name: "group1",
127
+ // members: ["userid1", "userid2"],
128
+ members: [userid, savedUser2._id.toString()],
129
+ trashed: false,
130
+ id_project: savedProject._id,
131
+ createdBy: userid,
132
+ updatedBy: userid
133
+ });
134
+ newGroup.save(function (err, savedGroup) {
135
+ console.log("savedGroup", savedGroup)
136
+
137
+
138
+ chai.request(server)
139
+ .post('/' + savedProject._id + '/campaigns/direct')
140
+ .auth(email, pwd)
141
+ .set('content-type', 'application/json')
142
+ .send({ "text": "ciao", "group_id": savedGroup._id.toString() })
143
+ .end(function (err, res) {
144
+ //console.log("res", res);
145
+ console.log("res.body", res.body);
146
+ res.should.have.status(200);
147
+ res.body.should.be.a('object');
148
+
149
+
150
+ expect(res.body.success).to.equal(true);
151
+
152
+
153
+ done();
154
+ });
155
+ });
156
+ });
157
+ });
158
+ });
159
+ });
160
+
161
+
162
+
163
+
164
+ // mocha test/campaignsRoute.js --grep 'directGroupId2'
165
+
166
+ it('directGroupId2', function (done) {
167
+
168
+ var email = "test-message-create-" + Date.now() + "@email.com";
169
+ var pwd = "pwd";
170
+
171
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
172
+ projectService.createAndReturnProjectAndProjectUser("directSimple", savedUser._id).then(function (savedProjectAndPU) {
173
+
174
+ var savedProject = savedProjectAndPU.project;
175
+
176
+ var userid = savedUser._id;
177
+
178
+ var email2 = "test-message-create-" + Date.now() + "@email.com";
179
+ userService.signup(email2, pwd, "Test Firstname", "Test lastname").then(function (savedUser2) {
180
+
181
+ var newGroup = new Group({
182
+ name: "group1",
183
+ // members: ["userid1", "userid2"],
184
+ members: [userid, savedUser2._id.toString()],
185
+ trashed: false,
186
+ id_project: savedProject._id,
187
+ createdBy: userid,
188
+ updatedBy: userid
189
+ });
190
+ newGroup.save(function (err, savedGroup) {
191
+ console.log("savedGroup", savedGroup)
192
+
193
+
194
+ chai.request(server)
195
+ .post('/' + savedProject._id + '/campaigns/direct')
196
+ .auth(email, pwd)
197
+ .set('content-type', 'application/json')
198
+ .send({ "text": "ciao", "group_id": savedGroup._id.toString(), returnobject: true })
199
+ .end(function (err, res) {
200
+ //console.log("res", res);
201
+ console.log("res.body", res.body);
202
+ res.should.have.status(200);
203
+ res.body.should.be.a('array');
204
+
205
+ expect(res.body.length).to.equal(2);
206
+ expect(res.body[0].recipient).to.equal(userid.toString());
207
+ expect(res.body[1].recipient).to.equal(savedUser2._id.toString());
208
+ // expect(res.body.success).to.equal(true);
209
+
210
+
211
+ done();
212
+ });
213
+ });
214
+ });
215
+ });
216
+ });
217
+ });
218
+
219
+
220
+
221
+
222
+
223
+
224
+ });
225
+
226
+
@@ -28,7 +28,7 @@ describe('FaqService()', function () {
28
28
 
29
29
  userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
30
30
  projectService.create("test-FaqService", savedUser._id).then(function(savedProject) {
31
- faqService.create("testbot", null, savedProject._id, savedUser._id, true).then(function(savedBot) {
31
+ faqService.create("testbot", null, savedProject._id, savedUser._id).then(function(savedBot) {
32
32
 
33
33
  var newFaq = new Faq({
34
34
  id_faq_kb: savedBot._id,
@@ -94,7 +94,7 @@ it('create-with-intent_display_name-and-search', (done) => {
94
94
 
95
95
  userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
96
96
  projectService.create("test-FaqService", savedUser._id).then(function(savedProject) {
97
- faqService.create("testbot", null, savedProject._id, savedUser._id, true).then(function(savedBot) {
97
+ faqService.create("testbot", null, savedProject._id, savedUser._id).then(function(savedBot) {
98
98
 
99
99
  var newFaq = new Faq({
100
100
  id_faq_kb: savedBot._id,
@@ -162,7 +162,7 @@ it('create-with-duplicated-intent_display_name-and-search', (done) => {
162
162
 
163
163
  userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
164
164
  projectService.create("test-FaqService", savedUser._id).then(function(savedProject) {
165
- faqService.create("testbot", null, savedProject._id, savedUser._id, true).then(function(savedBot) {
165
+ faqService.create("testbot", null, savedProject._id, savedUser._id).then(function(savedBot) {
166
166
 
167
167
  var newFaq0 = new Faq({
168
168
  id_faq_kb: savedBot._id,