### Question:
GraphRemoveNodePropertiesProc extends CatalogProc { @NotNull private Long removeNodeProperties(GraphStore graphStore, GraphRemoveNodePropertiesConfig config) { Collection<NodeLabel> validNodeLabels = config.validNodeLabels(graphStore); long sum = validNodeLabels.stream() .mapToLong(nodeLabel -> config.nodeProperties().stream() .mapToLong(property -> graphStore.nodePropertyValues(nodeLabel, property).size()) .sum()) .sum(); validNodeLabels.forEach(label -> config.nodeProperties().forEach(property -> graphStore.removeNodeProperty(label, property)) ); return sum; }  @Procedure(name = "gds.graph.removeNodeProperties", mode = READ) @Description("Removes node properties from an in-memory graph.") Stream<Result> run(
        @Name(value = "graphName") String graphName,
        @Name(value = "nodeProperties") List<String> nodeProperties,
        @Name(value = "nodeLabels", defaultValue = "['*']") List<String> nodeLabels,
        @Name(value = "configuration", defaultValue = "{}") Map<String, Object> configuration
    );  }### Answer:
@Test void removeNodeProperties() { String graphWriteQuery = formatWithLocale( "CALL gds.graph.removeNodeProperties(" + " '%s', " + " ['nodeProp1', 'nodeProp2']" + ") YIELD graphName, nodeProperties, propertiesRemoved", TEST_GRAPH_SAME_PROPERTIES ); runQueryWithRowConsumer(graphWriteQuery, row -> { assertEquals(TEST_GRAPH_SAME_PROPERTIES, row.getString("graphName")); assertEquals(Arrays.asList("nodeProp1", "nodeProp2"), row.get("nodeProperties")); assertEquals(12L, row.getNumber("propertiesRemoved").longValue()); }); }