test_users.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. from test.util.abstract_integration_test import AbstractPostgresTest
  2. from test.util.mock_user import mock_webui_user
  3. def _get_user_by_id(data, param):
  4. return next((item for item in data if item["id"] == param), None)
  5. def _assert_user(data, id, **kwargs):
  6. user = _get_user_by_id(data, id)
  7. assert user is not None
  8. comparison_data = {
  9. "name": f"user {id}",
  10. "email": f"user{id}@openwebui.com",
  11. "profile_image_url": f"/user{id}.png",
  12. "role": "user",
  13. **kwargs,
  14. }
  15. for key, value in comparison_data.items():
  16. assert user[key] == value
  17. class TestUsers(AbstractPostgresTest):
  18. BASE_PATH = "/api/v1/users"
  19. def setup_class(cls):
  20. super().setup_class()
  21. from apps.webui.models.users import Users
  22. cls.users = Users
  23. def setup_method(self):
  24. super().setup_method()
  25. self.users.insert_new_user(
  26. self.db_session,
  27. id="1",
  28. name="user 1",
  29. email="user1@openwebui.com",
  30. profile_image_url="/user1.png",
  31. role="user",
  32. )
  33. self.users.insert_new_user(
  34. self.db_session,
  35. id="2",
  36. name="user 2",
  37. email="user2@openwebui.com",
  38. profile_image_url="/user2.png",
  39. role="user",
  40. )
  41. def test_users(self):
  42. # Get all users
  43. with mock_webui_user(id="3"):
  44. response = self.fast_api_client.get(self.create_url(""))
  45. assert response.status_code == 200
  46. assert len(response.json()) == 2
  47. data = response.json()
  48. _assert_user(data, "1")
  49. _assert_user(data, "2")
  50. # update role
  51. with mock_webui_user(id="3"):
  52. response = self.fast_api_client.post(
  53. self.create_url("/update/role"), json={"id": "2", "role": "admin"}
  54. )
  55. assert response.status_code == 200
  56. _assert_user([response.json()], "2", role="admin")
  57. # Get all users
  58. with mock_webui_user(id="3"):
  59. response = self.fast_api_client.get(self.create_url(""))
  60. assert response.status_code == 200
  61. assert len(response.json()) == 2
  62. data = response.json()
  63. _assert_user(data, "1")
  64. _assert_user(data, "2", role="admin")
  65. # Get (empty) user settings
  66. with mock_webui_user(id="2"):
  67. response = self.fast_api_client.get(self.create_url("/user/settings"))
  68. assert response.status_code == 200
  69. assert response.json() is None
  70. # Update user settings
  71. with mock_webui_user(id="2"):
  72. response = self.fast_api_client.post(
  73. self.create_url("/user/settings/update"),
  74. json={
  75. "ui": {"attr1": "value1", "attr2": "value2"},
  76. "model_config": {"attr3": "value3", "attr4": "value4"},
  77. },
  78. )
  79. assert response.status_code == 200
  80. # Get user settings
  81. with mock_webui_user(id="2"):
  82. response = self.fast_api_client.get(self.create_url("/user/settings"))
  83. assert response.status_code == 200
  84. assert response.json() == {
  85. "ui": {"attr1": "value1", "attr2": "value2"},
  86. "model_config": {"attr3": "value3", "attr4": "value4"},
  87. }
  88. # Get (empty) user info
  89. with mock_webui_user(id="1"):
  90. response = self.fast_api_client.get(self.create_url("/user/info"))
  91. assert response.status_code == 200
  92. assert response.json() is None
  93. # Update user info
  94. with mock_webui_user(id="1"):
  95. response = self.fast_api_client.post(
  96. self.create_url("/user/info/update"),
  97. json={"attr1": "value1", "attr2": "value2"},
  98. )
  99. assert response.status_code == 200
  100. # Get user info
  101. with mock_webui_user(id="1"):
  102. response = self.fast_api_client.get(self.create_url("/user/info"))
  103. assert response.status_code == 200
  104. assert response.json() == {"attr1": "value1", "attr2": "value2"}
  105. # Get user by id
  106. with mock_webui_user(id="1"):
  107. response = self.fast_api_client.get(self.create_url("/2"))
  108. assert response.status_code == 200
  109. assert response.json() == {"name": "user 2", "profile_image_url": "/user2.png"}
  110. # Update user by id
  111. with mock_webui_user(id="1"):
  112. response = self.fast_api_client.post(
  113. self.create_url("/2/update"),
  114. json={
  115. "name": "user 2 updated",
  116. "email": "user2-updated@openwebui.com",
  117. "profile_image_url": "/user2-updated.png",
  118. },
  119. )
  120. assert response.status_code == 200
  121. # Get all users
  122. with mock_webui_user(id="3"):
  123. response = self.fast_api_client.get(self.create_url(""))
  124. assert response.status_code == 200
  125. assert len(response.json()) == 2
  126. data = response.json()
  127. _assert_user(data, "1")
  128. _assert_user(
  129. data,
  130. "2",
  131. role="admin",
  132. name="user 2 updated",
  133. email="user2-updated@openwebui.com",
  134. profile_image_url="/user2-updated.png",
  135. )
  136. # Delete user by id
  137. with mock_webui_user(id="1"):
  138. response = self.fast_api_client.delete(self.create_url("/2"))
  139. assert response.status_code == 200
  140. # Get all users
  141. with mock_webui_user(id="3"):
  142. response = self.fast_api_client.get(self.create_url(""))
  143. assert response.status_code == 200
  144. assert len(response.json()) == 1
  145. data = response.json()
  146. _assert_user(data, "1")