This commit is contained in:
Timothy Jaeryang Baek
2026-03-17 17:58:01 -05:00
parent fcf7208352
commit de3317e26b
220 changed files with 17200 additions and 22836 deletions

View File

@@ -3,7 +3,7 @@ from test.util.mock_user import mock_webui_user
class TestAuths(AbstractPostgresTest):
BASE_PATH = "/api/v1/auths"
BASE_PATH = '/api/v1/auths'
def setup_class(cls):
super().setup_class()
@@ -15,171 +15,167 @@ class TestAuths(AbstractPostgresTest):
def test_get_session_user(self):
with mock_webui_user():
response = self.fast_api_client.get(self.create_url(""))
response = self.fast_api_client.get(self.create_url(''))
assert response.status_code == 200
assert response.json() == {
"id": "1",
"name": "John Doe",
"email": "john.doe@openwebui.com",
"role": "user",
"profile_image_url": "/user.png",
'id': '1',
'name': 'John Doe',
'email': 'john.doe@openwebui.com',
'role': 'user',
'profile_image_url': '/user.png',
}
def test_update_profile(self):
from open_webui.utils.auth import get_password_hash
user = self.auths.insert_new_auth(
email="john.doe@openwebui.com",
password=get_password_hash("old_password"),
name="John Doe",
profile_image_url="/user.png",
role="user",
email='john.doe@openwebui.com',
password=get_password_hash('old_password'),
name='John Doe',
profile_image_url='/user.png',
role='user',
)
with mock_webui_user(id=user.id):
response = self.fast_api_client.post(
self.create_url("/update/profile"),
json={"name": "John Doe 2", "profile_image_url": "/user2.png"},
self.create_url('/update/profile'),
json={'name': 'John Doe 2', 'profile_image_url': '/user2.png'},
)
assert response.status_code == 200
db_user = self.users.get_user_by_id(user.id)
assert db_user.name == "John Doe 2"
assert db_user.profile_image_url == "/user2.png"
assert db_user.name == 'John Doe 2'
assert db_user.profile_image_url == '/user2.png'
def test_update_password(self):
from open_webui.utils.auth import get_password_hash
user = self.auths.insert_new_auth(
email="john.doe@openwebui.com",
password=get_password_hash("old_password"),
name="John Doe",
profile_image_url="/user.png",
role="user",
email='john.doe@openwebui.com',
password=get_password_hash('old_password'),
name='John Doe',
profile_image_url='/user.png',
role='user',
)
with mock_webui_user(id=user.id):
response = self.fast_api_client.post(
self.create_url("/update/password"),
json={"password": "old_password", "new_password": "new_password"},
self.create_url('/update/password'),
json={'password': 'old_password', 'new_password': 'new_password'},
)
assert response.status_code == 200
old_auth = self.auths.authenticate_user(
"john.doe@openwebui.com", "old_password"
)
old_auth = self.auths.authenticate_user('john.doe@openwebui.com', 'old_password')
assert old_auth is None
new_auth = self.auths.authenticate_user(
"john.doe@openwebui.com", "new_password"
)
new_auth = self.auths.authenticate_user('john.doe@openwebui.com', 'new_password')
assert new_auth is not None
def test_signin(self):
from open_webui.utils.auth import get_password_hash
user = self.auths.insert_new_auth(
email="john.doe@openwebui.com",
password=get_password_hash("password"),
name="John Doe",
profile_image_url="/user.png",
role="user",
email='john.doe@openwebui.com',
password=get_password_hash('password'),
name='John Doe',
profile_image_url='/user.png',
role='user',
)
response = self.fast_api_client.post(
self.create_url("/signin"),
json={"email": "john.doe@openwebui.com", "password": "password"},
self.create_url('/signin'),
json={'email': 'john.doe@openwebui.com', 'password': 'password'},
)
assert response.status_code == 200
data = response.json()
assert data["id"] == user.id
assert data["name"] == "John Doe"
assert data["email"] == "john.doe@openwebui.com"
assert data["role"] == "user"
assert data["profile_image_url"] == "/user.png"
assert data["token"] is not None and len(data["token"]) > 0
assert data["token_type"] == "Bearer"
assert data['id'] == user.id
assert data['name'] == 'John Doe'
assert data['email'] == 'john.doe@openwebui.com'
assert data['role'] == 'user'
assert data['profile_image_url'] == '/user.png'
assert data['token'] is not None and len(data['token']) > 0
assert data['token_type'] == 'Bearer'
def test_signup(self):
response = self.fast_api_client.post(
self.create_url("/signup"),
self.create_url('/signup'),
json={
"name": "John Doe",
"email": "john.doe@openwebui.com",
"password": "password",
'name': 'John Doe',
'email': 'john.doe@openwebui.com',
'password': 'password',
},
)
assert response.status_code == 200
data = response.json()
assert data["id"] is not None and len(data["id"]) > 0
assert data["name"] == "John Doe"
assert data["email"] == "john.doe@openwebui.com"
assert data["role"] in ["admin", "user", "pending"]
assert data["profile_image_url"] == "/user.png"
assert data["token"] is not None and len(data["token"]) > 0
assert data["token_type"] == "Bearer"
assert data['id'] is not None and len(data['id']) > 0
assert data['name'] == 'John Doe'
assert data['email'] == 'john.doe@openwebui.com'
assert data['role'] in ['admin', 'user', 'pending']
assert data['profile_image_url'] == '/user.png'
assert data['token'] is not None and len(data['token']) > 0
assert data['token_type'] == 'Bearer'
def test_add_user(self):
with mock_webui_user():
response = self.fast_api_client.post(
self.create_url("/add"),
self.create_url('/add'),
json={
"name": "John Doe 2",
"email": "john.doe2@openwebui.com",
"password": "password2",
"role": "admin",
'name': 'John Doe 2',
'email': 'john.doe2@openwebui.com',
'password': 'password2',
'role': 'admin',
},
)
assert response.status_code == 200
data = response.json()
assert data["id"] is not None and len(data["id"]) > 0
assert data["name"] == "John Doe 2"
assert data["email"] == "john.doe2@openwebui.com"
assert data["role"] == "admin"
assert data["profile_image_url"] == "/user.png"
assert data["token"] is not None and len(data["token"]) > 0
assert data["token_type"] == "Bearer"
assert data['id'] is not None and len(data['id']) > 0
assert data['name'] == 'John Doe 2'
assert data['email'] == 'john.doe2@openwebui.com'
assert data['role'] == 'admin'
assert data['profile_image_url'] == '/user.png'
assert data['token'] is not None and len(data['token']) > 0
assert data['token_type'] == 'Bearer'
def test_get_admin_details(self):
self.auths.insert_new_auth(
email="john.doe@openwebui.com",
password="password",
name="John Doe",
profile_image_url="/user.png",
role="admin",
email='john.doe@openwebui.com',
password='password',
name='John Doe',
profile_image_url='/user.png',
role='admin',
)
with mock_webui_user():
response = self.fast_api_client.get(self.create_url("/admin/details"))
response = self.fast_api_client.get(self.create_url('/admin/details'))
assert response.status_code == 200
assert response.json() == {
"name": "John Doe",
"email": "john.doe@openwebui.com",
'name': 'John Doe',
'email': 'john.doe@openwebui.com',
}
def test_create_api_key_(self):
user = self.auths.insert_new_auth(
email="john.doe@openwebui.com",
password="password",
name="John Doe",
profile_image_url="/user.png",
role="admin",
email='john.doe@openwebui.com',
password='password',
name='John Doe',
profile_image_url='/user.png',
role='admin',
)
with mock_webui_user(id=user.id):
response = self.fast_api_client.post(self.create_url("/api_key"))
response = self.fast_api_client.post(self.create_url('/api_key'))
assert response.status_code == 200
data = response.json()
assert data["api_key"] is not None
assert len(data["api_key"]) > 0
assert data['api_key'] is not None
assert len(data['api_key']) > 0
def test_delete_api_key(self):
user = self.auths.insert_new_auth(
email="john.doe@openwebui.com",
password="password",
name="John Doe",
profile_image_url="/user.png",
role="admin",
email='john.doe@openwebui.com',
password='password',
name='John Doe',
profile_image_url='/user.png',
role='admin',
)
self.users.update_user_api_key_by_id(user.id, "abc")
self.users.update_user_api_key_by_id(user.id, 'abc')
with mock_webui_user(id=user.id):
response = self.fast_api_client.delete(self.create_url("/api_key"))
response = self.fast_api_client.delete(self.create_url('/api_key'))
assert response.status_code == 200
assert response.json() == True
db_user = self.users.get_user_by_id(user.id)
@@ -187,14 +183,14 @@ class TestAuths(AbstractPostgresTest):
def test_get_api_key(self):
user = self.auths.insert_new_auth(
email="john.doe@openwebui.com",
password="password",
name="John Doe",
profile_image_url="/user.png",
role="admin",
email='john.doe@openwebui.com',
password='password',
name='John Doe',
profile_image_url='/user.png',
role='admin',
)
self.users.update_user_api_key_by_id(user.id, "abc")
self.users.update_user_api_key_by_id(user.id, 'abc')
with mock_webui_user(id=user.id):
response = self.fast_api_client.get(self.create_url("/api_key"))
response = self.fast_api_client.get(self.create_url('/api_key'))
assert response.status_code == 200
assert response.json() == {"api_key": "abc"}
assert response.json() == {'api_key': 'abc'}

View File

@@ -3,7 +3,7 @@ from test.util.mock_user import mock_webui_user
class TestModels(AbstractPostgresTest):
BASE_PATH = "/api/v1/models"
BASE_PATH = '/api/v1/models'
def setup_class(cls):
super().setup_class()
@@ -12,50 +12,46 @@ class TestModels(AbstractPostgresTest):
cls.models = Model
def test_models(self):
with mock_webui_user(id="2"):
response = self.fast_api_client.get(self.create_url("/"))
with mock_webui_user(id='2'):
response = self.fast_api_client.get(self.create_url('/'))
assert response.status_code == 200
assert len(response.json()) == 0
with mock_webui_user(id="2"):
with mock_webui_user(id='2'):
response = self.fast_api_client.post(
self.create_url("/add"),
self.create_url('/add'),
json={
"id": "my-model",
"base_model_id": "base-model-id",
"name": "Hello World",
"meta": {
"profile_image_url": "/static/favicon.png",
"description": "description",
"capabilities": None,
"model_config": {},
'id': 'my-model',
'base_model_id': 'base-model-id',
'name': 'Hello World',
'meta': {
'profile_image_url': '/static/favicon.png',
'description': 'description',
'capabilities': None,
'model_config': {},
},
"params": {},
'params': {},
},
)
assert response.status_code == 200
with mock_webui_user(id="2"):
response = self.fast_api_client.get(self.create_url("/"))
with mock_webui_user(id='2'):
response = self.fast_api_client.get(self.create_url('/'))
assert response.status_code == 200
assert len(response.json()) == 1
with mock_webui_user(id="2"):
response = self.fast_api_client.get(
self.create_url(query_params={"id": "my-model"})
)
with mock_webui_user(id='2'):
response = self.fast_api_client.get(self.create_url(query_params={'id': 'my-model'}))
assert response.status_code == 200
data = response.json()[0]
assert data["id"] == "my-model"
assert data["name"] == "Hello World"
assert data['id'] == 'my-model'
assert data['name'] == 'Hello World'
with mock_webui_user(id="2"):
response = self.fast_api_client.delete(
self.create_url("/delete?id=my-model")
)
with mock_webui_user(id='2'):
response = self.fast_api_client.delete(self.create_url('/delete?id=my-model'))
assert response.status_code == 200
with mock_webui_user(id="2"):
response = self.fast_api_client.get(self.create_url("/"))
with mock_webui_user(id='2'):
response = self.fast_api_client.get(self.create_url('/'))
assert response.status_code == 200
assert len(response.json()) == 0

View File

@@ -3,17 +3,17 @@ 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)
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"/api/v1/users/{id}/profile/image",
"role": "user",
'name': f'user {id}',
'email': f'user{id}@openwebui.com',
'profile_image_url': f'/api/v1/users/{id}/profile/image',
'role': 'user',
**kwargs,
}
for key, value in comparison_data.items():
@@ -21,7 +21,7 @@ def _assert_user(data, id, **kwargs):
class TestUsers(AbstractPostgresTest):
BASE_PATH = "/api/v1/users"
BASE_PATH = '/api/v1/users'
def setup_class(cls):
super().setup_class()
@@ -32,136 +32,134 @@ class TestUsers(AbstractPostgresTest):
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",
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",
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(""))
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")
_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"}
)
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")
_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(""))
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")
_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"))
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"):
with mock_webui_user(id='2'):
response = self.fast_api_client.post(
self.create_url("/user/settings/update"),
self.create_url('/user/settings/update'),
json={
"ui": {"attr1": "value1", "attr2": "value2"},
"model_config": {"attr3": "value3", "attr4": "value4"},
'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"))
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"},
'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"))
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"):
with mock_webui_user(id='1'):
response = self.fast_api_client.post(
self.create_url("/user/info/update"),
json={"attr1": "value1", "attr2": "value2"},
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"))
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"}
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"))
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"}
assert response.json() == {'name': 'user 2', 'profile_image_url': '/user2.png'}
# Update user by id
with mock_webui_user(id="1"):
with mock_webui_user(id='1'):
response = self.fast_api_client.post(
self.create_url("/2/update"),
self.create_url('/2/update'),
json={
"name": "user 2 updated",
"email": "user2-updated@openwebui.com",
"profile_image_url": "/user2-updated.png",
'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(""))
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, '1')
_assert_user(
data,
"2",
role="admin",
name="user 2 updated",
email="user2-updated@openwebui.com",
profile_image_url=f"/api/v1/users/2/profile/image",
'2',
role='admin',
name='user 2 updated',
email='user2-updated@openwebui.com',
profile_image_url=f'/api/v1/users/2/profile/image',
)
# Delete user by id
with mock_webui_user(id="1"):
response = self.fast_api_client.delete(self.create_url("/2"))
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(""))
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")
_assert_user(data, '1')