Spaces:
Paused
Paused
| import uuid | |
| from test.util.abstract_integration_test import AbstractPostgresTest | |
| from test.util.mock_user import mock_webui_user | |
| class TestChats(AbstractPostgresTest): | |
| BASE_PATH = "/api/v1/chats" | |
| def setup_class(cls): | |
| super().setup_class() | |
| def setup_method(self): | |
| super().setup_method() | |
| from open_webui.models.chats import ChatForm, Chats | |
| self.chats = Chats | |
| self.chats.insert_new_chat( | |
| "2", | |
| ChatForm( | |
| **{ | |
| "chat": { | |
| "name": "chat1", | |
| "description": "chat1 description", | |
| "tags": ["tag1", "tag2"], | |
| "history": {"currentId": "1", "messages": []}, | |
| } | |
| } | |
| ), | |
| ) | |
| def test_get_session_user_chat_list(self): | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.get(self.create_url("/")) | |
| assert response.status_code == 200 | |
| first_chat = response.json()[0] | |
| assert first_chat["id"] is not None | |
| assert first_chat["title"] == "New Chat" | |
| assert first_chat["created_at"] is not None | |
| assert first_chat["updated_at"] is not None | |
| def test_delete_all_user_chats(self): | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.delete(self.create_url("/")) | |
| assert response.status_code == 200 | |
| assert len(self.chats.get_chats()) == 0 | |
| def test_get_user_chat_list_by_user_id(self): | |
| with mock_webui_user(id="3"): | |
| response = self.fast_api_client.get(self.create_url("/list/user/2")) | |
| assert response.status_code == 200 | |
| first_chat = response.json()[0] | |
| assert first_chat["id"] is not None | |
| assert first_chat["title"] == "New Chat" | |
| assert first_chat["created_at"] is not None | |
| assert first_chat["updated_at"] is not None | |
| def test_create_new_chat(self): | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.post( | |
| self.create_url("/new"), | |
| json={ | |
| "chat": { | |
| "name": "chat2", | |
| "description": "chat2 description", | |
| "tags": ["tag1", "tag2"], | |
| } | |
| }, | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["archived"] is False | |
| assert data["chat"] == { | |
| "name": "chat2", | |
| "description": "chat2 description", | |
| "tags": ["tag1", "tag2"], | |
| } | |
| assert data["user_id"] == "2" | |
| assert data["id"] is not None | |
| assert data["share_id"] is None | |
| assert data["title"] == "New Chat" | |
| assert data["updated_at"] is not None | |
| assert data["created_at"] is not None | |
| assert len(self.chats.get_chats()) == 2 | |
| def test_get_user_chats(self): | |
| self.test_get_session_user_chat_list() | |
| def test_get_user_archived_chats(self): | |
| self.chats.archive_all_chats_by_user_id("2") | |
| from open_webui.internal.db import Session | |
| Session.commit() | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.get(self.create_url("/all/archived")) | |
| assert response.status_code == 200 | |
| first_chat = response.json()[0] | |
| assert first_chat["id"] is not None | |
| assert first_chat["title"] == "New Chat" | |
| assert first_chat["created_at"] is not None | |
| assert first_chat["updated_at"] is not None | |
| def test_get_all_user_chats_in_db(self): | |
| with mock_webui_user(id="4"): | |
| response = self.fast_api_client.get(self.create_url("/all/db")) | |
| assert response.status_code == 200 | |
| assert len(response.json()) == 1 | |
| def test_get_archived_session_user_chat_list(self): | |
| self.test_get_user_archived_chats() | |
| def test_archive_all_chats(self): | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.post(self.create_url("/archive/all")) | |
| assert response.status_code == 200 | |
| assert len(self.chats.get_archived_chats_by_user_id("2")) == 1 | |
| def test_get_shared_chat_by_id(self): | |
| chat_id = self.chats.get_chats()[0].id | |
| self.chats.update_chat_share_id_by_id(chat_id, chat_id) | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.get(self.create_url(f"/share/{chat_id}")) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["id"] == chat_id | |
| assert data["chat"] == { | |
| "name": "chat1", | |
| "description": "chat1 description", | |
| "tags": ["tag1", "tag2"], | |
| "history": {"currentId": "1", "messages": []}, | |
| } | |
| assert data["id"] == chat_id | |
| assert data["share_id"] == chat_id | |
| assert data["title"] == "New Chat" | |
| def test_get_chat_by_id(self): | |
| chat_id = self.chats.get_chats()[0].id | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.get(self.create_url(f"/{chat_id}")) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["id"] == chat_id | |
| assert data["chat"] == { | |
| "name": "chat1", | |
| "description": "chat1 description", | |
| "tags": ["tag1", "tag2"], | |
| "history": {"currentId": "1", "messages": []}, | |
| } | |
| assert data["share_id"] is None | |
| assert data["title"] == "New Chat" | |
| assert data["user_id"] == "2" | |
| def test_update_chat_by_id(self): | |
| chat_id = self.chats.get_chats()[0].id | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.post( | |
| self.create_url(f"/{chat_id}"), | |
| json={ | |
| "chat": { | |
| "name": "chat2", | |
| "description": "chat2 description", | |
| "tags": ["tag2", "tag4"], | |
| "title": "Just another title", | |
| } | |
| }, | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["id"] == chat_id | |
| assert data["chat"] == { | |
| "name": "chat2", | |
| "title": "Just another title", | |
| "description": "chat2 description", | |
| "tags": ["tag2", "tag4"], | |
| "history": {"currentId": "1", "messages": []}, | |
| } | |
| assert data["share_id"] is None | |
| assert data["title"] == "Just another title" | |
| assert data["user_id"] == "2" | |
| def test_delete_chat_by_id(self): | |
| chat_id = self.chats.get_chats()[0].id | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.delete(self.create_url(f"/{chat_id}")) | |
| assert response.status_code == 200 | |
| assert response.json() is True | |
| def test_clone_chat_by_id(self): | |
| chat_id = self.chats.get_chats()[0].id | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.get(self.create_url(f"/{chat_id}/clone")) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["id"] != chat_id | |
| assert data["chat"] == { | |
| "branchPointMessageId": "1", | |
| "description": "chat1 description", | |
| "history": {"currentId": "1", "messages": []}, | |
| "name": "chat1", | |
| "originalChatId": chat_id, | |
| "tags": ["tag1", "tag2"], | |
| "title": "Clone of New Chat", | |
| } | |
| assert data["share_id"] is None | |
| assert data["title"] == "Clone of New Chat" | |
| assert data["user_id"] == "2" | |
| def test_archive_chat_by_id(self): | |
| chat_id = self.chats.get_chats()[0].id | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.get(self.create_url(f"/{chat_id}/archive")) | |
| assert response.status_code == 200 | |
| chat = self.chats.get_chat_by_id(chat_id) | |
| assert chat.archived is True | |
| def test_share_chat_by_id(self): | |
| chat_id = self.chats.get_chats()[0].id | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.post(self.create_url(f"/{chat_id}/share")) | |
| assert response.status_code == 200 | |
| chat = self.chats.get_chat_by_id(chat_id) | |
| assert chat.share_id is not None | |
| def test_delete_shared_chat_by_id(self): | |
| chat_id = self.chats.get_chats()[0].id | |
| share_id = str(uuid.uuid4()) | |
| self.chats.update_chat_share_id_by_id(chat_id, share_id) | |
| with mock_webui_user(id="2"): | |
| response = self.fast_api_client.delete(self.create_url(f"/{chat_id}/share")) | |
| assert response.status_code | |
| chat = self.chats.get_chat_by_id(chat_id) | |
| assert chat.share_id is None | |