Skip to content

Commit 7824f57

Browse files
test: added tests for loadSurroundingMessages method
1 parent 5bff1aa commit 7824f57

File tree

1 file changed

+250
-1
lines changed

1 file changed

+250
-1
lines changed

apps/meteor/tests/end-to-end/api/methods.ts

Lines changed: 250 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { after, before, describe, it } from 'mocha';
66

77
import { retry } from './helpers/retry';
88
import { api, credentials, getCredentials, methodCall, request } from '../../data/api-data';
9-
import { sendSimpleMessage } from '../../data/chat.helper';
9+
import { sendMessage, sendSimpleMessage } from '../../data/chat.helper';
1010
import { CI_MAX_ROOMS_PER_GUEST as maxRoomsPerGuest } from '../../data/constants';
1111
import { closeOmnichannelRoom, createAgent, createLivechatRoom, createVisitor } from '../../data/livechat/rooms';
1212
import { 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

Comments
 (0)