@@ -13,49 +13,94 @@ const getBlock = (): Block => ({
13
13
propertyMeta : [ ] ,
14
14
} ) ;
15
15
16
- let ws : WebSocketRoute | null = null ;
17
- test . beforeEach ( async ( { page } ) => {
18
- await page . routeWebSocket (
19
- ( url ) => url . pathname === "/ws/sdk/block-updates" ,
20
- ( _ws ) => {
21
- ws = _ws ;
22
- } ,
23
- ) ;
24
- } ) ;
25
-
26
16
const run = ( packageName : string ) => {
27
- test ( `${ packageName } - should display block that is received through websocket` , async ( {
28
- page,
29
- } ) => {
30
- const block = getBlock ( ) ;
31
- await page . route ( "**/v2/sdk/blocks" , ( route ) => {
32
- route . fulfill ( { json : { blocks : [ ] } } ) ;
17
+ test . describe ( `mocked websocket` , ( ) => {
18
+ let ws : WebSocketRoute | null = null ;
19
+ test . beforeEach ( async ( { page } ) => {
20
+ await page . routeWebSocket (
21
+ ( url ) => url . pathname === "/ws/sdk/block-updates" ,
22
+ ( _ws ) => {
23
+ ws = _ws ;
24
+ } ,
25
+ ) ;
26
+ } ) ;
27
+
28
+ test ( `${ packageName } - should display block that is received through websocket` , async ( {
29
+ page,
30
+ } ) => {
31
+ const block = getBlock ( ) ;
32
+ await page . route ( "**/v2/sdk/blocks" , ( route ) => {
33
+ route . fulfill ( { json : { blocks : [ ] } } ) ;
34
+ } ) ;
35
+ await page . goto ( `/${ packageName } .html` ) ;
36
+ await expect ( page . locator ( "h1" ) ) . toBeVisible ( ) ;
37
+ await expect ( page . getByText ( "Hello world" , { exact : true } ) ) . toBeHidden ( ) ;
38
+ const payload : BlockUpdatesPayload = {
39
+ exitedBlockIds : [ ] ,
40
+ updatedBlocks : [ block ] ,
41
+ } ;
42
+ await ( ws as unknown as WebSocketRoute ) . send ( JSON . stringify ( payload ) ) ;
43
+ await expect ( page . getByText ( "Hello world" , { exact : true } ) ) . toBeVisible ( ) ;
44
+ } ) ;
45
+ test ( `${ packageName } - should exit block that is received through websocket` , async ( {
46
+ page,
47
+ } ) => {
48
+ const block = getBlock ( ) ;
49
+ await page . route ( "**/v2/sdk/blocks" , ( route ) => {
50
+ route . fulfill ( { json : { blocks : [ block ] } } ) ;
51
+ } ) ;
52
+ await page . goto ( `/${ packageName } .html` ) ;
53
+ await expect ( page . getByText ( "Hello world" , { exact : true } ) ) . toBeVisible ( ) ;
54
+ const payload : BlockUpdatesPayload = {
55
+ exitedBlockIds : [ block . id ] ,
56
+ updatedBlocks : [ ] ,
57
+ } ;
58
+ await ( ws as unknown as WebSocketRoute ) . send ( JSON . stringify ( payload ) ) ;
59
+ await expect ( page . getByText ( "Hello world" , { exact : true } ) ) . toBeHidden ( ) ;
33
60
} ) ;
34
- await page . goto ( `/${ packageName } .html` ) ;
35
- await expect ( page . locator ( "h1" ) ) . toBeVisible ( ) ;
36
- await expect ( page . getByText ( "Hello world" , { exact : true } ) ) . toBeHidden ( ) ;
37
- const payload : BlockUpdatesPayload = {
38
- exitedBlockIds : [ ] ,
39
- updatedBlocks : [ block ] ,
40
- } ;
41
- await ( ws as unknown as WebSocketRoute ) . send ( JSON . stringify ( payload ) ) ;
42
- await expect ( page . getByText ( "Hello world" , { exact : true } ) ) . toBeVisible ( ) ;
43
61
} ) ;
44
- test ( `${ packageName } - should exit block that is received through websocket` , async ( {
45
- page,
46
- } ) => {
47
- const block = getBlock ( ) ;
48
- await page . route ( "**/v2/sdk/blocks" , ( route ) => {
49
- route . fulfill ( { json : { blocks : [ block ] } } ) ;
62
+
63
+ test . describe ( `real websocket` , ( ) => {
64
+ test ( `${ packageName } - should disconnect from websocket if the user is usage limited` , async ( {
65
+ page,
66
+ } ) => {
67
+ await page . route ( "**/v2/sdk/blocks" , ( route ) => {
68
+ route . fulfill ( { json : { blocks : [ ] , meta : { usage_limited : true } } } ) ;
69
+ } ) ;
70
+ const wsPromise = page . waitForEvent ( "websocket" ) ;
71
+ await page . goto ( `/${ packageName } .html` ) ;
72
+ const websocket = await wsPromise ;
73
+
74
+ let wsWasClosed = false ;
75
+ websocket . on ( "close" , ( ) => {
76
+ wsWasClosed = true ;
77
+ } ) ;
78
+ await page . waitForRequest ( ( req ) => {
79
+ return req . url ( ) === "https://api.flows-cloud.com/v2/sdk/blocks" ;
80
+ } ) ;
81
+
82
+ await expect ( ( ) => expect ( wsWasClosed ) . toBe ( true ) ) . toPass ( ) ;
83
+ } ) ;
84
+ test ( `${ packageName } - should keep websocket connection alive` , async ( { page } ) => {
85
+ await page . route ( "**/v2/sdk/blocks" , ( route ) => {
86
+ route . fulfill ( { json : { blocks : [ ] } } ) ;
87
+ } ) ;
88
+ const wsPromise = page . waitForEvent ( "websocket" ) ;
89
+ await page . goto ( `/${ packageName } .html` ) ;
90
+ const websocket = await wsPromise ;
91
+
92
+ let wsWasClosed = false ;
93
+ websocket . on ( "close" , ( ) => {
94
+ wsWasClosed = true ;
95
+ } ) ;
96
+ await page . waitForRequest ( ( req ) => {
97
+ return req . url ( ) === "https://api.flows-cloud.com/v2/sdk/blocks" ;
98
+ } ) ;
99
+
100
+ await new Promise ( ( res ) => setTimeout ( res , 500 ) ) ;
101
+
102
+ await expect ( ( ) => expect ( wsWasClosed ) . toBe ( false ) ) . toPass ( ) ;
50
103
} ) ;
51
- await page . goto ( `/${ packageName } .html` ) ;
52
- await expect ( page . getByText ( "Hello world" , { exact : true } ) ) . toBeVisible ( ) ;
53
- const payload : BlockUpdatesPayload = {
54
- exitedBlockIds : [ block . id ] ,
55
- updatedBlocks : [ ] ,
56
- } ;
57
- await ( ws as unknown as WebSocketRoute ) . send ( JSON . stringify ( payload ) ) ;
58
- await expect ( page . getByText ( "Hello world" , { exact : true } ) ) . toBeHidden ( ) ;
59
104
} ) ;
60
105
} ;
61
106
0 commit comments