The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/ee/packages/presence/tests/lib/processConnectionStatus.tes...

240 lines
6.9 KiB

import { describe, expect, test } from '@jest/globals';
import { UserStatus } from '@rocket.chat/core-typings';
import { processConnectionStatus, processStatus, processPresenceAndStatus } from '../../src/lib/processConnectionStatus';
describe('Presence micro service', () => {
test('should return connection as online when there is a connection online', () => {
expect(processConnectionStatus(UserStatus.OFFLINE, UserStatus.ONLINE)).toBe(UserStatus.ONLINE);
expect(processConnectionStatus(UserStatus.ONLINE, UserStatus.ONLINE)).toBe(UserStatus.ONLINE);
expect(processConnectionStatus(UserStatus.BUSY, UserStatus.ONLINE)).toBe(UserStatus.ONLINE);
expect(processConnectionStatus(UserStatus.AWAY, UserStatus.ONLINE)).toBe(UserStatus.ONLINE);
});
test('should return the connections status if the other connection is offline', () => {
expect(processConnectionStatus(UserStatus.OFFLINE, UserStatus.OFFLINE)).toBe(UserStatus.OFFLINE);
expect(processConnectionStatus(UserStatus.ONLINE, UserStatus.OFFLINE)).toBe(UserStatus.ONLINE);
expect(processConnectionStatus(UserStatus.AWAY, UserStatus.OFFLINE)).toBe(UserStatus.AWAY);
});
test('should return the connection status when the default status is online', () => {
expect(processStatus(UserStatus.ONLINE, UserStatus.ONLINE)).toBe(UserStatus.ONLINE);
expect(processStatus(UserStatus.AWAY, UserStatus.ONLINE)).toBe(UserStatus.AWAY);
expect(processStatus(UserStatus.OFFLINE, UserStatus.ONLINE)).toBe(UserStatus.OFFLINE);
});
test('should return status busy when the default status is busy', () => {
expect(processStatus(UserStatus.ONLINE, UserStatus.BUSY)).toBe(UserStatus.BUSY);
expect(processStatus(UserStatus.AWAY, UserStatus.BUSY)).toBe(UserStatus.BUSY);
expect(processStatus(UserStatus.OFFLINE, UserStatus.BUSY)).toBe(UserStatus.OFFLINE);
});
test('should return status away when the default status is away', () => {
expect(processStatus(UserStatus.ONLINE, UserStatus.AWAY)).toBe(UserStatus.AWAY);
expect(processStatus(UserStatus.AWAY, UserStatus.AWAY)).toBe(UserStatus.AWAY);
expect(processStatus(UserStatus.OFFLINE, UserStatus.AWAY)).toBe(UserStatus.OFFLINE);
});
test('should return status offline when the default status is offline', () => {
expect(processStatus(UserStatus.ONLINE, UserStatus.OFFLINE)).toBe(UserStatus.OFFLINE);
expect(processStatus(UserStatus.AWAY, UserStatus.OFFLINE)).toBe(UserStatus.OFFLINE);
expect(processStatus(UserStatus.OFFLINE, UserStatus.OFFLINE)).toBe(UserStatus.OFFLINE);
});
test('should return correct status and statusConnection when connected once', () => {
expect(
processPresenceAndStatus(
[
{
id: 'random',
instanceId: 'random',
status: UserStatus.ONLINE,
_createdAt: new Date(),
_updatedAt: new Date(),
},
],
UserStatus.ONLINE,
),
).toStrictEqual({ status: UserStatus.ONLINE, statusConnection: UserStatus.ONLINE });
expect(
processPresenceAndStatus(
[
{
id: 'random',
instanceId: 'random',
status: UserStatus.AWAY,
_createdAt: new Date(),
_updatedAt: new Date(),
},
],
UserStatus.ONLINE,
),
).toStrictEqual({ status: UserStatus.AWAY, statusConnection: UserStatus.AWAY });
expect(
processPresenceAndStatus(
[
{
id: 'random',
instanceId: 'random',
status: UserStatus.ONLINE,
_createdAt: new Date(),
_updatedAt: new Date(),
},
],
UserStatus.BUSY,
),
).toStrictEqual({ status: UserStatus.BUSY, statusConnection: UserStatus.ONLINE });
expect(
processPresenceAndStatus(
[
{
id: 'random',
instanceId: 'random',
status: UserStatus.ONLINE,
_createdAt: new Date(),
_updatedAt: new Date(),
},
],
UserStatus.AWAY,
),
).toStrictEqual({ status: UserStatus.AWAY, statusConnection: UserStatus.ONLINE });
expect(
processPresenceAndStatus(
[
{
id: 'random',
instanceId: 'random',
status: UserStatus.AWAY,
_createdAt: new Date(),
_updatedAt: new Date(),
},
],
UserStatus.BUSY,
),
).toStrictEqual({ status: UserStatus.BUSY, statusConnection: UserStatus.AWAY });
expect(
processPresenceAndStatus(
[
{
id: 'random',
instanceId: 'random',
status: UserStatus.ONLINE,
_createdAt: new Date(),
_updatedAt: new Date(),
},
],
UserStatus.OFFLINE,
),
).toStrictEqual({ status: UserStatus.OFFLINE, statusConnection: UserStatus.ONLINE });
expect(
processPresenceAndStatus(
[
{
id: 'random',
instanceId: 'random',
status: UserStatus.AWAY,
_createdAt: new Date(),
_updatedAt: new Date(),
},
],
UserStatus.OFFLINE,
),
).toStrictEqual({ status: UserStatus.OFFLINE, statusConnection: UserStatus.AWAY });
});
test('should return correct status and statusConnection when connected twice', () => {
expect(
processPresenceAndStatus(
[
{
id: 'random',
instanceId: 'random',
status: UserStatus.ONLINE,
_createdAt: new Date(),
_updatedAt: new Date(),
},
{
id: 'random',
instanceId: 'random',
status: UserStatus.AWAY,
_createdAt: new Date(),
_updatedAt: new Date(),
},
],
UserStatus.ONLINE,
),
).toStrictEqual({ status: UserStatus.ONLINE, statusConnection: UserStatus.ONLINE });
expect(
processPresenceAndStatus(
[
{
id: 'random',
instanceId: 'random',
status: UserStatus.AWAY,
_createdAt: new Date(),
_updatedAt: new Date(),
},
{
id: 'random',
instanceId: 'random',
status: UserStatus.ONLINE,
_createdAt: new Date(),
_updatedAt: new Date(),
},
],
UserStatus.ONLINE,
),
).toStrictEqual({ status: UserStatus.ONLINE, statusConnection: UserStatus.ONLINE });
expect(
processPresenceAndStatus(
[
{
id: 'random',
instanceId: 'random',
status: UserStatus.AWAY,
_createdAt: new Date(),
_updatedAt: new Date(),
},
{
id: 'random',
instanceId: 'random',
status: UserStatus.AWAY,
_createdAt: new Date(),
_updatedAt: new Date(),
},
],
UserStatus.ONLINE,
),
).toStrictEqual({ status: UserStatus.AWAY, statusConnection: UserStatus.AWAY });
});
test('should return correct status and statusConnection when not connected', () => {
expect(processPresenceAndStatus([], UserStatus.ONLINE)).toStrictEqual({
status: UserStatus.OFFLINE,
statusConnection: UserStatus.OFFLINE,
});
expect(processPresenceAndStatus([], UserStatus.BUSY)).toStrictEqual({
status: UserStatus.OFFLINE,
statusConnection: UserStatus.OFFLINE,
});
expect(processPresenceAndStatus([], UserStatus.AWAY)).toStrictEqual({
status: UserStatus.OFFLINE,
statusConnection: UserStatus.OFFLINE,
});
expect(processPresenceAndStatus([], UserStatus.OFFLINE)).toStrictEqual({
status: UserStatus.OFFLINE,
statusConnection: UserStatus.OFFLINE,
});
});
});