import type { ReactNode } from 'react';
import type { MockedResponse } from '@apollo/client/testing';
import { MockedProvider } from '@apollo/client/testing';
import { renderHook } from '@testing-library/react';
import * as Types from '@vegaprotocol/types';
import type { TransactionEventSubscription } from './__generated__/TransactionResult';
import { TransactionEventDocument } from './__generated__/TransactionResult';
import { useTransactionResult } from './use-transaction-result';
const pubKey = 'test-pubkey';
const txHash = '0x123';
const event = {
__typename: 'TransactionResult',
partyId: pubKey,
hash: txHash,
status: true,
error: null,
};
function setup(mock: MockedResponse) {
const wrapper = ({ children }: { children: ReactNode }) => (
{children}
);
return renderHook(() => useTransactionResult(), { wrapper });
}
describe('useTransactionResult', () => {
it('resolves when a matching txhash is found', async () => {
const mock: MockedResponse = {
request: {
query: TransactionEventDocument,
variables: {
partyId: pubKey,
},
},
result: {
data: {
busEvents: [
{
type: Types.BusEventType.TransactionResult,
event,
__typename: 'BusEvent',
},
] as TransactionEventSubscription['busEvents'],
},
},
};
const { result } = setup(mock);
expect(result.current).toEqual(expect.any(Function));
const promi = result.current(txHash, pubKey);
expect(typeof promi === 'object' && typeof promi.then === 'function').toBe(
true
);
const res = await promi;
expect(res).toEqual(event);
});
});