@@ -6,7 +6,7 @@ import { after, before, describe, it } from 'mocha';
66
77import { retry } from './helpers/retry' ;
88import { api , credentials , getCredentials , methodCall , request } from '../../data/api-data' ;
9- import { sendSimpleMessage } from '../../data/chat.helper' ;
9+ import { sendMessage , sendSimpleMessage } from '../../data/chat.helper' ;
1010import { CI_MAX_ROOMS_PER_GUEST as maxRoomsPerGuest } from '../../data/constants' ;
1111import { closeOmnichannelRoom , createAgent , createLivechatRoom , createVisitor } from '../../data/livechat/rooms' ;
1212import { updatePermission , updateSetting } from '../../data/permissions.helper' ;
@@ -3424,4 +3424,253 @@ describe('Meteor.methods', () => {
34243424 } ) ;
34253425 } ) ;
34263426 } ) ;
3427+
3428+ describe ( '[@loadSurroundingMessages]' , ( ) => {
3429+ let rid : IRoom [ '_id' ] ;
3430+ let middleMessage : IMessage ;
3431+ let channelName : string ;
3432+
3433+ before ( 'create room' , ( done ) => {
3434+ channelName = `methods-test-channel-${ Date . now ( ) } ` ;
3435+ void request
3436+ . post ( api ( 'groups.create' ) )
3437+ . set ( credentials )
3438+ . send ( {
3439+ name : channelName ,
3440+ } )
3441+ . expect ( 'Content-Type' , 'application/json' )
3442+ . expect ( 200 )
3443+ . expect ( ( res ) => {
3444+ expect ( res . body ) . to . have . property ( 'success' , true ) ;
3445+ expect ( res . body ) . to . have . nested . property ( 'group._id' ) ;
3446+ rid = res . body . group . _id ;
3447+ } )
3448+ . end ( done ) ;
3449+ } ) ;
3450+
3451+ before ( 'send messages' , async ( ) => {
3452+ await sendMessage ( { message : { rid, msg : 'Message 1' } } ) ;
3453+
3454+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
3455+ await sendMessage ( { message : { rid, msg : 'Message 2' } } ) ;
3456+
3457+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
3458+ const msg3 = await sendMessage ( { message : { rid, msg : 'Message 3' } } ) ;
3459+ middleMessage = msg3 . body . message ;
3460+
3461+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
3462+ const threadMsg = await sendMessage ( { message : { rid, msg : 'Message 4 (Thread)' } } ) ;
3463+
3464+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
3465+ await sendMessage ( { message : { rid, msg : 'Message 4.1 (Reply)' , tmid : threadMsg . body . message . _id } } ) ;
3466+
3467+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
3468+ await sendMessage ( { message : { rid, msg : 'Message 4.2 (Reply)' , tmid : threadMsg . body . message . _id } } ) ;
3469+
3470+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
3471+ await sendMessage ( { message : { rid, msg : 'Message 5' } } ) ;
3472+ } ) ;
3473+
3474+ after ( ( ) => deleteRoom ( { type : 'p' , roomId : rid } ) ) ;
3475+
3476+ it ( 'should fail if not logged in' , ( done ) => {
3477+ void request
3478+ . post ( methodCall ( 'loadSurroundingMessages' ) )
3479+ . send ( {
3480+ message : JSON . stringify ( {
3481+ method : 'loadSurroundingMessages' ,
3482+ params : [ middleMessage , 5 ] ,
3483+ id : 'id' ,
3484+ msg : 'method' ,
3485+ } ) ,
3486+ } )
3487+ . expect ( 'Content-Type' , 'application/json' )
3488+ . expect ( 401 )
3489+ . expect ( ( res ) => {
3490+ expect ( res . body ) . to . have . property ( 'status' , 'error' ) ;
3491+ expect ( res . body ) . to . have . property ( 'message' , 'You must be logged in to do this.' ) ;
3492+ } )
3493+ . end ( done ) ;
3494+ } ) ;
3495+
3496+ it ( 'should fail is message param is empty' , ( done ) => {
3497+ void request
3498+ . post ( methodCall ( 'loadSurroundingMessages' ) )
3499+ . set ( credentials )
3500+ . send ( {
3501+ message : JSON . stringify ( {
3502+ method : 'loadSurroundingMessages' ,
3503+ params : [ ] ,
3504+ id : 'id' ,
3505+ msg : 'method' ,
3506+ } ) ,
3507+ } )
3508+ . expect ( 'Content-Type' , 'application/json' )
3509+ . expect ( 400 )
3510+ . expect ( ( res ) => {
3511+ expect ( res . body ) . to . have . a . property ( 'success' , false ) ;
3512+ expect ( res . body ) . to . have . a . property ( 'message' ) . that . include ( 'Match error' ) ;
3513+ } )
3514+ . end ( done ) ;
3515+ } ) ;
3516+
3517+ it ( 'should fail is message param type is incorrect' , ( done ) => {
3518+ void request
3519+ . post ( methodCall ( 'loadSurroundingMessages' ) )
3520+ . set ( credentials )
3521+ . send ( {
3522+ message : JSON . stringify ( {
3523+ method : 'loadSurroundingMessages' ,
3524+ params : [ 'invalid-message' ] ,
3525+ id : 'id' ,
3526+ msg : 'method' ,
3527+ } ) ,
3528+ } )
3529+ . expect ( 'Content-Type' , 'application/json' )
3530+ . expect ( 400 )
3531+ . expect ( ( res ) => {
3532+ expect ( res . body ) . to . have . a . property ( 'success' , false ) ;
3533+ expect ( res . body ) . to . have . a . property ( 'message' ) . that . include ( 'Match error' ) ;
3534+ } )
3535+ . end ( done ) ;
3536+ } ) ;
3537+
3538+ it ( 'should return false if message has no _id' , ( done ) => {
3539+ void request
3540+ . post ( methodCall ( 'loadSurroundingMessages' ) )
3541+ . set ( credentials )
3542+ . send ( {
3543+ message : JSON . stringify ( {
3544+ method : 'loadSurroundingMessages' ,
3545+ params : [ { rid } , 5 ] ,
3546+ id : 'id' ,
3547+ msg : 'method' ,
3548+ } ) ,
3549+ } )
3550+ . expect ( 'Content-Type' , 'application/json' )
3551+ . expect ( 200 )
3552+ . expect ( ( res ) => {
3553+ const { result } = JSON . parse ( res . body . message ) ;
3554+ expect ( result ) . to . be . false ;
3555+ } )
3556+ . end ( done ) ;
3557+ } ) ;
3558+
3559+ it ( 'should return false if message does not exist' , ( done ) => {
3560+ void request
3561+ . post ( methodCall ( 'loadSurroundingMessages' ) )
3562+ . set ( credentials )
3563+ . send ( {
3564+ message : JSON . stringify ( {
3565+ method : 'loadSurroundingMessages' ,
3566+ params : [ { _id : 'invalid-id' , rid } , 5 ] ,
3567+ id : 'id' ,
3568+ msg : 'method' ,
3569+ } ) ,
3570+ } )
3571+ . expect ( 'Content-Type' , 'application/json' )
3572+ . expect ( 200 )
3573+ . expect ( ( res ) => {
3574+ const { result } = JSON . parse ( res . body . message ) ;
3575+ expect ( result ) . to . be . false ;
3576+ } )
3577+ . end ( done ) ;
3578+ } ) ;
3579+
3580+ it ( 'should return all messages (default limit)' , ( done ) => {
3581+ void request
3582+ . post ( methodCall ( 'loadSurroundingMessages' ) )
3583+ . set ( credentials )
3584+ . send ( {
3585+ message : JSON . stringify ( {
3586+ method : 'loadSurroundingMessages' ,
3587+ params : [ middleMessage ] ,
3588+ id : 'id' ,
3589+ msg : 'method' ,
3590+ } ) ,
3591+ } )
3592+ . expect ( 'Content-Type' , 'application/json' )
3593+ . expect ( 200 )
3594+ . expect ( ( res ) => {
3595+ const { result } = JSON . parse ( res . body . message ) ;
3596+ expect ( result ) . to . have . property ( 'messages' ) . that . is . an ( 'array' ) ;
3597+ expect ( result . messages ) . to . have . lengthOf ( 7 ) ;
3598+ expect ( result . messages [ 2 ] ) . to . have . property ( '_id' , middleMessage . _id ) ;
3599+ } )
3600+ . end ( done ) ;
3601+ } ) ;
3602+
3603+ it ( 'should respect limit when provided' , ( done ) => {
3604+ void request
3605+ . post ( methodCall ( 'loadSurroundingMessages' ) )
3606+ . set ( credentials )
3607+ . send ( {
3608+ message : JSON . stringify ( {
3609+ method : 'loadSurroundingMessages' ,
3610+ params : [ middleMessage , 3 ] ,
3611+ id : 'id' ,
3612+ msg : 'method' ,
3613+ } ) ,
3614+ } )
3615+ . expect ( 'Content-Type' , 'application/json' )
3616+ . expect ( 200 )
3617+ . expect ( ( res ) => {
3618+ const { result } = JSON . parse ( res . body . message ) ;
3619+ expect ( result ) . to . have . property ( 'messages' ) . that . is . an ( 'array' ) ;
3620+ expect ( result . messages ) . to . have . lengthOf ( 3 ) ;
3621+ expect ( result . messages [ 1 ] ) . to . have . property ( '_id' , middleMessage . _id ) ;
3622+ } )
3623+ . end ( done ) ;
3624+ } ) ;
3625+
3626+ it ( 'should filter out thread messages when showThreadMessages is false' , ( done ) => {
3627+ void request
3628+ . post ( methodCall ( 'loadSurroundingMessages' ) )
3629+ . set ( credentials )
3630+ . send ( {
3631+ message : JSON . stringify ( {
3632+ method : 'loadSurroundingMessages' ,
3633+ params : [ middleMessage , 50 , false ] ,
3634+ id : 'id' ,
3635+ msg : 'method' ,
3636+ } ) ,
3637+ } )
3638+ . expect ( 'Content-Type' , 'application/json' )
3639+ . expect ( 200 )
3640+ . expect ( ( res ) => {
3641+ const { result } = JSON . parse ( res . body . message ) ;
3642+ expect ( result ) . to . have . property ( 'messages' ) . that . is . an ( 'array' ) ;
3643+ expect ( result . messages ) . to . have . lengthOf ( 5 ) ;
3644+ expect ( result . messages [ 2 ] ) . to . have . property ( '_id' , middleMessage . _id ) ;
3645+ } )
3646+ . end ( done ) ;
3647+ } ) ;
3648+
3649+ it ( 'should include thread messages when showThreadMessages is true' , ( done ) => {
3650+ void request
3651+ . post ( methodCall ( 'loadSurroundingMessages' ) )
3652+ . set ( credentials )
3653+ . send ( {
3654+ message : JSON . stringify ( {
3655+ method : 'loadSurroundingMessages' ,
3656+ params : [ middleMessage , 50 , true ] ,
3657+ id : 'id' ,
3658+ msg : 'method' ,
3659+ } ) ,
3660+ } )
3661+ . expect ( 'Content-Type' , 'application/json' )
3662+ . expect ( 200 )
3663+ . expect ( ( res ) => {
3664+ const { result } = JSON . parse ( res . body . message ) ;
3665+
3666+ expect ( result ) . to . have . property ( 'messages' ) . that . is . an ( 'array' ) ;
3667+ expect ( result . messages ) . to . have . lengthOf ( 7 ) ;
3668+
3669+ const messageTexts = result . messages . map ( ( m : IMessage ) => m . msg ) ;
3670+ expect ( messageTexts ) . to . include ( 'Message 4.1 (Reply)' ) ;
3671+ expect ( messageTexts ) . to . include ( 'Message 4.2 (Reply)' ) ;
3672+ } )
3673+ . end ( done ) ;
3674+ } ) ;
3675+ } ) ;
34273676} ) ;
0 commit comments