@POST @Consumes("application/json") public Response create(CreateBuildingJsonPayload payload) { final AtomicReference<String> id = new AtomicReference<>(); createBuilding.execute(new CreateBuildingRequest(payload.getName()), id::set); return Response.created(UriBuilder.fromPath(GET_SINGLE_BUILDING_URI_TEMPLATE).resolveTemplate("buildingId", id.get()).build()) .header("X-Created-Id", id.get()) .build(); }
@Override public void execute(CreateBuildingRequest request, Consumer<String> idConsumer) { Building building = BuildingFactory.create().createBuilding(request.getName()); idConsumer.accept(buildingEntityGateway.save(building)); } }
@PostMapping public ResponseEntity create(@RequestBody CreateBuildingJsonPayload payload) { final AtomicReference<String> id = new AtomicReference<>(); createBuilding.execute(new CreateBuildingRequest(payload.getName()), id::set); return ResponseEntity.created(new UriTemplate(GET_SINGLE_BUILDING_URI_TEMPLATE).expand(id.get()).normalize()) .header("X-Created-Id", id.get()) .build(); }
@Override public String createBuilding(String name) { SimpleConsumer<String> consumer = new SimpleConsumer<>(); createBuilding.execute(new CreateBuildingRequest(name), consumer); return consumer.getContent(); }
@Test public void shouldAddCreateBuilding() { //given ArgumentCaptor<Building> buildingArg = ArgumentCaptor.forClass(Building.class); doReturn("buildingId").when(buildingEntityGateway).save(buildingArg.capture()); CreateBuildingRequest request = new CreateBuildingRequest("buildingName"); //when final AtomicReference<String> id = new AtomicReference<>(); createBuilding.execute(request, id::set); //then assertThat(id.get()).isEqualTo("buildingId"); assertThat(buildingArg.getValue().getName()).isEqualTo("buildingName"); } }