@@ -60,6 +60,64 @@ jest.mock('@aws-amplify/core', () => {
60
60
} ) ;
61
61
62
62
describe ( 'AppSyncEventProvider' , ( ) => {
63
+ describe ( 'connect' , ( ) => {
64
+ let fakeWebSocketInterface : FakeWebSocketInterface ;
65
+ const loggerSpy : jest . SpyInstance = jest . spyOn (
66
+ ConsoleLogger . prototype ,
67
+ '_log' ,
68
+ ) ;
69
+ let provider : AWSAppSyncEventProvider ;
70
+ beforeEach ( async ( ) => {
71
+ fakeWebSocketInterface = new FakeWebSocketInterface ( ) ;
72
+ provider = new AWSAppSyncEventProvider ( ) ;
73
+
74
+ Object . defineProperty ( provider , 'socketStatus' , {
75
+ value : constants . SOCKET_STATUS . CLOSED ,
76
+ } ) ;
77
+
78
+ jest . spyOn ( provider as any , '_getNewWebSocket' ) . mockImplementation ( ( ) => {
79
+ fakeWebSocketInterface . newWebSocket ( ) ;
80
+ return fakeWebSocketInterface . webSocket as WebSocket ;
81
+ } ) ;
82
+ } )
83
+
84
+ afterEach ( async ( ) => {
85
+ provider ?. close ( ) ;
86
+ await fakeWebSocketInterface ?. closeInterface ( ) ;
87
+ fakeWebSocketInterface ?. teardown ( ) ;
88
+ loggerSpy . mockClear ( ) ;
89
+ } ) ;
90
+
91
+ test ( 'socket status should be READY' , async ( ) => {
92
+
93
+ // Connect to the provider
94
+ const connectPromise = provider . connect ( {
95
+ appSyncGraphqlEndpoint : 'ws://localhost:8080' ,
96
+ authenticationType : 'apiKey' ,
97
+ apiKey : 'test-api-key' ,
98
+ region : 'us-east-1'
99
+ } ) ;
100
+
101
+ // Verify the socket status to be CONNECTING
102
+ await new Promise ( resolve => setTimeout ( resolve , 1 ) ) ;
103
+ expect ( ( provider as any ) . socketStatus ) . toBe ( constants . SOCKET_STATUS . CONNECTING ) ;
104
+
105
+ // Trigger the websocket open event
106
+ await fakeWebSocketInterface . readyForUse ;
107
+ await fakeWebSocketInterface . triggerOpen ( ) ;
108
+
109
+ // Initiate handshake
110
+ await fakeWebSocketInterface . sendDataMessage ( {
111
+ type : MESSAGE_TYPES . GQL_CONNECTION_ACK
112
+ } ) ;
113
+
114
+ // Wait for connection to complete
115
+ await connectPromise ;
116
+
117
+ // Verify the socket status
118
+ expect ( ( provider as any ) . socketStatus ) . toBe ( constants . SOCKET_STATUS . READY ) ;
119
+ } ) ;
120
+ } ) ;
63
121
describe ( 'subscribe()' , ( ) => {
64
122
describe ( 'returned observer' , ( ) => {
65
123
describe ( 'connection logic with mocked websocket' , ( ) => {
0 commit comments