172 lines
5.9 KiB
TypeScript
172 lines
5.9 KiB
TypeScript
import { useVegaTransactionStore } from './use-vega-transaction-store';
|
|
import { VegaTxStatus } from './use-vega-transaction';
|
|
import type { VegaStoredTxState } from './use-vega-transaction-store';
|
|
import type {
|
|
OrderAmendmentBody,
|
|
OrderCancellationBody,
|
|
WithdrawSubmissionBody,
|
|
} from './connectors/vega-connector';
|
|
import {
|
|
OrderStatus,
|
|
OrderTimeInForce,
|
|
OrderType,
|
|
Side,
|
|
} from '@vegaprotocol/types';
|
|
|
|
jest.mock('./utils', () => ({
|
|
...jest.requireActual('./utils'),
|
|
determineId: jest.fn((v) => v),
|
|
}));
|
|
|
|
describe('useVegaTransactionStore', () => {
|
|
const orderCancellation: OrderCancellationBody = { orderCancellation: {} };
|
|
const withdrawSubmission: WithdrawSubmissionBody = {
|
|
withdrawSubmission: {
|
|
amount: 'amount',
|
|
asset: 'asset',
|
|
ext: {
|
|
erc20: {
|
|
receiverAddress: 'receiverAddress',
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const orderAmendment: OrderAmendmentBody = {
|
|
orderAmendment: {
|
|
orderId:
|
|
'6a4fcd0ba478df2f284ef5f6d3c64a478cb8043d3afe36f66f92c0ed92631e64',
|
|
marketId:
|
|
'3aa2a828687cc3d59e92445d294891cbbd40e2165bbfb15674158ef5d4e8848d',
|
|
price: '1122',
|
|
timeInForce: OrderTimeInForce.TIME_IN_FORCE_GTC,
|
|
sizeDelta: 0,
|
|
},
|
|
};
|
|
|
|
const originalOrder = {
|
|
type: OrderType.TYPE_LIMIT,
|
|
id: '6902dea1fa01f0b98cceb382cb9c95df244747fa27ba591de084cdd876d2f7c2',
|
|
status: OrderStatus.STATUS_ACTIVE,
|
|
createdAt: '2023-03-01T14:08:13.48478Z',
|
|
size: '12',
|
|
price: '1125',
|
|
timeInForce: OrderTimeInForce.TIME_IN_FORCE_GTC,
|
|
expiresAt: null,
|
|
side: Side.SIDE_BUY,
|
|
marketId:
|
|
'3aa2a828687cc3d59e92445d294891cbbd40e2165bbfb15674158ef5d4e8848d',
|
|
};
|
|
|
|
const processedTransactionUpdate = {
|
|
status: VegaTxStatus.Pending,
|
|
txHash: 'txHash',
|
|
signature: 'signature',
|
|
};
|
|
const transactionResult = {
|
|
hash: processedTransactionUpdate.txHash,
|
|
} as unknown as NonNullable<VegaStoredTxState['transactionResult']>;
|
|
const withdrawal = {
|
|
id: 'signature',
|
|
} as unknown as NonNullable<VegaStoredTxState['withdrawal']>;
|
|
const withdrawalApproval = {} as unknown as NonNullable<
|
|
VegaStoredTxState['withdrawalApproval']
|
|
>;
|
|
it('creates transaction with default values', () => {
|
|
useVegaTransactionStore.getState().create(orderCancellation);
|
|
const transaction = useVegaTransactionStore.getState().transactions[0];
|
|
expect(transaction?.createdAt).toBeTruthy();
|
|
expect(transaction?.status).toEqual(VegaTxStatus.Requested);
|
|
expect(transaction?.body).toEqual(orderCancellation);
|
|
expect(transaction?.dialogOpen).toEqual(true);
|
|
});
|
|
it('updates transaction by index/id', () => {
|
|
useVegaTransactionStore.getState().create(orderCancellation);
|
|
useVegaTransactionStore.getState().create(orderCancellation);
|
|
useVegaTransactionStore.getState().create(orderCancellation);
|
|
const transaction = useVegaTransactionStore.getState().transactions[1];
|
|
useVegaTransactionStore
|
|
.getState()
|
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
.update(transaction!.id, { status: VegaTxStatus.Pending });
|
|
expect(
|
|
useVegaTransactionStore.getState().transactions.map((t) => t?.status)
|
|
).toEqual([
|
|
VegaTxStatus.Requested,
|
|
VegaTxStatus.Pending,
|
|
VegaTxStatus.Requested,
|
|
]);
|
|
});
|
|
|
|
it('updates an order with order amendment', () => {
|
|
useVegaTransactionStore.getState().create(orderAmendment, originalOrder);
|
|
useVegaTransactionStore.getState().create(orderAmendment, originalOrder);
|
|
useVegaTransactionStore.getState().create(orderAmendment, originalOrder);
|
|
const transaction = useVegaTransactionStore.getState().transactions[1];
|
|
useVegaTransactionStore
|
|
.getState()
|
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
.update(transaction!.id, { status: VegaTxStatus.Pending });
|
|
expect(
|
|
useVegaTransactionStore.getState().transactions.map((t) => t?.status)
|
|
).toEqual([
|
|
VegaTxStatus.Requested,
|
|
VegaTxStatus.Pending,
|
|
VegaTxStatus.Requested,
|
|
]);
|
|
expect(
|
|
useVegaTransactionStore
|
|
.getState()
|
|
.transactions.map((t) => t?.order?.price)
|
|
).toEqual(['1125', '1125', '1125']);
|
|
|
|
const result = {
|
|
orderAmendment: {
|
|
marketId:
|
|
'3aa2a828687cc3d59e92445d294891cbbd40e2165bbfb15674158ef5d4e8848d',
|
|
orderId:
|
|
'6a4fcd0ba478df2f284ef5f6d3c64a478cb8043d3afe36f66f92c0ed92631e64',
|
|
price: '1122',
|
|
sizeDelta: 0,
|
|
timeInForce: OrderTimeInForce.TIME_IN_FORCE_GTC,
|
|
},
|
|
};
|
|
expect(
|
|
useVegaTransactionStore.getState().transactions.map((t) => t?.body)
|
|
).toStrictEqual([result, result, result]);
|
|
});
|
|
|
|
it('sets dialogOpen to false on dismiss', () => {
|
|
useVegaTransactionStore.getState().create(orderCancellation);
|
|
useVegaTransactionStore.getState().dismiss(0);
|
|
expect(
|
|
useVegaTransactionStore.getState().transactions[0]?.dialogOpen
|
|
).toEqual(false);
|
|
});
|
|
|
|
it('updates transaction result', () => {
|
|
useVegaTransactionStore.getState().create(withdrawSubmission);
|
|
useVegaTransactionStore.getState().update(0, processedTransactionUpdate);
|
|
useVegaTransactionStore
|
|
.getState()
|
|
.updateTransactionResult(transactionResult);
|
|
expect(
|
|
useVegaTransactionStore.getState().transactions[0]?.transactionResult
|
|
).toEqual(transactionResult);
|
|
});
|
|
|
|
it('updates withdrawal', () => {
|
|
useVegaTransactionStore.getState().create(withdrawSubmission);
|
|
useVegaTransactionStore.getState().update(0, processedTransactionUpdate);
|
|
useVegaTransactionStore
|
|
.getState()
|
|
.updateTransactionResult(transactionResult);
|
|
useVegaTransactionStore
|
|
.getState()
|
|
.updateWithdrawal(withdrawal, withdrawalApproval);
|
|
const transaction = useVegaTransactionStore.getState().transactions[0];
|
|
expect(transaction?.withdrawalApproval).toEqual(withdrawalApproval);
|
|
expect(transaction?.withdrawal).toEqual(withdrawal);
|
|
});
|
|
});
|