UNPKG

near-protocol-rewards

Version:

A transparent, metric-based rewards system for NEAR projects

64 lines (63 loc) 2.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const globals_1 = require("@jest/globals"); const near_wallet_collector_1 = require("../../src/collectors/near-wallet-collector"); const wallet_rewards_1 = require("../../src/calculator/wallet-rewards"); const logger_1 = require("../../src/utils/logger"); // Mock the logger globals_1.jest.mock('../../src/utils/logger', () => ({ ConsoleLogger: globals_1.jest.fn().mockReturnValue({ info: globals_1.jest.fn(), error: globals_1.jest.fn(), debug: globals_1.jest.fn(), warn: globals_1.jest.fn() }) })); // Mock NearWalletCollector globals_1.jest.mock('../../src/collectors/near-wallet-collector', () => ({ NearWalletCollector: globals_1.jest.fn().mockImplementation(() => ({ collectActivities: globals_1.jest.fn(() => Promise.resolve([ { details: { actions: [{ kind: 'FunctionCall' }], receiverId: 'contract1.near' } }, { details: { actions: [{ kind: 'Transfer' }], receiverId: 'contract2.near' } }, { details: { actions: [{ kind: 'FunctionCall' }], receiverId: 'contract1.near' } } ])) })) })); // Mock OnChainRewardsCalculator globals_1.jest.mock('../../src/calculator/wallet-rewards', () => ({ OnChainRewardsCalculator: globals_1.jest.fn().mockImplementation(() => ({ calculate: globals_1.jest.fn().mockReturnValue({ totalScore: 40, breakdown: { transactionVolume: 15, contractInteractions: 20, uniqueWallets: 5 } }) })) })); // Test suite for on-chain rewards calculation describe('On-Chain Rewards Calculation', () => { let logger; beforeEach(() => { globals_1.jest.clearAllMocks(); logger = new logger_1.ConsoleLogger(); }); it('should calculate on-chain rewards correctly with mock data', async () => { const collector = new near_wallet_collector_1.NearWalletCollector('test.near', 'testnet'); const activities = await collector.collectActivities(); expect(activities).toHaveLength(3); expect(activities[0].details.receiverId).toBe('contract1.near'); const onChainMetrics = { transactionVolume: activities.length, contractInteractions: activities.filter((a) => a.details.actions.some((action) => action.kind === 'FunctionCall')).length, uniqueWallets: new Set(activities.map((a) => a.details.receiverId)).size }; const onChainCalculator = new wallet_rewards_1.OnChainRewardsCalculator(onChainMetrics); const onChainRewards = onChainCalculator.calculate(); expect(onChainRewards.totalScore).toBe(40); expect(onChainRewards.breakdown.transactionVolume).toBe(15); expect(onChainRewards.breakdown.contractInteractions).toBe(20); expect(onChainRewards.breakdown.uniqueWallets).toBe(5); }); });