@tiledesk/tiledesk-server 2.17.4 → 2.18.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +8 -3
  2. package/app.js +4 -0
  3. package/channels/chat21/chat21WebHook.js +6 -1
  4. package/docs/routes-answered.md +153 -0
  5. package/event/authEvent.js +16 -0
  6. package/event/projectUserEvent.js +39 -0
  7. package/event/roleEvent.js +9 -0
  8. package/middleware/has-role.js +160 -121
  9. package/middleware/passport.js +180 -179
  10. package/migrations/1757601159298-project_user_role_type.js +104 -0
  11. package/models/department.js +3 -0
  12. package/models/groupMemberSchama.js +19 -0
  13. package/models/kb_setting.js +74 -4
  14. package/models/permissionConstants.js +19 -0
  15. package/models/project_user.js +86 -8
  16. package/models/request.js +1 -0
  17. package/models/role.js +31 -0
  18. package/models/roleConstants.js +2 -0
  19. package/package.json +1 -1
  20. package/pubmodules/analytics/analytics.js +2 -2
  21. package/pubmodules/cache/mongoose-cachegoose-fn.js +37 -0
  22. package/pubmodules/canned/cannedResponseRoute.js +34 -6
  23. package/pubmodules/routing-queue/listener.js +7 -1
  24. package/pubmodules/trigger/rulesTrigger.js +1 -6
  25. package/routes/answered.js +227 -0
  26. package/routes/auth.js +3 -1
  27. package/routes/department.js +7 -1
  28. package/routes/message.js +4 -1
  29. package/routes/project.js +41 -3
  30. package/routes/project_user.js +62 -11
  31. package/routes/request.js +32 -30
  32. package/routes/roles.js +151 -0
  33. package/routes/unanswered.js +32 -19
  34. package/routes/widget.js +3 -1
  35. package/services/cacheEnabler.js +5 -8
  36. package/services/departmentService.js +39 -11
  37. package/services/emailService.js +2 -2
  38. package/services/pendingInvitationService.js +2 -0
  39. package/services/projectService.js +3 -1
  40. package/services/projectUserService.js +67 -4
  41. package/services/subscriptionNotifierQueued.js +8 -0
  42. package/services/updateRequestSnapshotQueued.js +0 -3
  43. package/test/departmentService.js +5 -0
  44. package/test/messageRoute.js +7 -4
  45. package/test/projectUserRoute.js +116 -0
  46. package/test/requestService.js +7 -3
  47. package/test-int/bot.js +3 -2
  48. package/websocket/webSocketServer.js +273 -225
  49. package/routes/auth_newjwt.js +0 -648
@@ -272,9 +272,25 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
272
272
  // console.log('OPERATORS - »»»» BOT IS DEFINED - !!! DEPT HAS NOT GROUP ID')
273
273
  // console.log('OPERATORS - »»»» BOT IS DEFINED -> ID BOT', department.id_bot);
274
274
  // console.log('OPERATORS - »»»» nobot ', nobot)
275
- var role = [RoleConstants.OWNER, RoleConstants.ADMIN,RoleConstants.SUPERVISOR, RoleConstants.AGENT];
276
- // attento indice
277
- return Project_user.find({ id_project: projectid, role: { $in : role }, status: "active" }).exec(function (err, project_users) {
275
+ winston.debug("main_flow_cache_2 departmentService project users");
276
+
277
+
278
+ // rolequery
279
+ // var role = [RoleConstants.OWNER, RoleConstants.ADMIN, RoleConstants.SUPERVISOR, RoleConstants.AGENT];
280
+ // var qpu = Project_user.find({ id_project: projectid, role: { $in : role }, status: "active" });
281
+ var qpu = Project_user.find({ id_project: projectid, roleType: RoleConstants.TYPE_AGENTS, status: "active" });
282
+
283
+
284
+ // use this. $in doesn't use index very well
285
+ // var qpu = Project_user.findOne({ id_project: projectid, $or: [{ "role": RoleConstants.AGENT }, { "role": RoleConstants.SUPERVISOR }, { "role": RoleConstants.ADMIN }, { "role": RoleConstants.OWNER }], status: "active" })
286
+
287
+ if (cacheEnabler.project_user) {
288
+ qpu.cache(cacheUtil.queryTTL, projectid+":project_users:query:teammates:available") //request_cache
289
+ winston.debug('project_user cache enabled');
290
+ }
291
+
292
+
293
+ return qpu.exec(function (err, project_users) {
278
294
  if (err) {
279
295
  winston.error('-- > 2 DEPT FIND BY ID ERR ', err)
280
296
  return reject(err);
@@ -369,12 +385,12 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
369
385
  // console.log('D-2 GROUP -> [ FIND PROJECT USERS: ALL and AVAILABLE (with OH) ] -> MEMBERS LENGHT: ', group[0].members.length);
370
386
  // console.log('D-2 GROUP -> [ FIND PROJECT USERS: ALL and AVAILABLE (with OH) ] -> MEMBERS ID: ', group[0].members);
371
387
 
372
- // , user_available: true
373
- //Project_user.findAllProjectUsersByProjectIdWhoBelongsToMembersOfGroup(id_prject, group[0]);
374
- // riprodurre su v2
375
- return Project_user.find({ id_project: projectid, id_user: { $in : group[0].members}, role: { $in : [RoleConstants.OWNER, RoleConstants.ADMIN, RoleConstants.SUPERVISOR, RoleConstants.AGENT]}, status: "active" }).exec(function (err, project_users) {
376
- // uni error round robin
377
- //return Project_user.find({ id_project: projectid, id_user: group[0].members, role: { $in : [RoleConstants.OWNER, RoleConstants.ADMIN, RoleConstants.AGENT]} }).exec(function (err, project_users) {
388
+
389
+
390
+ // rolequery
391
+
392
+ return Project_user.find({ id_project: projectid, id_user: { $in : group[0].members}, roleType: RoleConstants.TYPE_AGENTS, status: "active" }).exec(function (err, project_users) {
393
+ // return Project_user.find({ id_project: projectid, id_user: { $in : group[0].members}, role: { $in : [RoleConstants.OWNER, RoleConstants.ADMIN, RoleConstants.SUPERVISOR, RoleConstants.AGENT]}, status: "active" }).exec(function (err, project_users) {
378
394
 
379
395
  // console.log('D-2 GROUP -> [ FIND PROJECT USERS: ALL and AVAILABLE (with OH) ] -> PROJECT ID ', projectid);
380
396
  if (err) {
@@ -436,8 +452,20 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
436
452
 
437
453
  return new Promise(function (resolve, reject) {
438
454
 
439
- var role = [RoleConstants.OWNER, RoleConstants.ADMIN, RoleConstants.SUPERVISOR, RoleConstants.AGENT];
440
- return Project_user.find({ id_project: projectid , role: { $in : role }, status: "active" }).exec(function (err, project_users) {
455
+ // var role = [RoleConstants.OWNER, RoleConstants.ADMIN, RoleConstants.SUPERVISOR, RoleConstants.AGENT];
456
+ // rolequery
457
+ var qpu = Project_user.find({ id_project: projectid, roleType: RoleConstants.TYPE_AGENTS, status: "active" });
458
+ // var qpu = Project_user.find({ id_project: projectid, role: { $in : role }, status: "active" });
459
+
460
+ // use this. $in doesn't use index very well
461
+ if (cacheEnabler.project_user) {
462
+ qpu.cache(cacheUtil.queryTTL, projectid+":project_users:query:teammates:available") //request_cache
463
+ winston.debug('project_user cache enabled');
464
+ }
465
+ // return Project_user.find({ id_project: projectid , role: { $in : role }, status: "active" }).exec(function (err, project_users) {
466
+ return qpu.exec(function (err, project_users) {
467
+
468
+
441
469
  if (err) {
442
470
  winston.error('D-3 NO GROUP -> [ FIND PROJECT USERS: ALL and AVAILABLE (with OH) ] -> ERR ', err)
443
471
  return reject(err);
@@ -282,7 +282,6 @@ class EmailService {
282
282
  // }
283
283
 
284
284
  async send(mail, quoteEnabled, project, quoteManager) {
285
-
286
285
  if (!this.enabled) {
287
286
  winston.info('EmailService is disabled. Not sending email');
288
287
  return 0;
@@ -339,7 +338,8 @@ class EmailService {
339
338
  if (mail.callback) {
340
339
  mail.callback(error, { info: info });
341
340
  }
342
- return winston.error("Error sending email ", { error: error, mailConfig: mail.config, mailOptions: mailOptions });
341
+ //return winston.error("Error sending email ", { error: error, mailConfig: mail.config, mailOptions: mailOptions });
342
+ return winston.error("Error sending email ", { error: error, mailConfig: mail.config });
343
343
  }
344
344
  winston.verbose('Email sent:', { info: info });
345
345
  winston.debug('Email sent:', { info: info, mailOptions: mailOptions });
@@ -4,6 +4,7 @@ var emailService = require("../services/emailService");
4
4
  var Project_user = require("../models/project_user");
5
5
  var mongoose = require('mongoose');
6
6
  var winston = require('../config/winston');
7
+ var RoleConstants = require("../models/roleConstants");
7
8
 
8
9
  class Pending_Invitation {
9
10
 
@@ -91,6 +92,7 @@ class Pending_Invitation {
91
92
  id_project: invite.id_project,
92
93
  id_user: newUserId,
93
94
  role: invite.role,
95
+ roleType : RoleConstants.TYPE_AGENTS,
94
96
  user_available: true,
95
97
  createdBy: invite.createdBy,
96
98
  updatedBy: invite.createdBy
@@ -8,6 +8,7 @@ var projectEvent = require("../event/projectEvent");
8
8
  var winston = require('../config/winston');
9
9
  const cacheEnabler = require("./cacheEnabler");
10
10
  const cacheUtil = require("../utils/cacheUtil");
11
+ var RoleConstants = require("../models/roleConstants");
11
12
 
12
13
  class ProjectService {
13
14
 
@@ -33,7 +34,8 @@ class ProjectService {
33
34
  var newProject_user = new Project_user({
34
35
  id_project: savedProject._id,
35
36
  id_user: createdBy,
36
- role: 'owner',
37
+ role: RoleConstants.OWNER,
38
+ roleType : RoleConstants.TYPE_AGENTS,
37
39
  user_available: true,
38
40
  createdBy: createdBy,
39
41
  updatedBy: createdBy
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var Project = require("../models/project");
4
3
  var Project_user = require("../models/project_user");
5
- var mongoose = require('mongoose');
6
- var User = require('../models/user');
7
4
  var winston = require('../config/winston');
8
- var pendinginvitation = require("../services/pendingInvitationService");
5
+
6
+ var Role = require('../models/role');
7
+ var cacheUtil = require('../utils/cacheUtil');
8
+ var cacheEnabler = require("../services/cacheEnabler");
9
9
 
10
10
  class ProjectUserService {
11
11
 
@@ -42,6 +42,69 @@ class ProjectUserService {
42
42
 
43
43
  }
44
44
 
45
+ async getWithPermissions(id_user, id_project, user_sub) {
46
+ var project_user = await this.get(id_user, id_project, user_sub);
47
+ winston.debug("getWithPermissions for id_user " + id_user + " project_user ", project_user);
48
+
49
+ if (project_user) {
50
+ winston.debug("getWithPermissions project_user role: " + project_user.role);
51
+
52
+ var role = await this.getPermissions(project_user.role, id_project);
53
+
54
+ if (role) {
55
+ project_user._doc.rolePermissions = role.permissions; //https://github.com/Automattic/mongoose/issues/4614
56
+ // project_user.set("rolePermissions", role);
57
+ }
58
+
59
+
60
+ }
61
+
62
+ return project_user;
63
+ }
64
+
65
+ async getPermissions(role, id_project) {
66
+ // var cacheManager = require('../utils/cacheManager');
67
+ // cacheManager.getClient().get("find in cache")
68
+ let q = Role.findOne({"name":role, "id_project": id_project});
69
+
70
+ let cache_key = id_project+":roles:"+role;
71
+
72
+ if (cacheEnabler.role) {
73
+ q.cache(cacheUtil.defaultTTL, cache_key);
74
+ winston.debug("cacheEnabler.role enabled");
75
+ }
76
+
77
+ var role = await q.exec();
78
+
79
+ if (role)
80
+ winston.debug("getWithPermissions role ", role.toJSON());
81
+
82
+ return role;
83
+
84
+ }
85
+
86
+ async get(id_user, id_project, user_sub) {
87
+ // JWT_HERE
88
+ var query = { id_project: id_project, id_user: id_user, status: "active"};
89
+ let cache_key = id_project+":project_users:iduser:"+id_user;
90
+
91
+ if (user_sub && (user_sub=="userexternal" || user_sub=="guest")) {
92
+ query = { id_project: id_project, uuid_user: id_user, status: "active"};
93
+ cache_key = id_project+":project_users:uuid_user:"+id_user;
94
+ }
95
+ winston.debug("hasRoleOrType query " + JSON.stringify(query));
96
+
97
+ let q = Project_user.findOne(query);
98
+ if (cacheEnabler.project_user) {
99
+ q.cache(cacheUtil.defaultTTL, cache_key);
100
+ winston.debug("cacheEnabler.project_user enabled");
101
+ }
102
+ var project_user = await q.exec();
103
+ winston.debug("ProjectUserUtil project_user", project_user);
104
+
105
+ return project_user;
106
+ }
107
+
45
108
  }
46
109
  var projectUserService = new ProjectUserService();
47
110
 
@@ -111,6 +111,14 @@ class SubscriptionNotifierQueued {
111
111
  winston.debug('SubscriptionNotifier project_user.update sent');
112
112
  });
113
113
  });
114
+
115
+
116
+ authEvent.on("project_user.update.agent", function(event) {
117
+ setImmediate(() => {
118
+ subscriptionNotifier.subscribe('project_user.update.agent', event.updatedProject_userPopulated);
119
+ winston.debug('SubscriptionNotifier project_user.update.agent sent');
120
+ });
121
+ });
114
122
 
115
123
  winston.info('SubscriptionNotifierQueued started');
116
124
  }
@@ -25,12 +25,10 @@ class UpdateRequestSnapshotQueued {
25
25
  requestEvent.on(snapshotUpdateKey, function (data) {
26
26
  setImmediate(() => {
27
27
  winston.debug("updateRequestSnapshot on request.snapshot.update ", data);
28
- console.log("updateRequestSnapshot on request.snapshot.update ", data);
29
28
 
30
29
  const request = data.request;
31
30
  const snapshot = data.snapshot;
32
31
  const agentsArray = snapshot?.agents || [];
33
- console.log("(queue) updateRequestSnapshot snapshot agents length: ", agentsArray.length);
34
32
 
35
33
  if (!request || !request.request_id || !request.id_project) {
36
34
  winston.error("updateRequestSnapshot: Invalid request data", data);
@@ -57,7 +55,6 @@ class UpdateRequestSnapshotQueued {
57
55
  return;
58
56
  }
59
57
  if (updatedRequest) {
60
- console.log("updateRequestSnapshot updated snapshot.agents for request " + updatedRequest.request_id, new Date());
61
58
  winston.debug("updateRequestSnapshot updated snapshot.agents for request " + updatedRequest.request_id);
62
59
  } else {
63
60
  winston.warn("updateRequestSnapshot: Request not found for " + request.request_id);
@@ -48,6 +48,7 @@ describe('DepartmentService()', function () {
48
48
  id_project: savedProject._id,
49
49
  id_user: savedUser2._id,
50
50
  role: roleConstants.AGENT,
51
+ roleType : RoleConstants.TYPE_AGENTS,
51
52
  user_available: true,
52
53
  createdBy: savedUser2._id,
53
54
  updatedBy: savedUser2._id,
@@ -62,6 +63,7 @@ describe('DepartmentService()', function () {
62
63
  id_project: savedProject._id,
63
64
  id_user: savedUser3._id,
64
65
  role: roleConstants.AGENT,
66
+ roleType : RoleConstants.TYPE_AGENTS,
65
67
  user_available: true,
66
68
  createdBy: savedUser3._id,
67
69
  updatedBy: savedUser3._id,
@@ -126,6 +128,7 @@ describe('DepartmentService()', function () {
126
128
  id_project: savedProject._id,
127
129
  id_user: savedUser2._id,
128
130
  role: roleConstants.AGENT,
131
+ roleType : RoleConstants.TYPE_AGENTS,
129
132
  user_available: true,
130
133
  createdBy: savedUser2._id,
131
134
  updatedBy: savedUser2._id,
@@ -247,6 +250,7 @@ describe('DepartmentService()', function () {
247
250
  id_project: savedProject._id,
248
251
  id_user: savedUser2._id,
249
252
  role: roleConstants.AGENT,
253
+ roleType : RoleConstants.TYPE_AGENTS,
250
254
  user_available: false,
251
255
  createdBy: savedUser2._id,
252
256
  updatedBy: savedUser2._id,
@@ -325,6 +329,7 @@ describe('DepartmentService()', function () {
325
329
  id_project: savedProject._id,
326
330
  id_user: savedUser2._id,
327
331
  role: roleConstants.AGENT,
332
+ roleType : RoleConstants.TYPE_AGENTS,
328
333
  user_available: false,
329
334
  createdBy: savedUser2._id,
330
335
  updatedBy: savedUser2._id,
@@ -9,7 +9,7 @@ var userService = require('../services/userService');
9
9
  var leadService = require('../services/leadService');
10
10
  var messageService = require('../services/messageService');
11
11
  var Project_user = require("../models/project_user");
12
- var roleConstants = require('../models/roleConstants');
12
+ var RoleConstants = require('../models/roleConstants');
13
13
  const uuidv4 = require('uuid/v4');
14
14
 
15
15
  //Require the dev-dependencies
@@ -223,7 +223,8 @@ describe('MessageRoute', () => {
223
223
  // _id: new mongoose.Types.ObjectId(),
224
224
  id_project: savedProject._id,
225
225
  id_user: savedUser2._id,
226
- role: roleConstants.AGENT,
226
+ role: RoleConstants.AGENT,
227
+ roleType : RoleConstants.TYPE_AGENTS,
227
228
  user_available: true,
228
229
  createdBy: savedUser2._id,
229
230
  updatedBy: savedUser2._id,
@@ -298,7 +299,8 @@ describe('MessageRoute', () => {
298
299
  // _id: new mongoose.Types.ObjectId(),
299
300
  id_project: savedProject._id,
300
301
  uuid_user: uid,
301
- role: roleConstants.USER,
302
+ role: RoleConstants.USER,
303
+ roleType : RoleConstants.TYPE_USERS,
302
304
  user_available: true,
303
305
  createdBy: savedUser._id,
304
306
  updatedBy: savedUser._id,
@@ -875,7 +877,8 @@ describe('MessageRoute', () => {
875
877
  // _id: new mongoose.Types.ObjectId(),
876
878
  id_project: savedProject._id,
877
879
  id_user: savedUser2._id,
878
- role: roleConstants.USER,
880
+ role: RoleConstants.USER,
881
+ roleType : RoleConstants.TYPE_USERS,
879
882
  user_available: true,
880
883
  createdBy: savedUser2._id,
881
884
  updatedBy: savedUser2._id,
@@ -0,0 +1,116 @@
1
+ //During the test the env variable is set to test
2
+ process.env.NODE_ENV = 'test';
3
+ process.env.LOG_LEVEL = 'error';
4
+ process.env.ADMIN_EMAIL = "admin@tiledesk.com";
5
+
6
+ let log = false;
7
+ var projectService = require('../services/projectService');
8
+ var userService = require('../services/userService');
9
+
10
+ //Require the dev-dependencies
11
+ let chai = require('chai');
12
+ let chaiHttp = require('chai-http');
13
+ let server = require('../app');
14
+ let should = chai.should();
15
+ var fs = require('fs');
16
+ const path = require('path');
17
+
18
+ // chai.config.includeStack = true;
19
+
20
+ var expect = chai.expect;
21
+ var assert = chai.assert;
22
+
23
+ chai.use(chaiHttp);
24
+
25
+ describe('ProjectUserRoute', () => {
26
+
27
+ describe('Delete', () => {
28
+
29
+ it('delete-project-user-and-remove-from-group', (done) => {
30
+
31
+ let email_owner = "owner-signup-" + Date.now() + "@email.com";
32
+ let email_agent = "agent-signup-" + Date.now() + "@email.com";
33
+ var pwd = "pwd";
34
+
35
+ userService.signup(email_owner, pwd, "Owner Firstname", "Owner Lastname").then((owner) => {
36
+ userService.signup(email_agent, pwd, "Agent Firstname", "Agent Lastname").then((agent) => {
37
+ projectService.create("test-project", owner._id).then((project) => {
38
+
39
+ // Invite agent on the project
40
+ chai.request(server)
41
+ .post('/' + project._id + "/project_users/invite")
42
+ .auth(email_owner, pwd)
43
+ .set('content-type', 'application/json')
44
+ .send({ email: email_agent, role: "agent", userAvailable: false })
45
+ .end((err, res) => {
46
+
47
+ if (err) { console.error("err: ", err); }
48
+ if (log) { console.log("Invite agent to project res.body: ", res.body) };
49
+
50
+ res.should.have.status(200);
51
+ res.body.should.be.a('object');
52
+ expect(res.body.id_user).to.equal(agent._id.toString());
53
+
54
+ let pu_id = res.body._id;
55
+
56
+ // Create group
57
+ chai.request(server)
58
+ .post('/' + project._id + "/groups")
59
+ .auth(email_owner, pwd)
60
+ .set('content-type', 'application/json')
61
+ .send({ name: "test-group", members: [owner._id, agent._id] })
62
+ .end((err, res) => {
63
+
64
+ if (err) { console.error("err: ", err); }
65
+ if (log) { console.log("Create group res.body: ", res.body) };
66
+
67
+ res.should.have.status(200);
68
+ res.body.should.be.a('object');
69
+ expect(res.body.name).to.equal("test-group");
70
+ expect(res.body.members.length).to.equal(2);
71
+ expect(res.body.members[0]).to.equal(owner._id.toString())
72
+ expect(res.body.members[1]).to.equal(agent._id.toString())
73
+
74
+ let group_id = res.body._id;
75
+
76
+ // Remove project user from project
77
+ chai.request(server)
78
+ .delete('/' + project._id + '/project_users/' + pu_id + '?soft=true')
79
+ .auth(email_owner, pwd)
80
+ .set('content-type', 'application/json')
81
+ .end((err, res) => {
82
+
83
+ if (err) { console.error("err: ", err); }
84
+ if (log) { console.log("Delete project user res.body: ", res.body) };
85
+
86
+ res.should.have.status(200);
87
+ res.body.should.be.a('object');
88
+
89
+ // Check group
90
+ chai.request(server)
91
+ .get('/' + project._id + '/groups/' + group_id)
92
+ .auth(email_owner, pwd)
93
+ .set('content-type', 'application/json')
94
+ .end((err, res) => {
95
+ if (err) { console.error("err: ", err); }
96
+ if (log) { console.log("Check group res.body: ", res.body) };
97
+
98
+ res.should.have.status(200);
99
+ res.body.should.be.a('object');
100
+ expect(res.body.members.length).to.equal(1);
101
+ expect(res.body.members[0]).to.equal(owner._id.toString())
102
+
103
+ done()
104
+ })
105
+
106
+ })
107
+ })
108
+ })
109
+ })
110
+ })
111
+ })
112
+ }).timeout(5000);
113
+
114
+ })
115
+
116
+ });
@@ -10,6 +10,7 @@ let should = chai.should();
10
10
  var config = require('../config/database');
11
11
  var mongoose = require('mongoose');
12
12
  var winston = require('../config/winston');
13
+ var RoleConstants = require('../models/roleConstants');
13
14
 
14
15
  let log = false;
15
16
 
@@ -991,7 +992,8 @@ describe('RequestService', function () {
991
992
  // _id: new mongoose.Types.ObjectId(),
992
993
  id_project: savedProject._id.toString(),
993
994
  id_user: savedUser2._id.toString(),
994
- role: "agent",
995
+ role: RoleConstants.AGENT,
996
+ roleType : RoleConstants.TYPE_AGENTS,
995
997
  user_available: false,
996
998
  createdBy: userid,
997
999
  updatedBy: userid
@@ -1073,7 +1075,8 @@ describe('RequestService', function () {
1073
1075
  // _id: new mongoose.Types.ObjectId(),
1074
1076
  id_project: savedProject._id.toString(),
1075
1077
  id_user: savedUser2._id.toString(),
1076
- role: "agent",
1078
+ role: RoleConstants.AGENT,
1079
+ roleType : RoleConstants.TYPE_AGENTS,
1077
1080
  user_available: false,
1078
1081
  createdBy: userid,
1079
1082
  updatedBy: userid
@@ -1338,7 +1341,8 @@ describe('RequestService', function () {
1338
1341
  // _id: new mongoose.Types.ObjectId(),
1339
1342
  id_project: savedProject._id.toString(),
1340
1343
  id_user: savedUser2._id.toString(),
1341
- role: "agent",
1344
+ role: RoleConstants.AGENT,
1345
+ roleType : RoleConstants.TYPE_AGENTS,
1342
1346
  user_available: true,
1343
1347
  createdBy: userid,
1344
1348
  updatedBy: userid
package/test-int/bot.js CHANGED
@@ -16,7 +16,7 @@ var Department = require('../models/department');
16
16
  var Faq = require('../models/faq');
17
17
  var faqBotSupport = require('../services/faqBotSupport');
18
18
  var Project_user = require("../models/project_user");
19
-
19
+ var RoleConstants = require('../models/roleConstants');
20
20
  var expect = chai.expect;
21
21
  var assert = chai.assert;
22
22
 
@@ -255,7 +255,8 @@ describe('bot', () => {
255
255
  // _id: new mongoose.Types.ObjectId(),
256
256
  id_project: savedProject._id.toString(),
257
257
  id_user: savedUser2._id.toString(),
258
- role: "agent",
258
+ role: RoleConstants.AGENT,
259
+ roleType : RoleConstants.TYPE_AGENTS,
259
260
  user_available: true,
260
261
  createdBy: savedUser._id,
261
262
  updatedBy: savedUser._id