diff --git a/src/primaite/game/agent/actions.py b/src/primaite/game/agent/actions.py index dbf1b6a2..6123da50 100644 --- a/src/primaite/game/agent/actions.py +++ b/src/primaite/game/agent/actions.py @@ -303,8 +303,7 @@ class NodeFileDeleteAction(NodeFileAbstractAction): file_name = self.manager.get_file_name_by_idx(node_idx=node_id, folder_idx=folder_id, file_idx=file_id) if node_name is None or folder_name is None or file_name is None: return ["do_nothing"] - return ["do_nothing"] - # return ["network", "node", node_name, "file_system", "delete", "file", folder_name, file_name] + return ["network", "node", node_name, "file_system", "delete", "file", folder_name, file_name] class NodeFileRepairAction(NodeFileAbstractAction): diff --git a/src/primaite/simulator/file_system/file_system.py b/src/primaite/simulator/file_system/file_system.py index 48ea587d..2ab3b005 100644 --- a/src/primaite/simulator/file_system/file_system.py +++ b/src/primaite/simulator/file_system/file_system.py @@ -78,12 +78,12 @@ class FileSystem(SimComponent): self._delete_manager.add_request( name="file", request_type=RequestType( - func=lambda request, context: self.delete_file_by_id(folder_uuid=request[0], file_uuid=request[1]) + func=lambda request, context: self.delete_file(folder_name=request[0], file_name=request[1]) ), ) self._delete_manager.add_request( name="folder", - request_type=RequestType(func=lambda request, context: self.delete_folder_by_id(folder_uuid=request[0])), + request_type=RequestType(func=lambda request, context: self.delete_folder(folder_name=request[0])), ) rm.add_request( name="delete", diff --git a/tests/integration_tests/game_layer/test_actions.py b/tests/integration_tests/game_layer/test_actions.py index 7527151c..e771dbd2 100644 --- a/tests/integration_tests/game_layer/test_actions.py +++ b/tests/integration_tests/game_layer/test_actions.py @@ -526,3 +526,31 @@ def test_node_file_scan_integration(game_and_agent: Tuple[PrimaiteGame, ProxyAge game.step() assert file.health_status == FileSystemItemHealthStatus.CORRUPT assert file.visible_health_status == FileSystemItemHealthStatus.CORRUPT + + +def test_node_file_delete_integration(game_and_agent: Tuple[PrimaiteGame, ProxyAgent]): + """Test that a file can be deleted by the agent.""" + game, agent = game_and_agent + + # 1: assert the file is there + client_1 = game.simulation.network.get_node_by_hostname("client_1") + file = client_1.file_system.get_file("downloads", "cat.png") + assert file is not None + assert not file.deleted + + # 2: delete the file + action = ( + "NODE_FILE_DELETE", + { + "node_id": 0, # client_1 + "folder_id": 0, # downloads + "file_id": 0, # cat.png + }, + ) + agent.store_action(action) + game.step() + + # 3. Check that the file is not there any more + assert not client_1.file_system.get_file("downloads", "cat.png") + # 3.1 (but with the reference to the original file, we can check that deleted flag is True ) + assert file.deleted