mirror of
https://github.com/benjamin-wilson/public-pool.git
synced 2026-09-29 17:15:03 -07:00
Add payout modes and production switchover schema
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
import { AppController } from './app.controller';
|
||||
|
||||
describe('AppController', () => {
|
||||
const createController = (overrides: {
|
||||
cacheManager?: any;
|
||||
blocksService?: any;
|
||||
addressSettingsService?: any;
|
||||
userAgentReportService?: any;
|
||||
stratumV2Service?: any;
|
||||
redisMessagingService?: any;
|
||||
} = {}) => {
|
||||
return new AppController(
|
||||
overrides.cacheManager ?? {
|
||||
get: jest.fn().mockResolvedValue(null),
|
||||
set: jest.fn().mockResolvedValue(undefined),
|
||||
},
|
||||
{} as any,
|
||||
{} as any,
|
||||
overrides.blocksService ?? {
|
||||
getFoundBlocks: jest.fn().mockResolvedValue([]),
|
||||
},
|
||||
{} as any,
|
||||
overrides.addressSettingsService ?? {
|
||||
getHighScores: jest.fn().mockResolvedValue([]),
|
||||
},
|
||||
overrides.userAgentReportService ?? {
|
||||
getReport: jest.fn().mockResolvedValue([]),
|
||||
},
|
||||
overrides.stratumV2Service ?? {
|
||||
getPoolAuthorityPublicKey: jest.fn().mockResolvedValue({
|
||||
publicKey: '',
|
||||
configured: false,
|
||||
}),
|
||||
},
|
||||
{} as any,
|
||||
overrides.redisMessagingService ?? {
|
||||
getJsonCache: jest.fn().mockResolvedValue(null),
|
||||
setJsonCache: jest.fn().mockResolvedValue(undefined),
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
it('refreshes found blocks even when site info is served from cache', async () => {
|
||||
const cachedInfo = {
|
||||
blockData: [{ height: 1 }],
|
||||
userAgents: [],
|
||||
highScores: [],
|
||||
sv2: {
|
||||
poolAuthorityPublicKey: '',
|
||||
authorityKeyConfigured: false,
|
||||
},
|
||||
uptime: new Date('2026-01-01T00:00:00.000Z'),
|
||||
};
|
||||
const freshBlocks = [{ height: 2 }];
|
||||
const cacheManager = {
|
||||
get: jest.fn().mockResolvedValue(cachedInfo),
|
||||
set: jest.fn().mockResolvedValue(undefined),
|
||||
};
|
||||
const blocksService = {
|
||||
getFoundBlocks: jest.fn().mockResolvedValue(freshBlocks),
|
||||
};
|
||||
const controller = createController({
|
||||
cacheManager,
|
||||
blocksService,
|
||||
});
|
||||
|
||||
await expect(controller.info()).resolves.toEqual({
|
||||
...cachedInfo,
|
||||
blockData: freshBlocks,
|
||||
});
|
||||
expect(blocksService.getFoundBlocks).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('keeps small user-agent reports expanded so local protocol workers are visible', async () => {
|
||||
const controller = createController({
|
||||
userAgentReportService: {
|
||||
getReport: jest.fn().mockResolvedValue([
|
||||
{
|
||||
userAgent: 'unknown/sv2',
|
||||
count: '1',
|
||||
bestDifficulty: 100,
|
||||
totalHashRate: '0',
|
||||
},
|
||||
{
|
||||
userAgent: 'v0.4.1-beta/datum',
|
||||
count: '1',
|
||||
bestDifficulty: 0,
|
||||
totalHashRate: '0',
|
||||
},
|
||||
]),
|
||||
},
|
||||
});
|
||||
|
||||
await expect(controller.info()).resolves.toMatchObject({
|
||||
userAgents: [
|
||||
{
|
||||
userAgent: 'unknown/sv2',
|
||||
count: '1',
|
||||
bestDifficulty: 100,
|
||||
totalHashRate: '0',
|
||||
},
|
||||
{
|
||||
userAgent: 'v0.4.1-beta/datum',
|
||||
count: '1',
|
||||
bestDifficulty: 0,
|
||||
totalHashRate: '0',
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it('groups small user-agent rows only when the report is large', () => {
|
||||
const controller = createController() as any;
|
||||
const report = Array.from({ length: 21 }, (_, index) => ({
|
||||
userAgent: `small-${index}`,
|
||||
count: '1',
|
||||
bestDifficulty: index,
|
||||
totalHashRate: '0',
|
||||
}));
|
||||
|
||||
expect(controller.groupSmallUserAgents(report)).toEqual([
|
||||
{
|
||||
userAgent: 'Other',
|
||||
count: '21',
|
||||
bestDifficulty: 20,
|
||||
totalHashRate: '0',
|
||||
},
|
||||
]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user