test_users.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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. id="1",
  27. name="user 1",
  28. email="user1@openwebui.com",
  29. profile_image_url="/user1.png",
  30. role="user",
  31. )
  32. self.users.insert_new_user(
  33. id="2",
  34. name="user 2",
  35. email="user2@openwebui.com",
  36. profile_image_url="/user2.png",
  37. role="user",
  38. )
  39. def test_users(self):
  40. # Get all users
  41. with mock_webui_user(id="3"):
  42. response = self.fast_api_client.get(self.create_url(""))
  43. assert response.status_code == 200
  44. assert len(response.json()) == 2
  45. data = response.json()
  46. _assert_user(data, "1")
  47. _assert_user(data, "2")
  48. # update role
  49. with mock_webui_user(id="3"):
  50. response = self.fast_api_client.post(
  51. self.create_url("/update/role"), json={"id": "2", "role": "admin"}
  52. )
  53. assert response.status_code == 200
  54. _assert_user([response.json()], "2", role="admin")
  55. # Get all users
  56. with mock_webui_user(id="3"):
  57. response = self.fast_api_client.get(self.create_url(""))
  58. assert response.status_code == 200
  59. assert len(response.json()) == 2
  60. data = response.json()
  61. _assert_user(data, "1")
  62. _assert_user(data, "2", role="admin")
  63. # Get (empty) user settings
  64. with mock_webui_user(id="2"):
  65. response = self.fast_api_client.get(self.create_url("/user/settings"))
  66. assert response.status_code == 200
  67. assert response.json() is None
  68. # Update user settings
  69. with mock_webui_user(id="2"):
  70. response = self.fast_api_client.post(
  71. self.create_url("/user/settings/update"),
  72. json={
  73. "ui": {"attr1": "value1", "attr2": "value2"},
  74. "model_config": {"attr3": "value3", "attr4": "value4"},
  75. },
  76. )
  77. assert response.status_code == 200
  78. # Get user settings
  79. with mock_webui_user(id="2"):
  80. response = self.fast_api_client.get(self.create_url("/user/settings"))
  81. assert response.status_code == 200
  82. assert response.json() == {
  83. "ui": {"attr1": "value1", "attr2": "value2"},
  84. "model_config": {"attr3": "value3", "attr4": "value4"},
  85. }
  86. # Get (empty) user info
  87. with mock_webui_user(id="1"):
  88. response = self.fast_api_client.get(self.create_url("/user/info"))
  89. assert response.status_code == 200
  90. assert response.json() is None
  91. # Update user info
  92. with mock_webui_user(id="1"):
  93. response = self.fast_api_client.post(
  94. self.create_url("/user/info/update"),
  95. json={"attr1": "value1", "attr2": "value2"},
  96. )
  97. assert response.status_code == 200
  98. # Get user info
  99. with mock_webui_user(id="1"):
  100. response = self.fast_api_client.get(self.create_url("/user/info"))
  101. assert response.status_code == 200
  102. assert response.json() == {"attr1": "value1", "attr2": "value2"}
  103. # Get user by id
  104. with mock_webui_user(id="1"):
  105. response = self.fast_api_client.get(self.create_url("/2"))
  106. assert response.status_code == 200
  107. assert response.json() == {"name": "user 2", "profile_image_url": "/user2.png"}
  108. # Update user by id
  109. with mock_webui_user(id="1"):
  110. response = self.fast_api_client.post(
  111. self.create_url("/2/update"),
  112. json={
  113. "name": "user 2 updated",
  114. "email": "user2-updated@openwebui.com",
  115. "profile_image_url": "/user2-updated.png",
  116. },
  117. )
  118. assert response.status_code == 200
  119. # Get all users
  120. with mock_webui_user(id="3"):
  121. response = self.fast_api_client.get(self.create_url(""))
  122. assert response.status_code == 200
  123. assert len(response.json()) == 2
  124. data = response.json()
  125. _assert_user(data, "1")
  126. _assert_user(
  127. data,
  128. "2",
  129. role="admin",
  130. name="user 2 updated",
  131. email="user2-updated@openwebui.com",
  132. profile_image_url="/user2-updated.png",
  133. )
  134. # Delete user by id
  135. with mock_webui_user(id="1"):
  136. response = self.fast_api_client.delete(self.create_url("/2"))
  137. assert response.status_code == 200
  138. # Get all users
  139. with mock_webui_user(id="3"):
  140. response = self.fast_api_client.get(self.create_url(""))
  141. assert response.status_code == 200
  142. assert len(response.json()) == 1
  143. data = response.json()
  144. _assert_user(data, "1")