test_auths.py 7.1 KB

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