@POST @Consumes("application/json") @Path("{buildingId}/tenant") public Response addTenant(@PathParam("buildingId") String buildingId, AddTenantToBuildingJsonPayload payload) { final AtomicReference<String> id = new AtomicReference<>(); addTenantToBuilding.execute(new AddTenantToBuildingRequest(buildingId, payload.getName()), id::set); return Response.created(UriBuilder.fromPath(GET_BUILDING_TENANT_URI_TEMPLATE).resolveTemplate("buildingId", buildingId).resolveTemplate("tenantId", id.get()).build()).build(); }
@Override public void execute(AddTenantToBuildingRequest request, Consumer<String> idConsumer) { Building building = buildingEntityGateway.findById(request.getBuildingId()); Tenant tenant = TenantFactory.create().createTenant(request.getTenantName()); building.addTenant(tenant); buildingEntityGateway.save(building); idConsumer.accept(tenant.getId()); } }
@PostMapping("{buildingId}/tenant") public ResponseEntity addTenant(@PathVariable("buildingId") String buildingId, @RequestBody AddTenantToBuildingJsonPayload payload) { final AtomicReference<String> id = new AtomicReference<>(); addTenantToBuilding.execute(new AddTenantToBuildingRequest(buildingId, payload.getName()), id::set); return ResponseEntity.created(new UriTemplate(GET_BUILDING_TENANT_URI_TEMPLATE).expand(buildingId, id.get()).normalize()).build(); }
@Override public String addTenantToBuilding(String buildingId, String tenantName) { SimpleConsumer<String> consumer = new SimpleConsumer<>(); addTenantToBuilding.execute(new AddTenantToBuildingRequest(buildingId, tenantName), consumer); return consumer.getContent(); }
@Test public void shouldAddTenantToBuilding() { //given Building building = BuildingFactory.create().createBuilding("buildingId", "test"); doReturn(building).when(buildingEntityGateway).findById("buildingId"); AddTenantToBuildingRequest request = new AddTenantToBuildingRequest("buildingId", "tenantName"); //when addTenantToBuilding.execute(request, s -> {}); //then assertThat(building.getTenants()).hasSize(1); } }