near-protocol-rewards
Version:
A transparent, metric-based rewards system for NEAR projects
64 lines (63 loc) • 2.95 kB
JavaScript
;
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);
});
});