Spaces:
Sleeping
Sleeping
| from unittest.mock import AsyncMock, patch | |
| import pytest | |
| from fastapi.testclient import TestClient | |
| def client(): | |
| """Create test client after environment variables have been cleared by conftest.""" | |
| from api.main import app | |
| return TestClient(app) | |
| class TestNoteCreation: | |
| """Test suite for Note API endpoints.""" | |
| def test_create_note_returns_command_id(self, mock_note_cls, client): | |
| """Test that creating a note returns the embed command_id.""" | |
| mock_note = AsyncMock() | |
| mock_note.id = "note:abc123" | |
| mock_note.title = "Test Note" | |
| mock_note.content = "Some content" | |
| mock_note.note_type = "human" | |
| mock_note.created = "2026-01-01T00:00:00Z" | |
| mock_note.updated = "2026-01-01T00:00:00Z" | |
| mock_note.save.return_value = "command:embed123" | |
| mock_note.add_to_notebook = AsyncMock() | |
| mock_note_cls.return_value = mock_note | |
| response = client.post( | |
| "/api/notes", | |
| json={"content": "Some content", "note_type": "human"}, | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["command_id"] == "command:embed123" | |
| assert data["id"] == "note:abc123" | |
| def test_create_note_command_id_none_when_no_content_embedding( | |
| self, mock_note_cls, client | |
| ): | |
| """Test that command_id is None when save returns None (no embedding).""" | |
| mock_note = AsyncMock() | |
| mock_note.id = "note:abc456" | |
| mock_note.title = "Empty Note" | |
| mock_note.content = "Some content" | |
| mock_note.note_type = "human" | |
| mock_note.created = "2026-01-01T00:00:00Z" | |
| mock_note.updated = "2026-01-01T00:00:00Z" | |
| mock_note.save.return_value = None | |
| mock_note.add_to_notebook = AsyncMock() | |
| mock_note_cls.return_value = mock_note | |
| response = client.post( | |
| "/api/notes", | |
| json={"content": "Some content", "note_type": "human"}, | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["command_id"] is None | |
| class TestNoteUpdate: | |
| """Test suite for Note update endpoint.""" | |
| def test_update_note_returns_command_id(self, mock_note_cls, client): | |
| """Test that updating a note returns the embed command_id.""" | |
| mock_note = AsyncMock() | |
| mock_note.id = "note:abc123" | |
| mock_note.title = "Test Note" | |
| mock_note.content = "Original content" | |
| mock_note.note_type = "human" | |
| mock_note.created = "2026-01-01T00:00:00Z" | |
| mock_note.updated = "2026-01-01T00:00:00Z" | |
| mock_note.save.return_value = "command:embed789" | |
| mock_note_cls.get = AsyncMock(return_value=mock_note) | |
| response = client.put( | |
| "/api/notes/note:abc123", | |
| json={"content": "Updated content"}, | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["command_id"] == "command:embed789" | |
| def test_update_note_command_id_none_when_no_embedding( | |
| self, mock_note_cls, client | |
| ): | |
| """Test that command_id is None on update when no embedding is triggered.""" | |
| mock_note = AsyncMock() | |
| mock_note.id = "note:abc123" | |
| mock_note.title = "Test Note" | |
| mock_note.content = "Some content" | |
| mock_note.note_type = "human" | |
| mock_note.created = "2026-01-01T00:00:00Z" | |
| mock_note.updated = "2026-01-01T00:00:00Z" | |
| mock_note.save.return_value = None | |
| mock_note_cls.get = AsyncMock(return_value=mock_note) | |
| response = client.put( | |
| "/api/notes/note:abc123", | |
| json={"title": "Updated Title"}, | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["command_id"] is None | |