test_auths.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import pytest
  2. from test.util.abstract_integration_test import AbstractPostgresTest
  3. from test.util.mock_user import mock_webui_user
  4. class TestAuths(AbstractPostgresTest):
  5. BASE_PATH = "/api/v1/auths"
  6. def setup_class(cls):
  7. super().setup_class()
  8. from apps.webui.models.users import Users
  9. from apps.webui.models.auths import Auths
  10. cls.users = Users
  11. cls.auths = Auths
  12. def test_get_session_user(self):
  13. with mock_webui_user():
  14. response = self.fast_api_client.get(self.create_url(""))
  15. assert response.status_code == 200
  16. assert response.json() == {
  17. "id": "1",
  18. "name": "John Doe",
  19. "email": "john.doe@openwebui.com",
  20. "role": "user",
  21. "profile_image_url": "/user.png",
  22. }
  23. def test_update_profile(self):
  24. from utils.utils import get_password_hash
  25. user = self.auths.insert_new_auth(
  26. email="john.doe@openwebui.com",
  27. password=get_password_hash("old_password"),
  28. name="John Doe",
  29. profile_image_url="/user.png",
  30. role="user",
  31. )
  32. with mock_webui_user(id=user.id):
  33. response = self.fast_api_client.post(
  34. self.create_url("/update/profile"),
  35. json={"name": "John Doe 2", "profile_image_url": "/user2.png"},
  36. )
  37. assert response.status_code == 200
  38. db_user = self.users.get_user_by_id(user.id)
  39. assert db_user.name == "John Doe 2"
  40. assert db_user.profile_image_url == "/user2.png"
  41. def test_update_password(self):
  42. from utils.utils import get_password_hash
  43. user = self.auths.insert_new_auth(
  44. email="john.doe@openwebui.com",
  45. password=get_password_hash("old_password"),
  46. name="John Doe",
  47. profile_image_url="/user.png",
  48. role="user",
  49. )
  50. with mock_webui_user(id=user.id):
  51. response = self.fast_api_client.post(
  52. self.create_url("/update/password"),
  53. json={"password": "old_password", "new_password": "new_password"},
  54. )
  55. assert response.status_code == 200
  56. old_auth = self.auths.authenticate_user(
  57. "john.doe@openwebui.com", "old_password"
  58. )
  59. assert old_auth is None
  60. new_auth = self.auths.authenticate_user(
  61. "john.doe@openwebui.com", "new_password"
  62. )
  63. assert new_auth is not None
  64. def test_signin(self):
  65. from utils.utils import get_password_hash
  66. user = self.auths.insert_new_auth(
  67. email="john.doe@openwebui.com",
  68. password=get_password_hash("password"),
  69. name="John Doe",
  70. profile_image_url="/user.png",
  71. role="user",
  72. )
  73. response = self.fast_api_client.post(
  74. self.create_url("/signin"),
  75. json={"email": "john.doe@openwebui.com", "password": "password"},
  76. )
  77. assert response.status_code == 200
  78. data = response.json()
  79. assert data["id"] == user.id
  80. assert data["name"] == "John Doe"
  81. assert data["email"] == "john.doe@openwebui.com"
  82. assert data["role"] == "user"
  83. assert data["profile_image_url"] == "/user.png"
  84. assert data["token"] is not None and len(data["token"]) > 0
  85. assert data["token_type"] == "Bearer"
  86. def test_signup(self):
  87. response = self.fast_api_client.post(
  88. self.create_url("/signup"),
  89. json={
  90. "name": "John Doe",
  91. "email": "john.doe@openwebui.com",
  92. "password": "password",
  93. },
  94. )
  95. assert response.status_code == 200
  96. data = response.json()
  97. assert data["id"] is not None and len(data["id"]) > 0
  98. assert data["name"] == "John Doe"
  99. assert data["email"] == "john.doe@openwebui.com"
  100. assert data["role"] in ["admin", "user", "pending"]
  101. assert data["profile_image_url"] == "/user.png"
  102. assert data["token"] is not None and len(data["token"]) > 0
  103. assert data["token_type"] == "Bearer"
  104. def test_add_user(self):
  105. with mock_webui_user():
  106. response = self.fast_api_client.post(
  107. self.create_url("/add"),
  108. json={
  109. "name": "John Doe 2",
  110. "email": "john.doe2@openwebui.com",
  111. "password": "password2",
  112. "role": "admin",
  113. },
  114. )
  115. assert response.status_code == 200
  116. data = response.json()
  117. assert data["id"] is not None and len(data["id"]) > 0
  118. assert data["name"] == "John Doe 2"
  119. assert data["email"] == "john.doe2@openwebui.com"
  120. assert data["role"] == "admin"
  121. assert data["profile_image_url"] == "/user.png"
  122. assert data["token"] is not None and len(data["token"]) > 0
  123. assert data["token_type"] == "Bearer"
  124. def test_get_admin_details(self):
  125. self.auths.insert_new_auth(
  126. email="john.doe@openwebui.com",
  127. password="password",
  128. name="John Doe",
  129. profile_image_url="/user.png",
  130. role="admin",
  131. )
  132. with mock_webui_user():
  133. response = self.fast_api_client.get(self.create_url("/admin/details"))
  134. assert response.status_code == 200
  135. assert response.json() == {
  136. "name": "John Doe",
  137. "email": "john.doe@openwebui.com",
  138. }
  139. def test_create_api_key_(self):
  140. user = self.auths.insert_new_auth(
  141. email="john.doe@openwebui.com",
  142. password="password",
  143. name="John Doe",
  144. profile_image_url="/user.png",
  145. role="admin",
  146. )
  147. with mock_webui_user(id=user.id):
  148. response = self.fast_api_client.post(self.create_url("/api_key"))
  149. assert response.status_code == 200
  150. data = response.json()
  151. assert data["api_key"] is not None
  152. assert len(data["api_key"]) > 0
  153. def test_delete_api_key(self):
  154. user = self.auths.insert_new_auth(
  155. email="john.doe@openwebui.com",
  156. password="password",
  157. name="John Doe",
  158. profile_image_url="/user.png",
  159. role="admin",
  160. )
  161. self.users.update_user_api_key_by_id(user.id, "abc")
  162. with mock_webui_user(id=user.id):
  163. response = self.fast_api_client.delete(self.create_url("/api_key"))
  164. assert response.status_code == 200
  165. assert response.json() == True
  166. db_user = self.users.get_user_by_id(user.id)
  167. assert db_user.api_key is None
  168. def test_get_api_key(self):
  169. user = self.auths.insert_new_auth(
  170. email="john.doe@openwebui.com",
  171. password="password",
  172. name="John Doe",
  173. profile_image_url="/user.png",
  174. role="admin",
  175. )
  176. self.users.update_user_api_key_by_id(user.id, "abc")
  177. with mock_webui_user(id=user.id):
  178. response = self.fast_api_client.get(self.create_url("/api_key"))
  179. assert response.status_code == 200
  180. assert response.json() == {"api_key": "abc"}