Coverage for tests\system\v1\user_test.py: 100%

69 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-04-13 15:26 +0800

1import io 

2 

3import pandas as pd 

4import pytest 

5from fastapi import UploadFile 

6from fastapi.testclient import TestClient 

7 

8from fss.common.config import configs 

9from fss.common.util.security import get_user_id 

10from fss.starter.server import app 

11from fss.starter.system.schema.user_schema import UpdateUserCmd 

12 

13client = TestClient(app) 

14 

15 

16def test_user_register(): 

17 user_data = { 

18 "username": "example_user", 

19 "password": "example_password", 

20 "nickname": "Example Nickname", 

21 } 

22 response = client.post(f"{configs.api_version}/user/register", json=user_data) 

23 assert response.status_code == 200 

24 assert response.json()["code"] == 0 

25 

26 

27@pytest.fixture(scope="class") 

28def login(): 

29 response = client.post( 

30 f"{configs.api_version}/user/login", 

31 data={"username": "example_user", "password": "example_password"}, 

32 ) 

33 assert response.status_code == 200 

34 assert response.json()["token_type"] == "bearer" 

35 access_token = response.json()["access_token"] 

36 user_id = get_user_id(access_token) 

37 yield response.json()["access_token"], user_id 

38 

39 

40def test_user_login(): 

41 response = client.post( 

42 f"{configs.api_version}/user/login", 

43 data={"username": "example_user", "password": "example_password"}, 

44 ) 

45 assert response.status_code == 200 

46 assert response.json()["token_type"] == "bearer" 

47 

48 

49def test_user_me(): 

50 login_response = client.post( 

51 f"{configs.api_version}/user/login", 

52 data={"username": "example_user", "password": "example_password"}, 

53 ) 

54 assert login_response.status_code == 200 

55 access_token = login_response.json()["access_token"] 

56 headers = {"Authorization": f"Bearer {access_token}"} 

57 response = client.get(f"{configs.api_version}/user/me", headers=headers) 

58 assert response.status_code == 200 

59 assert response.json()["code"] == 0 

60 

61 

62def test_update_user(login): 

63 access_token, user_id = login 

64 headers = {"Authorization": f"Bearer {access_token}"} 

65 updateUserCmd = UpdateUserCmd(id=f"{user_id}", nickname="example_nickname") 

66 response = client.put( 

67 f"{configs.api_version}/user", 

68 json=(updateUserCmd.model_dump()), 

69 headers=headers, 

70 ) 

71 assert response.status_code == 200 

72 assert response.json()["code"] == 0 

73 

74 

75def test_export_user_template(login): 

76 access_token, user_id = login 

77 headers = {"Authorization": f"Bearer {access_token}"} 

78 response = client.get(f"{configs.api_version}/user/exportTemplate", headers=headers) 

79 assert response.status_code == 200 

80 

81 

82def test_export_user(login): 

83 access_token, user_id = login 

84 headers = {"Authorization": f"Bearer {access_token}"} 

85 response = client.get(f"{configs.api_version}/user/export", headers=headers) 

86 assert response.status_code == 200 

87 

88 

89def test_import_user(login): 

90 access_token, user_id = login 

91 headers = { 

92 "Authorization": f"Bearer {access_token}", 

93 "content_type": "multipart/form-data", 

94 } 

95 df = pd.DataFrame( 

96 { 

97 "username": ["example_user_2"], 

98 "password": ["password"], 

99 "nickname": ["nickname"], 

100 } 

101 ) 

102 buffer = io.BytesIO() 

103 df.to_excel(buffer, index=False) 

104 buffer.seek(0) 

105 file = UploadFile(filename="test_users.xlsx", file=buffer) 

106 

107 response = client.post( 

108 f"{configs.api_version}/user/import", 

109 headers=headers, 

110 files={"file": (file.filename, file.file, file.content_type)}, 

111 ) 

112 assert response.status_code == 200 

113 assert response.json()["code"] == 0 

114 

115 

116def test_remove_user(login): 

117 access_token, user_id = login 

118 headers = {"Authorization": f"Bearer {access_token}"} 

119 response = client.delete(f"{configs.api_version}/user/{user_id}", headers=headers) 

120 assert response.status_code == 200 

121 assert response.json()["code"] == 0