|
from test.util.abstract_integration_test import AbstractPostgresTest |
|
from test.util.mock_user import mock_webui_user |
|
|
|
|
|
class TestAuths(AbstractPostgresTest): |
|
BASE_PATH = "/api/v1/auths" |
|
|
|
def setup_class(cls): |
|
super().setup_class() |
|
from open_webui.apps.webui.models.auths import Auths |
|
from open_webui.apps.webui.models.users import Users |
|
|
|
cls.users = Users |
|
cls.auths = Auths |
|
|
|
def test_get_session_user(self): |
|
with mock_webui_user(): |
|
response = self.fast_api_client.get(self.create_url("")) |
|
assert response.status_code == 200 |
|
assert response.json() == { |
|
"id": "1", |
|
"name": "John Doe", |
|
"email": "[email protected]", |
|
"role": "user", |
|
"profile_image_url": "/user.png", |
|
} |
|
|
|
def test_update_profile(self): |
|
from open_webui.utils.utils import get_password_hash |
|
|
|
user = self.auths.insert_new_auth( |
|
email="[email protected]", |
|
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"}, |
|
) |
|
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" |
|
|
|
def test_update_password(self): |
|
from open_webui.utils.utils import get_password_hash |
|
|
|
user = self.auths.insert_new_auth( |
|
email="[email protected]", |
|
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"}, |
|
) |
|
assert response.status_code == 200 |
|
|
|
old_auth = self.auths.authenticate_user( |
|
"[email protected]", "old_password" |
|
) |
|
assert old_auth is None |
|
new_auth = self.auths.authenticate_user( |
|
"[email protected]", "new_password" |
|
) |
|
assert new_auth is not None |
|
|
|
def test_signin(self): |
|
from open_webui.utils.utils import get_password_hash |
|
|
|
user = self.auths.insert_new_auth( |
|
email="[email protected]", |
|
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": "[email protected]", "password": "password"}, |
|
) |
|
assert response.status_code == 200 |
|
data = response.json() |
|
assert data["id"] == user.id |
|
assert data["name"] == "John Doe" |
|
assert data["email"] == "[email protected]" |
|
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"), |
|
json={ |
|
"name": "John Doe", |
|
"email": "[email protected]", |
|
"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"] == "[email protected]" |
|
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"), |
|
json={ |
|
"name": "John Doe 2", |
|
"email": "[email protected]", |
|
"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"] == "[email protected]" |
|
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="[email protected]", |
|
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")) |
|
|
|
assert response.status_code == 200 |
|
assert response.json() == { |
|
"name": "John Doe", |
|
"email": "[email protected]", |
|
} |
|
|
|
def test_create_api_key_(self): |
|
user = self.auths.insert_new_auth( |
|
email="[email protected]", |
|
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")) |
|
assert response.status_code == 200 |
|
data = response.json() |
|
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="[email protected]", |
|
password="password", |
|
name="John Doe", |
|
profile_image_url="/user.png", |
|
role="admin", |
|
) |
|
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")) |
|
assert response.status_code == 200 |
|
assert response.json() == True |
|
db_user = self.users.get_user_by_id(user.id) |
|
assert db_user.api_key is None |
|
|
|
def test_get_api_key(self): |
|
user = self.auths.insert_new_auth( |
|
email="[email protected]", |
|
password="password", |
|
name="John Doe", |
|
profile_image_url="/user.png", |
|
role="admin", |
|
) |
|
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")) |
|
assert response.status_code == 200 |
|
assert response.json() == {"api_key": "abc"} |
|
|