From 6888effef202078add4c9d82d52c5d48bb191feb Mon Sep 17 00:00:00 2001 From: Paul Hernandez <60959+phernandez@users.noreply.github.com> Date: Sat, 24 Jan 2026 11:37:05 -0600 Subject: [PATCH] fix: correct get_default_project() query to check for True instead of not NULL (#521) Signed-off-by: phernandez Co-authored-by: Claude Opus 4.5 --- .../repository/project_repository.py | 2 +- tests/repository/test_project_repository.py | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/basic_memory/repository/project_repository.py b/src/basic_memory/repository/project_repository.py index 001e20a4..6d414ca4 100644 --- a/src/basic_memory/repository/project_repository.py +++ b/src/basic_memory/repository/project_repository.py @@ -88,7 +88,7 @@ class ProjectRepository(Repository[Project]): async def get_default_project(self) -> Optional[Project]: """Get the default project (the one marked as is_default=True).""" - query = self.select().where(Project.is_default.is_not(None)) + query = self.select().where(Project.is_default.is_(True)) return await self.find_one(query) async def get_active_projects(self) -> Sequence[Project]: diff --git a/tests/repository/test_project_repository.py b/tests/repository/test_project_repository.py index 66af8969..0a260ea4 100644 --- a/tests/repository/test_project_repository.py +++ b/tests/repository/test_project_repository.py @@ -136,6 +136,39 @@ async def test_get_default_project(project_repository: ProjectRepository, test_p assert default_project.is_default is True +@pytest.mark.asyncio +async def test_get_default_project_with_false_values(project_repository: ProjectRepository): + """Test that get_default_project ignores projects with is_default=False. + + Regression test for bug where is_not(None) matched both True and False, + causing MultipleResultsFound when multiple projects had different boolean values. + """ + # Create projects with explicit is_default values + project_true = await project_repository.create({ + "name": "Default Project", + "path": "/default/path", + "is_default": True, + }) + + await project_repository.create({ + "name": "Not Default Project", + "path": "/not-default/path", + "is_default": False, + }) + + await project_repository.create({ + "name": "Null Default Project", + "path": "/null/path", + "is_default": None, + }) + + # Should return only the project with is_default=True + default = await project_repository.get_default_project() + assert default is not None + assert default.id == project_true.id + assert default.name == "Default Project" + + @pytest.mark.asyncio async def test_get_active_projects(project_repository: ProjectRepository): """Test getting all active projects."""