@@ -16,12 +16,13 @@ along with web3.js. If not, see <http://www.gnu.org/licenses/>.
16
16
*/
17
17
18
18
19
- import HttpProvider from 'web3-providers-http' ;
19
+ import HttpProvider , { HttpProviderOptions } from 'web3-providers-http' ;
20
20
import WebSocketProvider from 'web3-providers-ws' ;
21
21
import WebSocket from 'isomorphic-ws' ;
22
22
23
23
import { Web3ExternalProvider } from '../../src/web3_provider' ;
24
- import { Network , Transport } from '../../src/types' ;
24
+ import { Network , SocketOptions , Transport } from '../../src/types' ;
25
+ import { ProviderConfigOptionsError } from '../../src/errors' ;
25
26
26
27
// Mock implementation so ws doesnt have openhandle after test exits as it attempts to connects at start
27
28
jest . mock ( 'isomorphic-ws' , ( ) => {
@@ -60,11 +61,11 @@ jest.mock('isomorphic-ws', () => {
60
61
} ) ;
61
62
62
63
class MockWeb3ExternalProviderA extends Web3ExternalProvider {
63
- public constructor ( network : Network , transport : Transport , token : string ) {
64
- super ( network , transport , token , "" ) ;
64
+ public constructor ( network : Network , transport : Transport , token : string , host ?: string , providerConfigOptions ?: HttpProviderOptions | SocketOptions ) {
65
+ super ( network , transport , token , host ?? "" , providerConfigOptions ) ;
65
66
}
66
67
// eslint-disable-next-line class-methods-use-this
67
- public getRPCURL ( _network : Network , _transport : Transport , _token : string , _host = "" ) : string {
68
+ public getRPCURL ( _network : Network , _transport : Transport , _token : string , _host = "" ) : string {
68
69
let transport = "" ;
69
70
if ( _transport === Transport . HTTPS )
70
71
transport = "http://" ;
@@ -76,23 +77,85 @@ class MockWeb3ExternalProviderA extends Web3ExternalProvider {
76
77
}
77
78
78
79
describe ( 'Web3ExternalProvider' , ( ) => {
80
+ const network : Network = Network . ETH_MAINNET ;
81
+ const transport : Transport = Transport . HTTPS ;
82
+ const token = 'test-token' ;
83
+ const host = 'test-host' ;
84
+
79
85
it ( 'should initialize the provider correctly' , ( ) => {
80
- const network : Network = Network . ETH_MAINNET ;
81
- const transport : Transport = Transport . HTTPS ;
82
- const token = 'your-token' ;
83
86
84
87
const provider = new MockWeb3ExternalProviderA ( network , transport , token ) ;
85
88
86
89
expect ( provider . provider ) . toBeInstanceOf ( HttpProvider ) ;
87
90
} ) ;
88
91
89
92
it ( 'should initialize the provider with WebSocketProvider for WebSocket transport' , ( ) => {
90
- const network : Network = Network . ETH_MAINNET ;
91
- const transport : Transport = Transport . WebSocket ;
92
- const token = 'your-token' ;
93
+ const transport1 : Transport = Transport . WebSocket ;
93
94
94
- const provider = new MockWeb3ExternalProviderA ( network , transport , token ) ;
95
+ const provider = new MockWeb3ExternalProviderA ( network , transport1 , token ) ;
95
96
expect ( provider . provider ) . toBeInstanceOf ( WebSocketProvider ) ;
96
97
} ) ;
97
98
99
+ it ( 'should throw ProviderConfigOptionsError for HTTP provider with missing providerOptions' , ( ) => {
100
+ const providerConfigOptions : HttpProviderOptions | SocketOptions = { /* missing providerOptions */ } ;
101
+ expect ( ( ) => new MockWeb3ExternalProviderA ( network , transport , token , host , providerConfigOptions ) ) . toThrow ( ProviderConfigOptionsError ) ;
102
+ } ) ;
103
+
104
+ it ( 'should throw ProviderConfigOptionsError for HTTP provider with WS providerOptions' , ( ) => {
105
+ const providerConfigOptions : SocketOptions = {
106
+ socketOptions : { /* options */ } ,
107
+ reconnectOptions : { /* options */ } ,
108
+ } ;
109
+ expect ( ( ) => new MockWeb3ExternalProviderA ( network , transport , token , host , providerConfigOptions ) ) . toThrow ( ProviderConfigOptionsError ) ;
110
+ } ) ;
111
+
112
+ it ( 'should throw ProviderConfigOptionsError for WebSocket provider with missing socketOptions and reconnectOptions' , ( ) => {
113
+ const providerConfigOptions : HttpProviderOptions | SocketOptions = { /* missing socketOptions and reconnectOptions */ } ;
114
+ expect ( ( ) => new MockWeb3ExternalProviderA ( network , Transport . WebSocket , token , host , providerConfigOptions ) ) . toThrow ( ProviderConfigOptionsError ) ;
115
+ } ) ;
116
+
117
+ it ( 'should throw ProviderConfigOptionsError for WebSocket provider with HTTP options' , ( ) => {
118
+ const providerConfigOptions : HttpProviderOptions = { providerOptions : { /* options */ } } ;
119
+ expect ( ( ) => new MockWeb3ExternalProviderA ( network , Transport . WebSocket , token , host , providerConfigOptions ) ) . toThrow ( ProviderConfigOptionsError ) ;
120
+ } ) ;
121
+
122
+ it ( 'should create provider instance and not throw ProviderConfigOptionsError for WebSocket provider with missing reconnectOptions' , ( ) => {
123
+ const providerConfigOptions : SocketOptions = {
124
+ socketOptions : { /* options */ } ,
125
+ } ;
126
+
127
+ // Create an instance of the MockWeb3ExternalProviderA
128
+ const provider = new MockWeb3ExternalProviderA ( network , Transport . WebSocket , token , host , providerConfigOptions ) ;
129
+
130
+ // Expect that the provider is created successfully
131
+ expect ( provider ) . toBeInstanceOf ( MockWeb3ExternalProviderA ) ;
132
+ } ) ;
133
+
134
+ it ( 'should create provider instance and not throw ProviderConfigOptionsError for WebSocket provider with missing socketOptions' , ( ) => {
135
+ const providerConfigOptions : SocketOptions = {
136
+ reconnectOptions : { /* options */ } ,
137
+ } ;
138
+
139
+ // Create an instance of the MockWeb3ExternalProviderA
140
+ const provider = new MockWeb3ExternalProviderA ( network , Transport . WebSocket , token , host , providerConfigOptions ) ;
141
+
142
+ // Expect that the provider is created successfully
143
+ expect ( provider ) . toBeInstanceOf ( MockWeb3ExternalProviderA ) ;
144
+ } ) ;
145
+
146
+ it ( 'should create an HttpProvider with providerOptions' , ( ) => {
147
+ const providerConfigOptions : HttpProviderOptions = { providerOptions : { /* options */ } } ;
148
+ const provider = new MockWeb3ExternalProviderA ( network , transport , token , host , providerConfigOptions ) ;
149
+ expect ( provider . provider ) . toBeInstanceOf ( HttpProvider ) ;
150
+ } ) ;
151
+
152
+ it ( 'should create a WebSocketProvider with socketOptions and reconnectOptions' , ( ) => {
153
+ const providerConfigOptions : SocketOptions = {
154
+ socketOptions : { /* options */ } ,
155
+ reconnectOptions : { /* options */ } ,
156
+ } ;
157
+ const provider = new MockWeb3ExternalProviderA ( network , Transport . WebSocket , token , host , providerConfigOptions ) ;
158
+ expect ( provider . provider ) . toBeInstanceOf ( WebSocketProvider ) ;
159
+ } ) ;
98
160
} ) ;
161
+
0 commit comments