Skip to content

Commit

Permalink
Fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
stef-coenen committed Jan 31, 2025
1 parent 3effee5 commit 25212fe
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 102 deletions.
11 changes: 9 additions & 2 deletions packages/mobile/__tests__/ChatProvider.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,11 @@ import {
ChatMessage,
} from '../src/provider/chat/ChatProvider';
import * as ChatProvider from '../src/provider/chat/ChatProvider';
import { ChatDrive, UnifiedConversation } from '../src/provider/chat/ConversationProvider';
import {
ChatDrive,
ConversationMetadata,
UnifiedConversation,
} from '../src/provider/chat/ConversationProvider';
import { sendReadReceipt } from '@homebase-id/js-lib/peer';
import { getRandom16ByteArray } from '@homebase-id/js-lib/helpers';

Expand Down Expand Up @@ -371,7 +375,10 @@ describe('ChatProvider', () => {
});

it('should request mark as read', async () => {
const conversation = { fileId: 'conversation-id' } as HomebaseFile<UnifiedConversation>;
const conversation = { fileId: 'conversation-id' } as HomebaseFile<
UnifiedConversation,
ConversationMetadata
>;
const messages = [
{
fileId: 'message-id',
Expand Down
106 changes: 6 additions & 100 deletions packages/mobile/__tests__/ConversationProvider.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,8 @@ describe('ConversationProvider', () => {
const queryBatchMock = jest.fn().mockResolvedValue({
searchResults: [
{
/* mock result */
fileId: 'file-id',
fileMetadata: { appData: { content: { recipients: [] } }, payloads: [] },
},
],
});
Expand Down Expand Up @@ -127,7 +128,8 @@ describe('ConversationProvider', () => {

it('should return a valid conversation when conversationId is valid', async () => {
const getFileHeaderByUniqueIdMock = jest.fn().mockResolvedValue({
fileMetadata: { appData: { content: { recipients: [] } } },
fileId: 'file-id',
fileMetadata: { appData: { content: { recipients: [] } }, payloads: [] },
});
(getFileHeaderByUniqueId as jest.Mock) = getFileHeaderByUniqueIdMock;

Expand All @@ -149,7 +151,7 @@ describe('ConversationProvider', () => {
});

describe('uploadConversation', () => {
const conversation: NewHomebaseFile<UnifiedConversation> = {
const conversation: NewHomebaseFile<UnifiedConversation, ConversationMetadata> = {
fileMetadata: {
appData: {
uniqueId: 'unique-id',
Expand Down Expand Up @@ -198,7 +200,7 @@ describe('ConversationProvider', () => {
});

describe('updateConversation', () => {
const conversation: HomebaseFile<UnifiedConversation> = {
const conversation: HomebaseFile<UnifiedConversation, ConversationMetadata> = {
fileId: 'file-id',
fileState: 'active',
fileSystemType: 'Standard',
Expand Down Expand Up @@ -262,100 +264,4 @@ describe('ConversationProvider', () => {
expect(getConversationMock).toHaveBeenCalled();
});
});

describe('getConversationMetadata', () => {
it('should return metadata when queryBatch returns a valid response', async () => {
const queryBatchMock = jest.fn().mockResolvedValue({
searchResults: [
{
fileId: 'file-id',
fileState: 'active',
fileSystemType: 'Standard',
fileMetadata: {
created: 1727354465999,
updated: 1727354465999,
isEncrypted: true,
senderOdinId: 'frodo',
},
sharedSecretEncryptedKeyHeader: {
encryptedAesKey: new Uint8Array(32),
encryptionVersion: 1,
iv: new Uint8Array(16),
type: 2,
},
},
] as HomebaseFile<string>[],
} as QueryBatchResponse);
(queryBatch as jest.Mock) = queryBatchMock;

const getContentFromHeaderOrPayloadMock = jest
.fn()
.mockResolvedValue({ conversationId: 'valid-id' } as ConversationMetadata);
(getContentFromHeaderOrPayload as jest.Mock) = getContentFromHeaderOrPayloadMock;

const result = await getConversationMetadata(dotYouClientMock, 'valid-id');

expect(queryBatchMock).toHaveBeenCalled();
expect(result).toHaveProperty('fileMetadata');
});

it('should return null when queryBatch returns no response', async () => {
const queryBatchMock = jest.fn().mockResolvedValue(null);
(queryBatch as jest.Mock) = queryBatchMock;

const result = await getConversationMetadata(dotYouClientMock, 'valid-id');

expect(queryBatchMock).toHaveBeenCalled();
expect(result).toBeNull();
});
});

describe('uploadConversationMetadata', () => {
it('should upload metadata with valid tags', async () => {
const uploadFileMock = jest.fn().mockResolvedValue({});
(uploadFile as jest.Mock) = uploadFileMock;

const conversation = {
fileMetadata: {
appData: {
tags: ['valid-tag'],
content: { conversationId: 'valid-tag' },
},
},
} as NewHomebaseFile<ConversationMetadata>;

await uploadConversationMetadata(dotYouClientMock, conversation);

expect(uploadFileMock).toHaveBeenCalled();
});

it('should throw error when tags are missing', async () => {
const conversation = {
fileMetadata: {
appData: {
content: { conversationId: 'valid-tag' },
},
},
} as NewHomebaseFile<ConversationMetadata>;

await expect(uploadConversationMetadata(dotYouClientMock, conversation)).rejects.toThrow(
'ConversationMetadata must have tags'
);
});

it('should throw error when tags do not match conversationId', async () => {
const conversation = {
fileMetadata: {
appData: {
tags: ['invalid-tag'],
content: { conversationId: 'valid-tag' },
},
},
} as NewHomebaseFile<ConversationMetadata>;

await expect(uploadConversationMetadata(dotYouClientMock, conversation)).rejects.toThrow(
'ConversationMetadata must have a tag that matches the conversationId'
);
});
});
});

0 comments on commit 25212fe

Please sign in to comment.