| 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 |
|
|