From 0c8723ded25b89ef3ddb4ad5ca486cc78931f0a1 Mon Sep 17 00:00:00 2001 From: vadim-ghostman Date: Thu, 23 Jan 2025 21:18:52 +0100 Subject: [PATCH] added tests for new functionallity --- frontend/test/services/wallet.test.js | 139 +++++++++++++++++++++++++- 1 file changed, 137 insertions(+), 2 deletions(-) diff --git a/frontend/test/services/wallet.test.js b/frontend/test/services/wallet.test.js index a0090b86..c98ae749 100644 --- a/frontend/test/services/wallet.test.js +++ b/frontend/test/services/wallet.test.js @@ -1,5 +1,6 @@ import { connect } from 'starknetkit'; -import { checkForCRMToken, connectWallet, getTokenBalances, getBalances, logout } from '../../src/services/wallet'; +import { InjectedConnector } from 'starknetkit/injected'; +import { checkForCRMToken, connectWallet, getTokenBalances, getBalances, logout, getWallet, getConnectors } from '../../src/services/wallet'; import { ETH_ADDRESS, STRK_ADDRESS, USDC_ADDRESS } from '../../src/utils/constants'; jest.mock('starknetkit', () => ({ @@ -10,7 +11,7 @@ jest.mock('starknetkit', () => ({ jest.mock( 'starknetkit/injected', () => ({ - InjectedConnector: jest.fn(), + InjectedConnector: jest.fn().mockImplementation((options) => options), }), { virtual: true } ); @@ -71,6 +72,140 @@ describe('Wallet Services', () => { }); }); + describe('getConnectors', () => { + it('should return connectors array with injected connectors', () => { + const mockGetItem = jest.fn(); + Object.defineProperty(window, 'localStorage', { + value: { + getItem: mockGetItem.mockReturnValue(null), + }, + writable: true, + }); + + const connectors = getConnectors(); + + expect(connectors).toEqual([ + new InjectedConnector({ options: { id: 'argentX' } }), + new InjectedConnector({ options: { id: 'braavos' } }), + ]); + }); + + ['argentX', 'braavos'].forEach((connector) => { + it(`should return connectors array with injected connectors from local storage (${connector})`, () => { + const mockGetItem = jest.fn(); + Object.defineProperty(window, 'localStorage', { + value: { + getItem: mockGetItem.mockReturnValue(connector), + }, + writable: true, + }); + + const connectors = getConnectors(); + + expect(connectors).toEqual([ + new InjectedConnector({ options: { id: connector } }), + ]); + }) + }); + }); + + describe('getWallet', () => { + const testCases = [ + { connectorId: 'argentX', expectedAddress: '0x123' }, + { connectorId: 'braavos', expectedAddress: '0x456' }, + ]; + + testCases.forEach(({ connectorId, expectedAddress }) => { + it(`should return wallet object if wallet is connected with ${connectorId}`, async () => { + const mockStarknet = { + wallet: { + isConnected: true, + enable: jest.fn(), + selectedAddress: expectedAddress, + }, + }; + + connect.mockResolvedValue(mockStarknet); + + const mockGetItem = jest.fn().mockReturnValue(connectorId); + const mockSetItem = jest.fn(); + + Object.defineProperty(window, 'localStorage', { + value: { + getItem: mockGetItem, + }, + writable: true, + }); + + const wallet = await getWallet(); + + expect(mockGetItem).toHaveBeenCalledWith('starknetLastConnectedWallet'); + + expect(connect).toHaveBeenCalledWith( + expect.objectContaining({ + connectors: expect.arrayContaining([ + expect.objectContaining({ + options: expect.objectContaining({ + id: connectorId, + }), + }), + ]), + modalMode: 'neverAsk', + }) + ); + expect(wallet.isConnected).toBe(true); + expect(wallet.enable).toHaveBeenCalled(); + expect(wallet.selectedAddress).toBe(expectedAddress); + }); + }) + + it('should return wallet object if wallet is not choosen before', async () => { + const mockStarknet = { + wallet: { + isConnected: true, + enable: jest.fn(), + selectedAddress: '0x123', + }, + }; + + connect.mockResolvedValue(mockStarknet); + + const mockGetItem = jest.fn().mockReturnValue(null); + + Object.defineProperty(window, 'localStorage', { + value: { + getItem: mockGetItem, + }, + writable: true, + }); + + const wallet = await getWallet(); + + expect(mockGetItem).toHaveBeenCalledWith('starknetLastConnectedWallet'); + + expect(connect).toHaveBeenCalledWith( + expect.objectContaining({ + connectors: expect.arrayContaining([ + expect.objectContaining({ + options: expect.objectContaining({ + id: 'argentX' + }), + }), + expect.objectContaining({ + options: expect.objectContaining({ + id: 'braavos' + }), + }), + ]), + modalMode: 'neverAsk' + }) + ); + expect(wallet.isConnected).toBe(true); + expect(wallet.enable).toHaveBeenCalled(); + expect(wallet.selectedAddress).toBe('0x123'); + }); + }); + describe('connectWallet', () => { it('should successfully connect wallet and return address', async () => { const mockStarknet = {