test_auths.py 7.4 KB

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