|
1 | 1 | import * as assert from 'assert'; |
2 | 2 | import * as t from 'io-ts'; |
3 | 3 | import { TransactionRequest as TxRequestResponse } from '@bitgo/public-types'; |
4 | | -import { PrebuildAndSignTransactionParams } from '../../../src/typedRoutes/api/v2/prebuildAndSignTransaction'; |
| 4 | +import { |
| 5 | + PrebuildAndSignTransactionParams, |
| 6 | + SolVersionedTransactionData, |
| 7 | +} from '../../../src/typedRoutes/api/v2/prebuildAndSignTransaction'; |
5 | 8 | import { |
6 | 9 | FullySignedTransactionResponse, |
7 | 10 | HalfSignedAccountTransactionResponse, |
@@ -734,6 +737,59 @@ describe('PrebuildAndSignTransaction codec tests', function () { |
734 | 737 | }); |
735 | 738 | }); |
736 | 739 |
|
| 740 | + describe('SolVersionedTransactionData codec validation', function () { |
| 741 | + it('should validate v1 data with version and transactionConfig', function () { |
| 742 | + const v1Data = { |
| 743 | + versionedInstructions: [], |
| 744 | + addressLookupTables: [], |
| 745 | + staticAccountKeys: ['test'], |
| 746 | + messageHeader: { numRequiredSignatures: 1, numReadonlySignedAccounts: 0, numReadonlyUnsignedAccounts: 0 }, |
| 747 | + recentBlockhash: 'test', |
| 748 | + version: 1, |
| 749 | + transactionConfig: { |
| 750 | + computeUnitLimit: 200000, |
| 751 | + heapSize: 32768, |
| 752 | + loadedAccountsDataSizeLimit: 65536, |
| 753 | + priorityFee: 5000, |
| 754 | + }, |
| 755 | + }; |
| 756 | + const decoded = assertDecode(SolVersionedTransactionData, v1Data); |
| 757 | + assert.deepStrictEqual(decoded.version, 1); |
| 758 | + assert.deepStrictEqual(decoded.transactionConfig, v1Data.transactionConfig); |
| 759 | + }); |
| 760 | + |
| 761 | + it('should validate v1 data with null config fields', function () { |
| 762 | + const v1Data = { |
| 763 | + versionedInstructions: [], |
| 764 | + addressLookupTables: [], |
| 765 | + staticAccountKeys: ['test'], |
| 766 | + messageHeader: { numRequiredSignatures: 1, numReadonlySignedAccounts: 0, numReadonlyUnsignedAccounts: 0 }, |
| 767 | + recentBlockhash: 'test', |
| 768 | + version: 1, |
| 769 | + transactionConfig: { |
| 770 | + computeUnitLimit: null, |
| 771 | + heapSize: null, |
| 772 | + loadedAccountsDataSizeLimit: null, |
| 773 | + priorityFee: null, |
| 774 | + }, |
| 775 | + }; |
| 776 | + const decoded = assertDecode(SolVersionedTransactionData, v1Data); |
| 777 | + assert.deepStrictEqual(decoded.version, 1); |
| 778 | + }); |
| 779 | + |
| 780 | + it('should validate existing v0 data without version fields', function () { |
| 781 | + const v0Data = { |
| 782 | + versionedInstructions: [], |
| 783 | + addressLookupTables: [], |
| 784 | + staticAccountKeys: ['test'], |
| 785 | + messageHeader: { numRequiredSignatures: 1, numReadonlySignedAccounts: 0, numReadonlyUnsignedAccounts: 0 }, |
| 786 | + recentBlockhash: 'test', |
| 787 | + }; |
| 788 | + const decoded = assertDecode(SolVersionedTransactionData, v0Data); |
| 789 | + assert.strictEqual(decoded.version, undefined); |
| 790 | + }); |
| 791 | + }); |
| 792 | + |
737 | 793 | describe('Response codec validation', function () { |
738 | 794 | it('should validate FullySignedTransactionResponse', function () { |
739 | 795 | const validResponse = { |
|
0 commit comments