From 569332341b29009e7a1e1743cb0dc6fcb8437af9 Mon Sep 17 00:00:00 2001 From: Artem Savchenko Date: Wed, 7 May 2025 12:27:36 +0700 Subject: [PATCH] UBERF-10408: Fix tests Signed-off-by: Artem Savchenko --- .../src/__tests__/gmailClient.test.ts | 4 + .../src/__tests__/message.test.ts | 153 +----------------- 2 files changed, 5 insertions(+), 152 deletions(-) diff --git a/services/gmail/pod-gmail-next/src/__tests__/gmailClient.test.ts b/services/gmail/pod-gmail-next/src/__tests__/gmailClient.test.ts index a54f0fcca5..705949fb5e 100644 --- a/services/gmail/pod-gmail-next/src/__tests__/gmailClient.test.ts +++ b/services/gmail/pod-gmail-next/src/__tests__/gmailClient.test.ts @@ -56,6 +56,10 @@ jest.mock('@hcengineering/core', () => { } }) +jest.mock('@hcengineering/mail-common', () => ({ + createMessages: jest.fn().mockResolvedValue(undefined) +})) + jest.mock('googleapis', () => ({ gmail_v1: {}, google: { diff --git a/services/gmail/pod-gmail-next/src/__tests__/message.test.ts b/services/gmail/pod-gmail-next/src/__tests__/message.test.ts index 5fc623d221..7442174c97 100644 --- a/services/gmail/pod-gmail-next/src/__tests__/message.test.ts +++ b/services/gmail/pod-gmail-next/src/__tests__/message.test.ts @@ -1,161 +1,10 @@ -import { type MeasureContext, TxOperations, AttachedData, SocialId } from '@hcengineering/core' -import { type GaxiosResponse } from 'gaxios' -import { gmail_v1 } from 'googleapis' -import { type Message } from '@hcengineering/gmail' - -import { type Channel } from '../types' -import { AttachmentHandler } from '../message/attachments' -import { MessageManager, sanitizeText } from '../message/message' +import { sanitizeText } from '../message/message' /* eslint-disable @typescript-eslint/consistent-type-assertions */ /* eslint-disable @typescript-eslint/unbound-method */ jest.mock('../config') -describe('MessageManager', () => { - let messageManager: MessageManager - let mockCtx: MeasureContext - let mockClient: TxOperations - let mockAttachmentHandler: AttachmentHandler - let mockToken: string - let mockWorkspace: { getChannel: (email: string) => Channel | undefined } - let mockSocialId: SocialId - - beforeEach(() => { - mockCtx = { - measure: jest.fn(), - with: jest.fn() - } as unknown as MeasureContext - - mockClient = { - findOne: jest.fn(), - findAll: jest.fn(), - tx: jest.fn() - } as unknown as TxOperations - - mockAttachmentHandler = { - getPartFiles: jest.fn(), - addAttachement: jest.fn() - } as unknown as AttachmentHandler - - mockToken = 'test-token' - - mockWorkspace = { - getChannel: jest.fn() - } - mockSocialId = { key: 'test-key', _id: '123' } as unknown as SocialId - - messageManager = new MessageManager(mockCtx, mockAttachmentHandler, mockToken, mockSocialId) - }) - - describe('saveMessage', () => { - const createMockGmailResponse = (): GaxiosResponse => ({ - config: {}, - data: { - id: 'test-message-id', - internalDate: '1234567890', - payload: { - headers: [ - { name: 'From', value: 'sender@example.com' }, - { name: 'To', value: 'recipient@example.com' }, - { name: 'Message-ID', value: 'test-message-id' }, - { name: 'Subject', value: 'Test Subject' } - ], - parts: [ - { - mimeType: 'text/plain', - body: { data: 'dGVzdCBjb250ZW50' } - }, - { - mimeType: 'text/html', - body: { data: 'PHA+dGVzdCBjb250ZW50PC9wPg==' } - } - ] - } - }, - status: 200, - statusText: 'OK', - headers: {}, - request: { - responseURL: 'https://example.com' - } - }) - - const createMockMessage = (): AttachedData => ({ - messageId: 'test-message-id', - textContent: 'test content', - subject: 'Test Subject', - content: 'test content', - sendOn: 1234567890, - from: 'sender@example.com', - to: 'recipient@example.com', - copy: [], - incoming: true - }) - - it('should save message with attachments', async () => { - const mockMessage = createMockGmailResponse() - const mockChannel = { _id: 'test-channel-id' } as Channel - mockWorkspace.getChannel = jest.fn().mockReturnValue(mockChannel) - mockClient.findOne = jest.fn().mockResolvedValue(undefined) - mockAttachmentHandler.getPartFiles = jest.fn().mockResolvedValue([]) - - await messageManager.saveMessage(mockMessage, 'test@example.com') - - expect(mockClient.tx).toHaveBeenCalled() - expect(mockAttachmentHandler.getPartFiles).toHaveBeenCalled() - }) - - it('should update existing message', async () => { - const mockMessage = createMockGmailResponse() - const mockChannel = { _id: 'test-channel-id' } as Channel - const existingMessage = createMockMessage() - mockWorkspace.getChannel = jest.fn().mockReturnValue(mockChannel) - mockClient.findOne = jest.fn().mockResolvedValue(existingMessage) - mockAttachmentHandler.getPartFiles = jest.fn().mockResolvedValue([]) - - await messageManager.saveMessage(mockMessage, 'test@example.com') - - expect(mockClient.tx).toHaveBeenCalled() - expect(mockAttachmentHandler.getPartFiles).toHaveBeenCalled() - }) - - it('should not save message when no channels found', async () => { - const mockMessage = createMockGmailResponse() - mockWorkspace.getChannel = jest.fn().mockReturnValue(undefined) - - await messageManager.saveMessage(mockMessage, 'test@example.com') - - expect(mockClient.tx).not.toHaveBeenCalled() - expect(mockAttachmentHandler.getPartFiles).not.toHaveBeenCalled() - }) - - it('should handle incoming messages correctly', async () => { - const mockMessage = createMockGmailResponse() - const mockChannel = { _id: 'test-channel-id' } as Channel - mockWorkspace.getChannel = jest.fn().mockReturnValue(mockChannel) - mockClient.findOne = jest.fn().mockResolvedValue(undefined) - mockAttachmentHandler.getPartFiles = jest.fn().mockResolvedValue([]) - - await messageManager.saveMessage(mockMessage, 'recipient@example.com') - - expect(mockWorkspace.getChannel).toHaveBeenCalledWith('sender@example.com') - }) - - it('should handle outgoing messages correctly', async () => { - const mockMessage = createMockGmailResponse() - const mockChannel = { _id: 'test-channel-id' } as Channel - mockWorkspace.getChannel = jest.fn().mockReturnValue(mockChannel) - mockClient.findOne = jest.fn().mockResolvedValue(undefined) - mockAttachmentHandler.getPartFiles = jest.fn().mockResolvedValue([]) - - await messageManager.saveMessage(mockMessage, 'sender@example.com') - - expect(mockWorkspace.getChannel).toHaveBeenCalledWith('recipient@example.com') - }) - }) -}) - describe('sanitizeHtml', () => { it('should remove all HTML tags', () => { const html = '

This is bold and italic text

'