@uniswap/smart-wallet-sdk
Version:
⚒️ An SDK for building applications with smart wallets on Uniswap
117 lines • 7.35 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const viem_1 = require("viem");
const batchedCallPlanner_1 = require("./batchedCallPlanner");
const callPlanner_1 = require("./callPlanner");
const testConstants_1 = require("./testConstants");
describe('BatchedCallPlanner', () => {
describe('constructor', () => {
it('should initialize with the provided CallPlanner and default revertOnFailure as false', () => {
const callPlanner = new callPlanner_1.CallPlanner();
const batchedPlanner = new batchedCallPlanner_1.BatchedCallPlanner(callPlanner);
expect(batchedPlanner.callPlanner).toBe(callPlanner);
expect(batchedPlanner.revertOnFailure).toBe(true);
});
it('should initialize with the provided CallPlanner and revertOnFailure value', () => {
const callPlanner = new callPlanner_1.CallPlanner();
const batchedPlanner = new batchedCallPlanner_1.BatchedCallPlanner(callPlanner, false);
expect(batchedPlanner.callPlanner).toBe(callPlanner);
expect(batchedPlanner.revertOnFailure).toBe(false);
});
});
describe('value', () => {
it('should return the value from the underlying callPlanner', () => {
const callPlanner = new callPlanner_1.CallPlanner([
{ to: testConstants_1.TEST_ADDRESS_1, data: testConstants_1.TEST_DATA_1, value: testConstants_1.TEST_VALUE_1 },
{ to: testConstants_1.TEST_ADDRESS_1, data: testConstants_1.TEST_DATA_2, value: testConstants_1.TEST_VALUE_2 }
]);
const batchedPlanner = new batchedCallPlanner_1.BatchedCallPlanner(callPlanner);
expect(batchedPlanner.value.toString()).toBe('300');
});
it('should return 0 when no calls are present in the callPlanner', () => {
const callPlanner = new callPlanner_1.CallPlanner();
const batchedPlanner = new batchedCallPlanner_1.BatchedCallPlanner(callPlanner);
expect(batchedPlanner.value.toString()).toBe('0');
});
});
describe('add', () => {
it('should add a new call to the underlying callPlanner', () => {
const callPlanner = new callPlanner_1.CallPlanner();
const batchedPlanner = new batchedCallPlanner_1.BatchedCallPlanner(callPlanner);
batchedPlanner.add(testConstants_1.TEST_ADDRESS_1, testConstants_1.TEST_VALUE_1, testConstants_1.TEST_DATA_1);
expect(callPlanner.calls).toEqual([{ to: testConstants_1.TEST_ADDRESS_1, data: testConstants_1.TEST_DATA_1, value: testConstants_1.TEST_VALUE_1 }]);
});
it('should return the batchedPlanner instance for chaining', () => {
const callPlanner = new callPlanner_1.CallPlanner();
const batchedPlanner = new batchedCallPlanner_1.BatchedCallPlanner(callPlanner);
const result = batchedPlanner.add(testConstants_1.TEST_ADDRESS_1, testConstants_1.TEST_VALUE_1, testConstants_1.TEST_DATA_1);
expect(result).toBe(batchedPlanner);
});
it('should allow chaining multiple add calls', () => {
const callPlanner = new callPlanner_1.CallPlanner();
const batchedPlanner = new batchedCallPlanner_1.BatchedCallPlanner(callPlanner);
batchedPlanner
.add(testConstants_1.TEST_ADDRESS_1, testConstants_1.TEST_VALUE_1, testConstants_1.TEST_DATA_1)
.add(testConstants_1.TEST_ADDRESS_1, testConstants_1.TEST_VALUE_2, testConstants_1.TEST_DATA_2);
expect(callPlanner.calls).toEqual([
{ to: testConstants_1.TEST_ADDRESS_1, value: testConstants_1.TEST_VALUE_1, data: testConstants_1.TEST_DATA_1 },
{ to: testConstants_1.TEST_ADDRESS_1, value: testConstants_1.TEST_VALUE_2, data: testConstants_1.TEST_DATA_2 }
]);
});
});
describe('encode', () => {
it('should correctly abi encode the batch call with revertOnFailure=false', () => {
const callPlanner = new callPlanner_1.CallPlanner();
callPlanner.add(testConstants_1.TEST_ADDRESS_1, testConstants_1.TEST_VALUE_1, testConstants_1.TEST_DATA_1);
const batchedPlanner = new batchedCallPlanner_1.BatchedCallPlanner(callPlanner);
const encoded = batchedPlanner.encode();
// decode the encoded data
const decoded = (0, viem_1.decodeAbiParameters)(batchedCallPlanner_1.BATCHED_CALL_ABI_PARAMS, encoded);
expect(decoded).toEqual([{
calls: [{ to: testConstants_1.TEST_ADDRESS_1, value: testConstants_1.TEST_VALUE_1, data: testConstants_1.TEST_DATA_1 }],
revertOnFailure: true
}]);
});
it('should correctly abi encode the batch call with revertOnFailure=false', () => {
const callPlanner = new callPlanner_1.CallPlanner();
callPlanner.add(testConstants_1.TEST_ADDRESS_1, testConstants_1.TEST_VALUE_1, testConstants_1.TEST_DATA_1);
const batchedPlanner = new batchedCallPlanner_1.BatchedCallPlanner(callPlanner, false);
const encoded = batchedPlanner.encode();
// decode the encoded data
const decoded = (0, viem_1.decodeAbiParameters)(batchedCallPlanner_1.BATCHED_CALL_ABI_PARAMS, encoded);
expect(decoded).toEqual([{
calls: [{ to: testConstants_1.TEST_ADDRESS_1, value: testConstants_1.TEST_VALUE_1, data: testConstants_1.TEST_DATA_1 }],
revertOnFailure: false
}]);
});
it('should encode multiple calls correctly', () => {
const callPlanner = new callPlanner_1.CallPlanner();
callPlanner
.add(testConstants_1.TEST_ADDRESS_1, testConstants_1.TEST_VALUE_1, testConstants_1.TEST_DATA_1)
.add(testConstants_1.TEST_ADDRESS_1, testConstants_1.TEST_VALUE_2, testConstants_1.TEST_DATA_2);
const batchedPlanner = new batchedCallPlanner_1.BatchedCallPlanner(callPlanner);
const encoded = batchedPlanner.encode();
// decode the encoded data
const decoded = (0, viem_1.decodeAbiParameters)(batchedCallPlanner_1.BATCHED_CALL_ABI_PARAMS, encoded);
expect(decoded).toEqual([{
calls: [
{ to: testConstants_1.TEST_ADDRESS_1, value: testConstants_1.TEST_VALUE_1, data: testConstants_1.TEST_DATA_1 },
{ to: testConstants_1.TEST_ADDRESS_1, value: testConstants_1.TEST_VALUE_2, data: testConstants_1.TEST_DATA_2 }
],
revertOnFailure: true
}]);
});
it('should encode an empty calls array', () => {
const callPlanner = new callPlanner_1.CallPlanner();
const batchedPlanner = new batchedCallPlanner_1.BatchedCallPlanner(callPlanner);
const encoded = batchedPlanner.encode();
// decode the encoded data
const decoded = (0, viem_1.decodeAbiParameters)(batchedCallPlanner_1.BATCHED_CALL_ABI_PARAMS, encoded);
expect(decoded).toEqual([{
calls: [],
revertOnFailure: true
}]);
});
});
});
//# sourceMappingURL=batchedCallPlanner.test.js.map