/** * @jest-environment jsdom */ import YieldXyz from './yieldxyz' import Mpc from '../../mpc' import portalMock from '../../__mocks/portal/portal' import { mockHost } from '../../__mocks/constants' describe('YieldXyz getValidators', () => { let mpc: Mpc let yieldXyz: YieldXyz beforeEach(() => { jest.clearAllMocks() portalMock.host = mockHost mpc = new Mpc({ portal: portalMock }) yieldXyz = new YieldXyz({ mpc }) }) it('returns validators from data.validators', async () => { const v = [{ address: '0x1', name: 'v1' }] jest.spyOn(mpc, 'getYieldXyzValidators').mockResolvedValue({ data: { validators: v }, }) await expect(yieldXyz.getValidators('y1')).resolves.toEqual(v) }) it('falls back to data.rawResponse.validators', async () => { const v = [{ address: '0x2' }] jest.spyOn(mpc, 'getYieldXyzValidators').mockResolvedValue({ data: { rawResponse: { validators: v } }, }) await expect(yieldXyz.getValidators('y1')).resolves.toEqual(v) }) it('falls back to data.rawResponse.items', async () => { const v = [{ address: '0x3' }] jest.spyOn(mpc, 'getYieldXyzValidators').mockResolvedValue({ data: { rawResponse: { items: v, total: 1 } }, }) await expect(yieldXyz.getValidators('y1')).resolves.toEqual(v) }) it('returns empty array when validators is empty (valid)', async () => { jest.spyOn(mpc, 'getYieldXyzValidators').mockResolvedValue({ data: { validators: [] }, }) await expect(yieldXyz.getValidators('y1')).resolves.toEqual([]) }) it('throws on res.error', async () => { jest.spyOn(mpc, 'getYieldXyzValidators').mockResolvedValue({ error: 'not found', data: { validators: [{ address: 'x' }] }, }) await expect(yieldXyz.getValidators('y1')).rejects.toThrow( '[YieldXyz] getValidators failed: not found', ) }) it('throws when no validators array in response', async () => { jest.spyOn(mpc, 'getYieldXyzValidators').mockResolvedValue({ data: { rawResponse: {} }, }) await expect(yieldXyz.getValidators('y1')).rejects.toThrow( 'No validators in response', ) }) })