def test_get_state_for_no_state(self): state_manager = ActorStateManager(self._fake_actor) has_value, val = _run(state_manager.try_get_state('state1')) self.assertFalse(has_value) self.assertIsNone(val) # Test if the test value is empty string self._fake_client.get_state.return_value = '' has_value, val = _run(state_manager.try_get_state('state1')) self.assertFalse(has_value) self.assertIsNone(val)
def test_get_state_for_removed_value(self): state_manager = ActorStateManager(self._fake_actor) removed = _run(state_manager.try_remove_state('state1')) self.assertTrue(removed) state = state_manager._state_change_tracker['state1'] self.assertEqual(StateChangeKind.remove, state.change_kind) has_value, val = _run(state_manager.try_get_state('state1')) self.assertFalse(has_value) self.assertIsNone(val)
def test_add_or_update_state_for_none_state_key(self): """update state value for StateChangeKind.none state """ def test_update_value(name, value): return f'{name}-{value}' state_manager = ActorStateManager(self._fake_actor) has_value, val = _run(state_manager.try_get_state('state1')) self.assertTrue(has_value) self.assertEqual('value1', val) val = _run( state_manager.add_or_update_state('state1', 'value1', test_update_value)) self.assertEqual('state1-value1', val)
def test_save_state(self): state_manager = ActorStateManager(self._fake_actor) # set states which are StateChangeKind.add _run(state_manager.set_state('state1', 'value1')) _run(state_manager.set_state('state2', 'value2')) has_value, val = _run(state_manager.try_get_state('state3')) self.assertTrue(has_value) self.assertEqual("value3", val) # set state which is StateChangeKind.remove _run(state_manager.remove_state('state4')) # set state which is StateChangeKind.update _run(state_manager.set_state('state5', 'value5')) expected = b'[{"operation":"upsert","request":{"key":"state1","value":"value1"}},{"operation":"upsert","request":{"key":"state2","value":"value2"}},{"operation":"delete","request":{"key":"state4"}},{"operation":"upsert","request":{"key":"state5","value":"value5"}}]' # noqa: E501 # Save the state def mock_save_state(actor_type, actor_id, data): self.assertEqual(expected, data) self._fake_client.save_state_transactionally.mock = mock_save_state _run(state_manager.save_state())
def test_get_state_for_existing_value(self): state_manager = ActorStateManager(self._fake_actor) has_value, val = _run(state_manager.try_get_state('state1')) self.assertTrue(has_value) self.assertEqual("value1", val)