void canGetClustersForCommand()

in genie-web/src/integTest/java/com/netflix/genie/web/apis/rest/v3/controllers/CommandRestControllerIntegrationTest.java [1419:1511]


    void canGetClustersForCommand() throws Exception {
        final String placeholder = UUID.randomUUID().toString();
        final String cluster1Id = this.createConfigResource(
            new Cluster.Builder(placeholder, placeholder, placeholder, ClusterStatus.UP).build(),
            null
        );
        final String cluster2Id = this.createConfigResource(
            new Cluster.Builder(placeholder, placeholder, placeholder, ClusterStatus.OUT_OF_SERVICE).build(),
            null
        );
        final String cluster3Id = this.createConfigResource(
            new Cluster
                .Builder(placeholder, placeholder, placeholder, ClusterStatus.TERMINATED)
                .build(),
            null
        );

        final String commandId = this.createConfigResource(
            new Command
                .Builder(NAME, USER, VERSION, CommandStatus.ACTIVE, EXECUTABLE_AND_ARGS)
                .withClusterCriteria(
                    Lists.newArrayList(
                        new Criterion.Builder().withId(cluster1Id).build(),
                        new Criterion.Builder().withId(cluster2Id).build(),
                        new Criterion.Builder().withId(cluster3Id).build()
                    )
                )
                .build(),
            null
        );

        Assertions
            .assertThat(
                Arrays.stream(
                        GenieObjectMapper.getMapper().readValue(
                            RestAssured
                                .given(this.getRequestSpecification())
                                .when()
                                .port(this.port)
                                .get(COMMANDS_API + "/{id}/clusters", commandId)
                                .then()
                                .statusCode(Matchers.is(HttpStatus.OK.value()))
                                .contentType(Matchers.containsString(MediaTypes.HAL_JSON_VALUE))
                                .extract()
                                .asByteArray(),
                            new TypeReference<EntityModel<Cluster>[]>() {
                            }
                        )
                    )
                    .map(EntityModel::getContent)
                    .filter(Objects::nonNull)
                    .map(Cluster::getId)
                    .filter(Optional::isPresent)
                    .map(Optional::get)
                    .collect(Collectors.toList())
            )
            .containsExactlyInAnyOrder(cluster1Id, cluster2Id, cluster3Id);

        // Test filtering
        final RestDocumentationFilter getFilter = RestAssuredRestDocumentation.document(
            "{class-name}/{method-name}/{step}/",
            Snippets.ID_PATH_PARAM, // Path parameters
            RequestDocumentation.requestParameters(
                RequestDocumentation
                    .parameterWithName("status")
                    .description("The status of clusters to search for")
                    .attributes(
                        Attributes.key(Snippets.CONSTRAINTS).value(CommandStatus.values())
                    )
                    .optional()
            ), // Query Parameters
            Snippets.HAL_CONTENT_TYPE_HEADER, // Response Headers
            PayloadDocumentation.responseFields(
                PayloadDocumentation
                    .subsectionWithPath("[]")
                    .description("The list of clusters found")
                    .attributes(Snippets.EMPTY_CONSTRAINTS)
            )
        );

        RestAssured
            .given(this.getRequestSpecification())
            .filter(getFilter)
            .param("status", ClusterStatus.UP.toString())
            .when()
            .port(this.port)
            .get(COMMANDS_API + "/{id}/clusters", commandId)
            .then()
            .statusCode(Matchers.is(HttpStatus.OK.value()))
            .contentType(Matchers.containsString(MediaTypes.HAL_JSON_VALUE))
            .body("$", Matchers.hasSize(1))
            .body("[0].id", Matchers.is(cluster1Id));
    }