From cce15003896f07b2c8d1417056fa0d4e0bde4f01 Mon Sep 17 00:00:00 2001 From: Kevin Szuchet Date: Mon, 13 Jan 2025 18:10:16 -0300 Subject: [PATCH] test: Get Sent Frienship Requests tests --- test/mocks/friendship-request.ts | 23 ++++++ .../get-pending-friendship-requests.spec.ts | 25 ++---- .../get-sent-friendship-requests.spec.ts | 79 +++++++++++++++++++ 3 files changed, 110 insertions(+), 17 deletions(-) create mode 100644 test/mocks/friendship-request.ts create mode 100644 test/unit/logic/adapters/rpc-server/services/get-sent-friendship-requests.spec.ts diff --git a/test/mocks/friendship-request.ts b/test/mocks/friendship-request.ts new file mode 100644 index 0000000..8b5cc6a --- /dev/null +++ b/test/mocks/friendship-request.ts @@ -0,0 +1,23 @@ +import { FriendshipRequest } from '../../src/types' + +/** + * Creates a mock friendship request from given parameters. + */ +export const createMockFriendshipRequest = ( + address: string, + timestamp: string, + message?: string +): FriendshipRequest => ({ + address, + timestamp, + metadata: message ? { message } : undefined +}) + +/** + * Creates the expected mapped response for a friendship request. + */ +export const createMockExpectedFriendshipRequest = (address: string, createdAt: string, message: string) => ({ + user: { address }, + createdAt: new Date(createdAt).getTime(), + message +}) diff --git a/test/unit/logic/adapters/rpc-server/services/get-pending-friendship-requests.spec.ts b/test/unit/logic/adapters/rpc-server/services/get-pending-friendship-requests.spec.ts index c1caa3f..129098e 100644 --- a/test/unit/logic/adapters/rpc-server/services/get-pending-friendship-requests.spec.ts +++ b/test/unit/logic/adapters/rpc-server/services/get-pending-friendship-requests.spec.ts @@ -1,8 +1,12 @@ import { mockDb, mockLogs } from '../../../../../mocks/components' import { getPendingFriendshipRequestsService } from '../../../../../../src/adapters/rpc-server/services/get-pending-friendship-requests' -import { RpcServerContext, FriendshipRequest, AppComponents } from '../../../../../../src/types' +import { RpcServerContext, AppComponents } from '../../../../../../src/types' import { FriendshipRequestsResponse } from '@dcl/protocol/out-ts/decentraland/social_service_v2/social_service.gen' import { emptyRequest } from '../../../../../mocks/empty-request' +import { + createMockFriendshipRequest, + createMockExpectedFriendshipRequest +} from '../../../../../mocks/friendship-request' describe('getPendingFriendshipRequestsService', () => { let components: jest.Mocked> @@ -33,8 +37,8 @@ describe('getPendingFriendshipRequestsService', () => { $case: 'requests', requests: { requests: [ - createMockExpectedRequest('0x456', '2025-01-01T00:00:00Z', 'Hi!'), - createMockExpectedRequest('0x789', '2025-01-02T00:00:00Z', '') + createMockExpectedFriendshipRequest('0x456', '2025-01-01T00:00:00Z', 'Hi!'), + createMockExpectedFriendshipRequest('0x789', '2025-01-02T00:00:00Z', '') ] } } @@ -67,22 +71,9 @@ describe('getPendingFriendshipRequestsService', () => { response: { $case: 'requests', requests: { - requests: [createMockExpectedRequest('0x456', '2025-01-01T00:00:00Z', '')] + requests: [createMockExpectedFriendshipRequest('0x456', '2025-01-01T00:00:00Z', '')] } } }) }) - - // Helpers - const createMockFriendshipRequest = (address: string, timestamp: string, message?: string): FriendshipRequest => ({ - address, - timestamp, - metadata: message ? { message } : undefined - }) - - const createMockExpectedRequest = (address: string, createdAt: string, message: string) => ({ - user: { address }, - createdAt: new Date(createdAt).getTime(), - message - }) }) diff --git a/test/unit/logic/adapters/rpc-server/services/get-sent-friendship-requests.spec.ts b/test/unit/logic/adapters/rpc-server/services/get-sent-friendship-requests.spec.ts new file mode 100644 index 0000000..b2efd26 --- /dev/null +++ b/test/unit/logic/adapters/rpc-server/services/get-sent-friendship-requests.spec.ts @@ -0,0 +1,79 @@ +import { mockDb, mockLogs } from '../../../../../mocks/components' +import { getSentFriendshipRequestsService } from '../../../../../../src/adapters/rpc-server/services/get-sent-friendship-requests' +import { RpcServerContext, AppComponents } from '../../../../../../src/types' +import { emptyRequest } from '../../../../../mocks/empty-request' +import { + createMockFriendshipRequest, + createMockExpectedFriendshipRequest +} from '../../../../../mocks/friendship-request' +import { FriendshipRequestsResponse } from '@dcl/protocol/out-ts/decentraland/social_service_v2/social_service.gen' + +describe('getSentFriendshipRequestsService', () => { + let components: jest.Mocked> + let getSentRequests: ReturnType + + const rpcContext: RpcServerContext = { + address: '0x123', + subscribers: undefined + } + + beforeEach(() => { + components = { db: mockDb, logs: mockLogs } + getSentRequests = getSentFriendshipRequestsService({ components }) + }) + + it('should return the correct list of sent friendship requests', async () => { + const mockSentRequests = [ + createMockFriendshipRequest('0x456', '2025-01-01T00:00:00Z', 'Hello!'), + createMockFriendshipRequest('0x789', '2025-01-02T00:00:00Z') + ] + + mockDb.getSentFriendshipRequests.mockResolvedValueOnce(mockSentRequests) + + const result: FriendshipRequestsResponse = await getSentRequests(emptyRequest, rpcContext) + + expect(result).toEqual({ + response: { + $case: 'requests', + requests: { + requests: [ + createMockExpectedFriendshipRequest('0x456', '2025-01-01T00:00:00Z', 'Hello!'), + createMockExpectedFriendshipRequest('0x789', '2025-01-02T00:00:00Z', '') + ] + } + } + }) + }) + + it('should handle database errors gracefully', async () => { + mockDb.getSentFriendshipRequests.mockImplementationOnce(() => { + throw new Error('Database error') + }) + + const result: FriendshipRequestsResponse = await getSentRequests(emptyRequest, rpcContext) + + expect(result).toEqual({ + response: { + $case: 'internalServerError', + internalServerError: {} + } + }) + }) + + it('should map metadata.message to an empty string if undefined', async () => { + const mockSentRequests = [createMockFriendshipRequest('0x456', '2025-01-01T00:00:00Z')] + + mockDb.getSentFriendshipRequests.mockResolvedValueOnce(mockSentRequests) + + const result: FriendshipRequestsResponse = await getSentRequests(emptyRequest, rpcContext) + + expect(result).toEqual({ + response: { + $case: 'requests', + requests: { + requests: [createMockExpectedFriendshipRequest('0x456', '2025-01-01T00:00:00Z', '')] + } + } + }) + }) +})