2024-06-18 13:03:31 +00:00
|
|
|
from test.util.abstract_integration_test import AbstractPostgresTest
|
|
|
|
from test.util.mock_user import mock_webui_user
|
|
|
|
|
|
|
|
|
|
|
|
def _get_user_by_id(data, param):
|
|
|
|
return next((item for item in data if item["id"] == param), None)
|
|
|
|
|
|
|
|
|
|
|
|
def _assert_user(data, id, **kwargs):
|
|
|
|
user = _get_user_by_id(data, id)
|
|
|
|
assert user is not None
|
|
|
|
comparison_data = {
|
|
|
|
"name": f"user {id}",
|
|
|
|
"email": f"user{id}@openwebui.com",
|
|
|
|
"profile_image_url": f"/user{id}.png",
|
|
|
|
"role": "user",
|
|
|
|
**kwargs,
|
|
|
|
}
|
|
|
|
for key, value in comparison_data.items():
|
|
|
|
assert user[key] == value
|
|
|
|
|
|
|
|
|
|
|
|
class TestUsers(AbstractPostgresTest):
|
|
|
|
BASE_PATH = "/api/v1/users"
|
|
|
|
|
|
|
|
def setup_class(cls):
|
|
|
|
super().setup_class()
|
2024-12-10 08:54:13 +00:00
|
|
|
from open_webui.models.users import Users
|
2024-06-18 13:03:31 +00:00
|
|
|
|
|
|
|
cls.users = Users
|
|
|
|
|
|
|
|
def setup_method(self):
|
|
|
|
super().setup_method()
|
|
|
|
self.users.insert_new_user(
|
|
|
|
id="1",
|
|
|
|
name="user 1",
|
|
|
|
email="user1@openwebui.com",
|
|
|
|
profile_image_url="/user1.png",
|
|
|
|
role="user",
|
|
|
|
)
|
|
|
|
self.users.insert_new_user(
|
|
|
|
id="2",
|
|
|
|
name="user 2",
|
|
|
|
email="user2@openwebui.com",
|
|
|
|
profile_image_url="/user2.png",
|
|
|
|
role="user",
|
|
|
|
)
|
|
|
|
|
|
|
|
def test_users(self):
|
|
|
|
# Get all users
|
|
|
|
with mock_webui_user(id="3"):
|
|
|
|
response = self.fast_api_client.get(self.create_url(""))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert len(response.json()) == 2
|
|
|
|
data = response.json()
|
|
|
|
_assert_user(data, "1")
|
|
|
|
_assert_user(data, "2")
|
|
|
|
|
|
|
|
# update role
|
|
|
|
with mock_webui_user(id="3"):
|
|
|
|
response = self.fast_api_client.post(
|
|
|
|
self.create_url("/update/role"), json={"id": "2", "role": "admin"}
|
|
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
_assert_user([response.json()], "2", role="admin")
|
|
|
|
|
|
|
|
# Get all users
|
|
|
|
with mock_webui_user(id="3"):
|
|
|
|
response = self.fast_api_client.get(self.create_url(""))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert len(response.json()) == 2
|
|
|
|
data = response.json()
|
|
|
|
_assert_user(data, "1")
|
|
|
|
_assert_user(data, "2", role="admin")
|
|
|
|
|
|
|
|
# Get (empty) user settings
|
|
|
|
with mock_webui_user(id="2"):
|
|
|
|
response = self.fast_api_client.get(self.create_url("/user/settings"))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.json() is None
|
|
|
|
|
|
|
|
# Update user settings
|
|
|
|
with mock_webui_user(id="2"):
|
|
|
|
response = self.fast_api_client.post(
|
|
|
|
self.create_url("/user/settings/update"),
|
|
|
|
json={
|
|
|
|
"ui": {"attr1": "value1", "attr2": "value2"},
|
|
|
|
"model_config": {"attr3": "value3", "attr4": "value4"},
|
|
|
|
},
|
|
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
|
|
# Get user settings
|
|
|
|
with mock_webui_user(id="2"):
|
|
|
|
response = self.fast_api_client.get(self.create_url("/user/settings"))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.json() == {
|
|
|
|
"ui": {"attr1": "value1", "attr2": "value2"},
|
|
|
|
"model_config": {"attr3": "value3", "attr4": "value4"},
|
|
|
|
}
|
|
|
|
|
|
|
|
# Get (empty) user info
|
|
|
|
with mock_webui_user(id="1"):
|
|
|
|
response = self.fast_api_client.get(self.create_url("/user/info"))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.json() is None
|
|
|
|
|
|
|
|
# Update user info
|
|
|
|
with mock_webui_user(id="1"):
|
|
|
|
response = self.fast_api_client.post(
|
|
|
|
self.create_url("/user/info/update"),
|
|
|
|
json={"attr1": "value1", "attr2": "value2"},
|
|
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
|
|
# Get user info
|
|
|
|
with mock_webui_user(id="1"):
|
|
|
|
response = self.fast_api_client.get(self.create_url("/user/info"))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.json() == {"attr1": "value1", "attr2": "value2"}
|
|
|
|
|
|
|
|
# Get user by id
|
|
|
|
with mock_webui_user(id="1"):
|
|
|
|
response = self.fast_api_client.get(self.create_url("/2"))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.json() == {"name": "user 2", "profile_image_url": "/user2.png"}
|
|
|
|
|
|
|
|
# Update user by id
|
|
|
|
with mock_webui_user(id="1"):
|
|
|
|
response = self.fast_api_client.post(
|
|
|
|
self.create_url("/2/update"),
|
|
|
|
json={
|
|
|
|
"name": "user 2 updated",
|
|
|
|
"email": "user2-updated@openwebui.com",
|
|
|
|
"profile_image_url": "/user2-updated.png",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
|
|
# Get all users
|
|
|
|
with mock_webui_user(id="3"):
|
|
|
|
response = self.fast_api_client.get(self.create_url(""))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert len(response.json()) == 2
|
|
|
|
data = response.json()
|
|
|
|
_assert_user(data, "1")
|
|
|
|
_assert_user(
|
|
|
|
data,
|
|
|
|
"2",
|
|
|
|
role="admin",
|
|
|
|
name="user 2 updated",
|
|
|
|
email="user2-updated@openwebui.com",
|
|
|
|
profile_image_url="/user2-updated.png",
|
|
|
|
)
|
|
|
|
|
|
|
|
# Delete user by id
|
|
|
|
with mock_webui_user(id="1"):
|
|
|
|
response = self.fast_api_client.delete(self.create_url("/2"))
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
|
|
# Get all users
|
|
|
|
with mock_webui_user(id="3"):
|
|
|
|
response = self.fast_api_client.get(self.create_url(""))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert len(response.json()) == 1
|
|
|
|
data = response.json()
|
|
|
|
_assert_user(data, "1")
|