@ExecuteOn(TaskExecutors.IO)
    @Get(value = "{id}/graph")
    @Operation(tags = {"Blueprints"}, summary = "Get a blueprint graph")
    public Map<String, Object> blueprintGraph(
        @Parameter(description = "The blueprint id") String id,
        HttpRequest<?> httpRequest
    ) throws URISyntaxException {
        return fastForwardToKestraApi(httpRequest, "/v1/blueprints/" + id + "/graph", Argument.mapOf(String.class, Object.class));
    }
@SuppressWarnings("unchecked")
    @Test
    void blueprintGraph(WireMockRuntimeInfo wmRuntimeInfo) {
        stubFor(get(urlMatching("/v1/blueprints/id_1/graph.*"))
            .willReturn(aResponse()
                .withHeader("Content-Type", "application/json")
                .withBodyFile("blueprint-graph.json"))
        );

        Map<String, Object> graph = client.toBlocking().retrieve(
            HttpRequest.GET("/api/v1/blueprints/community/id_1/graph"),
            Argument.mapOf(String.class, Object.class)
        );

        List<Map<String, Object>> nodes = (List<Map<String, Object>>) graph.get("nodes");
        List<Map<String, Object>> edges = (List<Map<String, Object>>) graph.get("edges");
        List<Map<String, Object>> clusters = (List<Map<String, Object>>) graph.get("clusters");
        assertThat(nodes.size(), is(12));
        assertThat(nodes.stream().filter(abstractGraph -> abstractGraph.get("uid").equals("3mTDtNoUxYIFaQtgjEg28_root")).count(), is(1L));
        assertThat(edges.size(), is(16));
        assertThat(clusters.size(), is(1));

        WireMock wireMock = wmRuntimeInfo.getWireMock();
        wireMock.verifyThat(getRequestedFor(urlEqualTo("/v1/blueprints/id_1/graph")));
    }