@@ -60,6 +60,64 @@ jest.mock('@aws-amplify/core', () => {
6060} ) ;
6161
6262describe ( '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+ } ) ;
63121 describe ( 'subscribe()' , ( ) => {
64122 describe ( 'returned observer' , ( ) => {
65123 describe ( 'connection logic with mocked websocket' , ( ) => {
0 commit comments