in genie-web/src/integTest/java/com/netflix/genie/web/apis/rest/v3/controllers/CommandRestControllerIntegrationTest.java [124:245]
void canCreateCommandWithoutId() throws Exception {
final RestDocumentationFilter createFilter = RestAssuredRestDocumentation.document(
"{class-name}/{method-name}/{step}/",
Snippets.CONTENT_TYPE_HEADER, // Request headers
Snippets.getCommandRequestPayload(), // Request fields
Snippets.LOCATION_HEADER // Response headers
);
final String id = this.createConfigResource(
new Command.Builder(NAME, USER, VERSION, CommandStatus.ACTIVE, EXECUTABLE_AND_ARGS)
.withDescription(DESCRIPTION)
.withMemory(MEMORY)
.withConfigs(CONFIGS)
.withDependencies(DEPENDENCIES)
.withTags(TAGS)
.withClusterCriteria(CLUSTER_CRITERIA)
.build(),
createFilter
);
final RestDocumentationFilter getFilter = RestAssuredRestDocumentation.document(
"{class-name}/{method-name}/{step}/",
Snippets.ID_PATH_PARAM, // path parameters
Snippets.HAL_CONTENT_TYPE_HEADER, // response headers
Snippets.getCommandResponsePayload(), // response payload
Snippets.COMMAND_LINKS // response links
);
RestAssured
.given(this.getRequestSpecification())
.filter(getFilter)
.when()
.port(this.port)
.get(COMMANDS_API + "/{id}", id)
.then()
.statusCode(Matchers.is(HttpStatus.OK.value()))
.contentType(Matchers.containsString(MediaTypes.HAL_JSON_VALUE))
.body(ID_PATH, Matchers.is(id))
.body(CREATED_PATH, Matchers.notNullValue())
.body(UPDATED_PATH, Matchers.notNullValue())
.body(NAME_PATH, Matchers.is(NAME))
.body(USER_PATH, Matchers.is(USER))
.body(VERSION_PATH, Matchers.is(VERSION))
.body(STATUS_PATH, Matchers.is(CommandStatus.ACTIVE.toString()))
.body(EXECUTABLE_PATH, Matchers.is(EXECUTABLE))
.body(CHECK_DELAY_PATH, Matchers.is((int) Command.DEFAULT_CHECK_DELAY))
.body(DESCRIPTION_PATH, Matchers.is(DESCRIPTION))
.body(MEMORY_PATH, Matchers.is(MEMORY))
.body(CONFIGS_PATH, Matchers.hasSize(2))
.body(CONFIGS_PATH, Matchers.hasItems(CONFIG_1, CONFIG_2))
.body(DEPENDENCIES_PATH, Matchers.hasSize(2))
.body(DEPENDENCIES_PATH, Matchers.hasItems(DEP_1, DEP_2))
.body(TAGS_PATH, Matchers.hasSize(4))
.body(TAGS_PATH, Matchers.hasItem("genie.id:" + id))
.body(TAGS_PATH, Matchers.hasItem("genie.name:" + NAME))
.body(TAGS_PATH, Matchers.hasItems(TAG_1, TAG_2))
.body(CLUSTER_CRITERIA_PATH, Matchers.hasSize(CLUSTER_CRITERIA.size()))
.body(
CLUSTER_CRITERIA_PATH + "[0].id",
Matchers.is(CLUSTER_CRITERIA.get(0).getId().orElse(null))
)
.body(
CLUSTER_CRITERIA_PATH + "[0].name",
Matchers.is(CLUSTER_CRITERIA.get(0).getName().orElse(null))
)
.body(
CLUSTER_CRITERIA_PATH + "[0].version",
Matchers.is(CLUSTER_CRITERIA.get(0).getVersion().orElse(null))
)
.body(
CLUSTER_CRITERIA_PATH + "[0].status",
Matchers.is(CLUSTER_CRITERIA.get(0).getStatus().orElse(null))
)
.body(
CLUSTER_CRITERIA_PATH + "[0].tags",
Matchers.containsInAnyOrder(CLUSTER_CRITERIA.get(0).getTags().toArray(new String[0]))
)
.body(
CLUSTER_CRITERIA_PATH + "[1].id",
Matchers.is(CLUSTER_CRITERIA.get(1).getId().orElse(null))
)
.body(
CLUSTER_CRITERIA_PATH + "[1].name",
Matchers.is(CLUSTER_CRITERIA.get(1).getName().orElse(null))
)
.body(
CLUSTER_CRITERIA_PATH + "[1].version",
Matchers.is(CLUSTER_CRITERIA.get(1).getVersion().orElse(null))
)
.body(
CLUSTER_CRITERIA_PATH + "[1].status",
Matchers.is(CLUSTER_CRITERIA.get(1).getStatus().orElse(null))
)
.body(
CLUSTER_CRITERIA_PATH + "[1].tags",
Matchers.containsInAnyOrder(CLUSTER_CRITERIA.get(1).getTags().toArray(new String[0]))
)
.body(LINKS_PATH + ".keySet().size()", Matchers.is(3))
.body(LINKS_PATH, Matchers.hasKey(SELF_LINK_KEY))
.body(LINKS_PATH, Matchers.hasKey(CLUSTERS_LINK_KEY))
.body(LINKS_PATH, Matchers.hasKey(APPLICATIONS_LINK_KEY))
.body(
COMMAND_CLUSTERS_LINK_PATH,
EntityLinkMatcher.matchUri(
COMMANDS_API,
CLUSTERS_LINK_KEY,
CLUSTERS_OPTIONAL_HAL_LINK_PARAMETERS,
id
)
)
.body(
COMMAND_APPS_LINK_PATH,
EntityLinkMatcher.matchUri(
COMMANDS_API,
APPLICATIONS_LINK_KEY,
null,
id
)
);
Assertions.assertThat(this.commandRepository.count()).isEqualTo(1L);
}