11import { EvoSDK } from '../../dist/evo-sdk.module.js' ;
22
3+ // Test addresses (RFC 6761 reserved test domain - no network calls in unit tests)
4+ const TEST_ADDRESS_1 = 'https://node-1.test:1443' ;
5+ const TEST_ADDRESS_2 = 'https://node-2.test:1443' ;
6+ const TEST_ADDRESS_3 = 'https://node-3.test:1443' ;
7+ const TEST_ADDRESSES = [ TEST_ADDRESS_1 , TEST_ADDRESS_2 , TEST_ADDRESS_3 ] ;
8+
39describe ( 'EvoSDK' , ( ) => {
410 it ( 'exposes constructor and factories' , ( ) => {
511 expect ( EvoSDK ) . to . be . a ( 'function' ) ;
612 expect ( EvoSDK . testnet ) . to . be . a ( 'function' ) ;
713 expect ( EvoSDK . mainnet ) . to . be . a ( 'function' ) ;
814 expect ( EvoSDK . testnetTrusted ) . to . be . a ( 'function' ) ;
915 expect ( EvoSDK . mainnetTrusted ) . to . be . a ( 'function' ) ;
16+ expect ( EvoSDK . withAddresses ) . to . be . a ( 'function' ) ;
1017 } ) ;
1118
1219 it ( 'fromWasm() marks instance as connected' , ( ) => {
@@ -15,4 +22,194 @@ describe('EvoSDK', () => {
1522 expect ( sdk . isConnected ) . to . equal ( true ) ;
1623 expect ( sdk . wasm ) . to . equal ( wasmStub ) ;
1724 } ) ;
25+
26+ describe ( 'EvoSDK.withAddresses()' , ( ) => {
27+ it ( 'creates SDK instance with specific addresses' , ( ) => {
28+ const sdk = EvoSDK . withAddresses ( [ TEST_ADDRESS_1 ] , 'testnet' ) ;
29+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
30+ expect ( sdk . options . network ) . to . equal ( 'testnet' ) ;
31+ expect ( sdk . isConnected ) . to . equal ( false ) ;
32+ } ) ;
33+
34+ it ( 'defaults to testnet when network not specified' , ( ) => {
35+ const sdk = EvoSDK . withAddresses ( [ TEST_ADDRESS_1 ] ) ;
36+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
37+ expect ( sdk . options . network ) . to . equal ( 'testnet' ) ;
38+ expect ( sdk . isConnected ) . to . equal ( false ) ;
39+ } ) ;
40+
41+ it ( 'accepts mainnet network' , ( ) => {
42+ const sdk = EvoSDK . withAddresses ( [ TEST_ADDRESS_2 ] , 'mainnet' ) ;
43+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
44+ expect ( sdk . options . network ) . to . equal ( 'mainnet' ) ;
45+ expect ( sdk . isConnected ) . to . equal ( false ) ;
46+ } ) ;
47+
48+ it ( 'accepts multiple addresses' , ( ) => {
49+ const sdk = EvoSDK . withAddresses ( TEST_ADDRESSES , 'testnet' ) ;
50+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
51+ expect ( sdk . options . network ) . to . equal ( 'testnet' ) ;
52+ expect ( sdk . options . addresses ) . to . deep . equal ( TEST_ADDRESSES ) ;
53+ } ) ;
54+
55+ it ( 'accepts additional connection options' , ( ) => {
56+ const sdk = EvoSDK . withAddresses (
57+ [ TEST_ADDRESS_1 ] ,
58+ 'testnet' ,
59+ {
60+ version : 1 ,
61+ proofs : true ,
62+ logs : 'info' ,
63+ settings : {
64+ connectTimeoutMs : 10000 ,
65+ timeoutMs : 30000 ,
66+ retries : 3 ,
67+ banFailedAddress : false ,
68+ } ,
69+ } ,
70+ ) ;
71+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
72+ expect ( sdk . options . network ) . to . equal ( 'testnet' ) ;
73+ expect ( sdk . options . trusted ) . to . be . false ( ) ;
74+ expect ( sdk . options . addresses ) . to . deep . equal ( [ TEST_ADDRESS_1 ] ) ;
75+ expect ( sdk . options . version ) . to . equal ( 1 ) ;
76+ expect ( sdk . options . proofs ) . to . be . true ( ) ;
77+ expect ( sdk . options . logs ) . to . equal ( 'info' ) ;
78+ expect ( sdk . options . settings ) . to . exist ( ) ;
79+ expect ( sdk . options . settings . connectTimeoutMs ) . to . equal ( 10000 ) ;
80+ expect ( sdk . options . settings . timeoutMs ) . to . equal ( 30000 ) ;
81+ expect ( sdk . options . settings . retries ) . to . equal ( 3 ) ;
82+ expect ( sdk . options . settings . banFailedAddress ) . to . be . false ( ) ;
83+ } ) ;
84+ } ) ;
85+
86+ describe ( 'constructor with addresses option' , ( ) => {
87+ it ( 'accepts addresses in options' , ( ) => {
88+ const sdk = new EvoSDK ( {
89+ addresses : [ TEST_ADDRESS_1 ] ,
90+ network : 'testnet' ,
91+ } ) ;
92+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
93+ expect ( sdk . options . network ) . to . equal ( 'testnet' ) ;
94+ expect ( sdk . options . trusted ) . to . be . false ( ) ;
95+ expect ( sdk . isConnected ) . to . equal ( false ) ;
96+ } ) ;
97+
98+ it ( 'works with testnet default' , ( ) => {
99+ const sdk = new EvoSDK ( {
100+ addresses : [ TEST_ADDRESS_1 ] ,
101+ } ) ;
102+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
103+ expect ( sdk . options . network ) . to . equal ( 'testnet' ) ;
104+ expect ( sdk . options . trusted ) . to . be . false ( ) ;
105+ } ) ;
106+
107+ it ( 'works with mainnet' , ( ) => {
108+ const sdk = new EvoSDK ( {
109+ addresses : [ TEST_ADDRESS_2 ] ,
110+ network : 'mainnet' ,
111+ } ) ;
112+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
113+ expect ( sdk . options . network ) . to . equal ( 'mainnet' ) ;
114+ expect ( sdk . options . trusted ) . to . be . false ( ) ;
115+ } ) ;
116+
117+ it ( 'combines addresses with other options' , ( ) => {
118+ const sdk = new EvoSDK ( {
119+ addresses : [ TEST_ADDRESS_1 ] ,
120+ network : 'testnet' ,
121+ version : 1 ,
122+ proofs : true ,
123+ logs : 'debug' ,
124+ settings : {
125+ connectTimeoutMs : 5000 ,
126+ timeoutMs : 15000 ,
127+ retries : 5 ,
128+ banFailedAddress : true ,
129+ } ,
130+ } ) ;
131+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
132+ expect ( sdk . options . network ) . to . equal ( 'testnet' ) ;
133+ expect ( sdk . options . trusted ) . to . be . false ( ) ;
134+ expect ( sdk . options . addresses ) . to . deep . equal ( [ TEST_ADDRESS_1 ] ) ;
135+ expect ( sdk . options . version ) . to . equal ( 1 ) ;
136+ expect ( sdk . options . proofs ) . to . be . true ( ) ;
137+ expect ( sdk . options . logs ) . to . equal ( 'debug' ) ;
138+ expect ( sdk . options . settings ) . to . exist ( ) ;
139+ expect ( sdk . options . settings . connectTimeoutMs ) . to . equal ( 5000 ) ;
140+ expect ( sdk . options . settings . timeoutMs ) . to . equal ( 15000 ) ;
141+ expect ( sdk . options . settings . retries ) . to . equal ( 5 ) ;
142+ expect ( sdk . options . settings . banFailedAddress ) . to . be . true ( ) ;
143+ } ) ;
144+
145+ it ( 'prioritizes addresses over network presets when both provided' , ( ) => {
146+ // When addresses are provided, they should be used instead of default network addresses
147+ const sdk = new EvoSDK ( {
148+ addresses : [ TEST_ADDRESS_3 ] ,
149+ network : 'testnet' ,
150+ trusted : true ,
151+ } ) ;
152+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
153+ expect ( sdk . options . network ) . to . equal ( 'testnet' ) ;
154+ expect ( sdk . options . addresses ) . to . deep . equal ( [ TEST_ADDRESS_3 ] ) ;
155+ expect ( sdk . options . trusted ) . to . be . true ( ) ;
156+ } ) ;
157+
158+ it ( 'withAddresses() and constructor with addresses produce equivalent SDKs' , ( ) => {
159+ const addresses = [ TEST_ADDRESS_1 ] ;
160+ const options = { version : 1 , proofs : true } ;
161+
162+ const sdk1 = EvoSDK . withAddresses ( addresses , 'testnet' , options ) ;
163+ const sdk2 = new EvoSDK ( { addresses, network : 'testnet' , ...options } ) ;
164+
165+ expect ( sdk1 . options . addresses ) . to . deep . equal ( sdk2 . options . addresses ) ;
166+ expect ( sdk1 . options . network ) . to . equal ( sdk2 . options . network ) ;
167+ expect ( sdk1 . options . version ) . to . equal ( sdk2 . options . version ) ;
168+ expect ( sdk1 . options . proofs ) . to . equal ( sdk2 . options . proofs ) ;
169+ } ) ;
170+ } ) ;
171+
172+ describe ( 'factory methods for standard configurations' , ( ) => {
173+ it ( 'testnet() creates testnet instance' , ( ) => {
174+ const sdk = EvoSDK . testnet ( ) ;
175+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
176+ expect ( sdk . options . network ) . to . equal ( 'testnet' ) ;
177+ expect ( sdk . options . trusted ) . to . be . false ( ) ;
178+ expect ( sdk . options . addresses ) . to . be . undefined ( ) ;
179+ expect ( sdk . isConnected ) . to . equal ( false ) ;
180+ } ) ;
181+
182+ it ( 'mainnet() creates mainnet instance' , ( ) => {
183+ const sdk = EvoSDK . mainnet ( ) ;
184+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
185+ expect ( sdk . options . network ) . to . equal ( 'mainnet' ) ;
186+ expect ( sdk . options . trusted ) . to . be . false ( ) ;
187+ expect ( sdk . isConnected ) . to . equal ( false ) ;
188+ } ) ;
189+
190+ it ( 'testnetTrusted() creates trusted testnet instance' , ( ) => {
191+ const sdk = EvoSDK . testnetTrusted ( ) ;
192+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
193+ expect ( sdk . options . network ) . to . equal ( 'testnet' ) ;
194+ expect ( sdk . options . trusted ) . to . be . true ( ) ;
195+ expect ( sdk . isConnected ) . to . equal ( false ) ;
196+ } ) ;
197+
198+ it ( 'mainnetTrusted() creates trusted mainnet instance' , ( ) => {
199+ const sdk = EvoSDK . mainnetTrusted ( ) ;
200+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
201+ expect ( sdk . options . network ) . to . equal ( 'mainnet' ) ;
202+ expect ( sdk . options . trusted ) . to . be . true ( ) ;
203+ expect ( sdk . isConnected ) . to . equal ( false ) ;
204+ } ) ;
205+
206+ it ( 'factory methods accept connection options' , ( ) => {
207+ const sdk = EvoSDK . testnet ( {
208+ version : 1 ,
209+ proofs : false ,
210+ logs : 'warn' ,
211+ } ) ;
212+ expect ( sdk ) . to . be . instanceof ( EvoSDK ) ;
213+ } ) ;
214+ } ) ;
18215} ) ;
0 commit comments