Skip to content

Commit

Permalink
Updated tests
Browse files Browse the repository at this point in the history
  • Loading branch information
harshilsharma63 committed Feb 12, 2025
1 parent 78e5ed0 commit a75e862
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 51 deletions.
3 changes: 2 additions & 1 deletion app/actions/local/scheduled_post.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@

import DatabaseManager from '@database/manager';
import {logError} from '@utils/log';
import ScheduledPostModel from '@typings/database/models/servers/scheduled_post';

export async function handleScheduledPosts(serverUrl: string, actionType: string, scheduledPosts: ScheduledPost[], prepareRecordsOnly = false) {
export async function handleScheduledPosts(serverUrl: string, actionType: string, scheduledPosts: ScheduledPost[], prepareRecordsOnly = false): Promise<{models?: ScheduledPostModel[]; error?: any}> {
if (!scheduledPosts.length) {
return {models: undefined};
}
Expand Down
7 changes: 4 additions & 3 deletions app/actions/remote/scheduled_post.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,10 @@ jest.mock('@queries/servers/system', () => ({
}));

jest.mock('@managers/websocket_manager', () => ({
default: {
getClient: jest.fn(() => mockWebSocketClient),
},
// default: {
// getClient: jest.fn(() => mockWebSocketClient),
// },
getClient: jest.fn(() => mockWebSocketClient),
}));

const mockedGetConfigValue = jest.mocked(getConfigValue);
Expand Down
86 changes: 43 additions & 43 deletions app/actions/websocket/scheduled_post.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,34 +12,19 @@ import type ScheduledPostModel from '@typings/database/models/servers/scheduled_
const serverUrl = 'baseHandler.test.com';
let operator: ServerDataOperator;

const scheduledPosts = [
{
channel_id: 'channel_id',
error_code: '',
files: [],
id: 'scheduled_post_id',
message: 'test scheduled post',
metadata: {},
processed_at: 0,
root_id: '',
scheduled_at: 123,
update_at: 456,
user_id: '',
},
{
id: 'scheduled_post_id_2',
channel_id: 'channel_id',
root_id: '',
message: 'test scheduled post 2',
files: [],
metadata: {},
scheduled_at: 123,
user_id: 'user_id',
processed_at: 0,
update_at: 456,
error_code: '',
},
];
const scheduledPost = {
channel_id: 'channel_id',
error_code: '',
files: [],
id: 'scheduled_post_id',
message: 'test scheduled post',
metadata: {},
processed_at: 0,
root_id: '',
scheduled_at: 123,
update_at: 456,
user_id: '',
};

beforeEach(async () => {
await DatabaseManager.init([serverUrl]);
Expand All @@ -51,48 +36,63 @@ afterEach(async () => {
});

describe('handleCreateOrUpdateSchedulePost', () => {
it('handleCreateOrUpdateScheduledPost - handle not found database', async () => {
const {error} = await handleCreateOrUpdateScheduledPost('foo', {data: {scheduled_post: JSON.stringify(scheduledPosts[0])}} as WebSocketMessage) as {error: Error};
it('handleCreateOrUpdateScheduledPost - handle empty payload', async () => {
const {error} = await handleCreateOrUpdateScheduledPost('foo', {data: {scheduledPost: JSON.stringify(scheduledPost)}} as WebSocketMessage);
expect(error.message).toBe('foo database not found');
});

it('handleCreateOrUpdateScheduledPost - wrong websocket scheduled post message', async () => {
const {error} = await handleCreateOrUpdateScheduledPost('foo', {} as WebSocketMessage) as {error: Error};
expect(error.message).toBe('Cannot read properties of undefined (reading \'scheduled_post\')');
const {models, error} = await handleCreateOrUpdateScheduledPost('foo', {} as WebSocketMessage);
expect(error).toBeUndefined();
expect(models).toBeUndefined();
});

it('handleCreateOrUpdateScheduledPost - no scheduled post', async () => {
const {models} = await handleCreateOrUpdateScheduledPost(serverUrl, {data: {scheduled_post: ''}} as WebSocketMessage) as {models: undefined};
const {models} = await handleCreateOrUpdateScheduledPost(serverUrl, {data: {scheduledPost: ''}} as WebSocketMessage);
expect(models).toBeUndefined();
});

it('handleCreateOrUpdateScheduledPost - success', async () => {
const {models} = await handleCreateOrUpdateScheduledPost(serverUrl, {data: {scheduled_post: JSON.stringify(scheduledPosts[0])}} as WebSocketMessage) as {models: ScheduledPostModel[]};
expect(models[0].id).toEqual(scheduledPosts[0].id);
const {models} = await handleCreateOrUpdateScheduledPost(serverUrl, {data: {scheduledPost: JSON.stringify(scheduledPost)}} as WebSocketMessage);
expect(models).toBeDefined();
expect(models![0].id).toEqual(scheduledPost.id);
});

it('handleCreateOrUpdateScheduledPost - should return error for invalid JSON payload', async () => {
const {models, error} = await handleCreateOrUpdateScheduledPost(serverUrl, {data: {scheduledPost: 'invalid_json'}} as WebSocketMessage);
expect(models).toBeUndefined();
expect(error).toBeDefined();
});
});

describe('handleDeleteScheduledPost', () => {
it('handleDeleteScheduledPost - handle not found database', async () => {
const {error} = await handleDeleteScheduledPost('foo', {} as WebSocketMessage) as {error: unknown};
expect(error).toBeTruthy();
it('handleDeleteScheduledPost - handle empty payload', async () => {
const {error, models} = await handleDeleteScheduledPost('foo', {} as WebSocketMessage);
expect(error).toBeUndefined();
expect(models).toBeUndefined();
});

it('handleDeleteScheduledPost - no scheduled post', async () => {
const {models} = await handleDeleteScheduledPost(serverUrl, {data: {scheduled_post: ''}} as WebSocketMessage) as {models: undefined};
const {models} = await handleDeleteScheduledPost(serverUrl, {data: {scheduledPost: ''}} as WebSocketMessage);
expect(models).toBeUndefined();
});

it('handleDeleteScheduledPost - success', async () => {
await operator.handleScheduledPosts({
actionType: ActionType.SCHEDULED_POSTS.CREATE_OR_UPDATED_SCHEDULED_POST,
scheduledPosts: [scheduledPosts[0]],
scheduledPosts: [scheduledPost],
prepareRecordsOnly: false,
});

const scheduledPost = scheduledPosts[0];

const deletedRecord = await handleDeleteScheduledPost(serverUrl, {data: {scheduled_post: JSON.stringify(scheduledPost)}} as WebSocketMessage) as {models: ScheduledPostModel[]};
const deletedRecord = await handleDeleteScheduledPost(serverUrl, {data: {scheduledPost: JSON.stringify(scheduledPost)}} as WebSocketMessage);
expect(deletedRecord.models).toBeDefined();
expect(deletedRecord.models.length).toBe(1);
expect(deletedRecord.models[0].id).toBe(scheduledPost.id);
});

it('handleDeleteScheduledPost - should return error for invalid JSON payload', async () => {
const {models, error} = await handleDeleteScheduledPost(serverUrl, {data: {scheduledPost: 'invalid_json'}} as WebSocketMessage);
expect(models).toBeUndefined();
expect(error).toBeDefined();
});
});
8 changes: 4 additions & 4 deletions app/actions/websocket/scheduled_post.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ export type ScheduledPostWebsocketEventPayload = {

export async function handleCreateOrUpdateScheduledPost(serverUrl: string, msg: WebSocketMessage<ScheduledPostWebsocketEventPayload>, prepareRecordsOnly = false) {
try {
const scheduledPost: ScheduledPost = JSON.parse(msg.data.scheduledPost);
return handleScheduledPosts(serverUrl, ActionType.SCHEDULED_POSTS.CREATE_OR_UPDATED_SCHEDULED_POST, [scheduledPost], prepareRecordsOnly);
const scheduledPost: ScheduledPost[] = msg?.data?.scheduledPost ? [JSON.parse(msg.data.scheduledPost)] : [];
return handleScheduledPosts(serverUrl, ActionType.SCHEDULED_POSTS.CREATE_OR_UPDATED_SCHEDULED_POST, scheduledPost, prepareRecordsOnly);
} catch (error) {
logError('handleCreateOrUpdateScheduledPost cannot handle scheduled post added/update websocket event', error);
return {error};
Expand All @@ -21,8 +21,8 @@ export async function handleCreateOrUpdateScheduledPost(serverUrl: string, msg:

export async function handleDeleteScheduledPost(serverUrl: string, msg: WebSocketMessage<ScheduledPostWebsocketEventPayload>, prepareRecordsOnly = false) {
try {
const scheduledPost: ScheduledPost = JSON.parse(msg.data.scheduledPost);
return handleScheduledPosts(serverUrl, ActionType.SCHEDULED_POSTS.DELETE_SCHEDULED_POST, [scheduledPost], prepareRecordsOnly);
const scheduledPost: ScheduledPost[] = msg?.data?.scheduledPost ? [JSON.parse(msg.data.scheduledPost)] : [];
return handleScheduledPosts(serverUrl, ActionType.SCHEDULED_POSTS.DELETE_SCHEDULED_POST, scheduledPost, prepareRecordsOnly);
} catch (error) {
logError('handleDeleteScheduledPost cannot handle scheduled post deleted websocket event', error);
return {error};
Expand Down

0 comments on commit a75e862

Please sign in to comment.