From 5c94afde9408d1031f31e23d38bee1dc100134db Mon Sep 17 00:00:00 2001 From: Akanksha Trehun Date: Wed, 16 Sep 2026 01:46:03 +0530 Subject: [PATCH] Fix get_state_names omitting untouched initstate keys in MockStateManager Signed-off-by: Akanksha Trehun --- dapr/actor/runtime/mock_state_manager.py | 9 +++------ tests/actor/test_mock_state_manager.py | 11 +++++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/dapr/actor/runtime/mock_state_manager.py b/dapr/actor/runtime/mock_state_manager.py index 77696f77f..2613cc1e0 100644 --- a/dapr/actor/runtime/mock_state_manager.py +++ b/dapr/actor/runtime/mock_state_manager.py @@ -192,13 +192,10 @@ async def add_or_update_state( return value async def get_state_names(self) -> List[str]: - # TODO: Get all state names from Dapr once implemented. + # _mock_state is kept in sync with every add/set/remove, including states + # seeded via initstate that the tracker never sees, so it's the source of truth. def append_names_sync(): - return [ - key - for key, value in self._default_state_change_tracker.items() - if value.change_kind != StateChangeKind.remove - ] + return list(self._mock_state.keys()) default_loop = asyncio.get_running_loop() return await default_loop.run_in_executor(None, append_names_sync) diff --git a/tests/actor/test_mock_state_manager.py b/tests/actor/test_mock_state_manager.py index 0faf659eb..e5678e448 100644 --- a/tests/actor/test_mock_state_manager.py +++ b/tests/actor/test_mock_state_manager.py @@ -85,6 +85,17 @@ async def test_get_state_names_excludes_only_removed(self): self.assertCountEqual(names, ['state']) + async def test_get_state_names_includes_untouched_initstate(self): + """A state seeded via initstate but never read or written this turn + never enters the change tracker, so get_state_names must still + report it since contains_state already does.""" + mock_actor = create_mock_actor(MockTestActor, 'test', {'state': 5, 'other': 6}) + state_manager = mock_actor._state_manager + + names = await state_manager.get_state_names() + + self.assertCountEqual(names, ['state', 'other']) + async def test_readd_after_remove_updates_mock_state(self): """try_add_state on a state removed earlier this turn must make the new value visible in _mock_state, matching add_or_update_state's