Coverage for tests/test_tutorial/test_websockets/test_tutorial002.py: 100%

69 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2025-01-13 13:38 +0000

1import pytest 1pqrst

2from fastapi.testclient import TestClient 1pqrst

3from fastapi.websockets import WebSocketDisconnect 1pqrst

4 

5from docs_src.websockets.tutorial002 import app 1pqrst

6 

7 

8def test_main(): 1pqrst

9 client = TestClient(app) 1uvwxy

10 response = client.get("/") 1uvwxy

11 assert response.status_code == 200, response.text 1uvwxy

12 assert b"<!DOCTYPE html>" in response.content 1uvwxy

13 

14 

15def test_websocket_with_cookie(): 1pqrst

16 client = TestClient(app, cookies={"session": "fakesession"}) 1fghij

17 with pytest.raises(WebSocketDisconnect): 1fghij

18 with client.websocket_connect("/items/foo/ws") as websocket: 1fghij

19 message = "Message one" 1fghij

20 websocket.send_text(message) 1fghij

21 data = websocket.receive_text() 1fghij

22 assert data == "Session cookie or query token value is: fakesession" 1fghij

23 data = websocket.receive_text() 1fghij

24 assert data == f"Message text was: {message}, for item ID: foo" 1fghij

25 message = "Message two" 1fghij

26 websocket.send_text(message) 1fghij

27 data = websocket.receive_text() 1fghij

28 assert data == "Session cookie or query token value is: fakesession" 1fghij

29 data = websocket.receive_text() 1fghij

30 assert data == f"Message text was: {message}, for item ID: foo" 1fghij

31 

32 

33def test_websocket_with_header(): 1pqrst

34 client = TestClient(app) 1klmno

35 with pytest.raises(WebSocketDisconnect): 1klmno

36 with client.websocket_connect("/items/bar/ws?token=some-token") as websocket: 1klmno

37 message = "Message one" 1klmno

38 websocket.send_text(message) 1klmno

39 data = websocket.receive_text() 1klmno

40 assert data == "Session cookie or query token value is: some-token" 1klmno

41 data = websocket.receive_text() 1klmno

42 assert data == f"Message text was: {message}, for item ID: bar" 1klmno

43 message = "Message two" 1klmno

44 websocket.send_text(message) 1klmno

45 data = websocket.receive_text() 1klmno

46 assert data == "Session cookie or query token value is: some-token" 1klmno

47 data = websocket.receive_text() 1klmno

48 assert data == f"Message text was: {message}, for item ID: bar" 1klmno

49 

50 

51def test_websocket_with_header_and_query(): 1pqrst

52 client = TestClient(app) 1abcde

53 with pytest.raises(WebSocketDisconnect): 1abcde

54 with client.websocket_connect("/items/2/ws?q=3&token=some-token") as websocket: 1abcde

55 message = "Message one" 1abcde

56 websocket.send_text(message) 1abcde

57 data = websocket.receive_text() 1abcde

58 assert data == "Session cookie or query token value is: some-token" 1abcde

59 data = websocket.receive_text() 1abcde

60 assert data == "Query parameter q is: 3" 1abcde

61 data = websocket.receive_text() 1abcde

62 assert data == f"Message text was: {message}, for item ID: 2" 1abcde

63 message = "Message two" 1abcde

64 websocket.send_text(message) 1abcde

65 data = websocket.receive_text() 1abcde

66 assert data == "Session cookie or query token value is: some-token" 1abcde

67 data = websocket.receive_text() 1abcde

68 assert data == "Query parameter q is: 3" 1abcde

69 data = websocket.receive_text() 1abcde

70 assert data == f"Message text was: {message}, for item ID: 2" 1abcde

71 

72 

73def test_websocket_no_credentials(): 1pqrst

74 client = TestClient(app) 1BzCDE

75 with pytest.raises(WebSocketDisconnect): 1BzCDE

76 with client.websocket_connect("/items/foo/ws"): 1BzCDE

77 pytest.fail( 1z

78 "did not raise WebSocketDisconnect on __enter__" 

79 ) # pragma: no cover 

80 

81 

82def test_websocket_invalid_data(): 1pqrst

83 client = TestClient(app) 1FAGHI

84 with pytest.raises(WebSocketDisconnect): 1FAGHI

85 with client.websocket_connect("/items/foo/ws?q=bar&token=some-token"): 1FAGHI

86 pytest.fail( 1A

87 "did not raise WebSocketDisconnect on __enter__" 

88 ) # pragma: no cover