### Question:
PostSubscribeToPersistentSubnets implements Handler { @OpenApi( path = ROUTE, method = HttpMethod.POST, summary = "Subscribe beacon node persistently to a list of subnets.", tags = {TAG_VALIDATOR}, requestBody = @OpenApiRequestBody( content = {@OpenApiContent(from = SubnetSubscription.class, isArray = true)}), responses = { @OpenApiResponse(status = RES_OK, description = "Subscribed to subnets."), @OpenApiResponse(status = RES_BAD_REQUEST, description = "Invalid request syntax."), @OpenApiResponse(status = RES_INTERNAL_ERROR, description = "Beacon node internal error.") }) @Override public void handle(Context ctx) throws Exception { try { final List<SubnetSubscription> request = jsonProvider.getObjectMapper().readValue(ctx.body(), new TypeReference<>() {}); provider.subscribeToPersistentSubnets(request); ctx.status(SC_OK); } catch (final JsonMappingException e) { ctx.result(jsonProvider.objectToJSON(new BadRequest(e.getMessage()))); ctx.status(SC_BAD_REQUEST); } catch (Exception e) { ctx.status(SC_INTERNAL_SERVER_ERROR); } } PostSubscribeToPersistentSubnets(
      final ValidatorDataProvider provider, final JsonProvider jsonProvider); @OpenApi( path = ROUTE, method = HttpMethod.POST, summary = "Subscribe beacon node persistently to a list of subnets.", tags = {TAG_VALIDATOR}, requestBody = @OpenApiRequestBody( content = {@OpenApiContent(from = SubnetSubscription.class, isArray = true)}), responses = { @OpenApiResponse(status = RES_OK, description = "Subscribed to subnets."), @OpenApiResponse(status = RES_BAD_REQUEST, description = "Invalid request syntax."), @OpenApiResponse(status = RES_INTERNAL_ERROR, description = "Beacon node internal error.") }) @Override void handle(Context ctx); static final String ROUTE; }### Answer:
@Test public void shouldReturnBadRequestWhenRequestBodyIsInvalid() throws Exception { when(context.body()).thenReturn("{\"foo\": \"bar\"}"); handler.handle(context); verify(context).status(SC_BAD_REQUEST); }
@Test public void shouldReturnServerErrorWhenProviderThrowsUnmappedException() throws Exception { final List<SubnetSubscription> request = List.of(new SubnetSubscription(1, UInt64.ONE)); when(context.body()).thenReturn(jsonProvider.objectToJSON(request)); doThrow(new RuntimeException()).when(provider).subscribeToPersistentSubnets(anyList()); handler.handle(context); verify(context).status(SC_INTERNAL_SERVER_ERROR); }
@Test @SuppressWarnings("unchecked") public void shouldReturnSuccessWhenSubscriptionToBeaconCommitteeIsSuccessful() throws Exception { final List<SubnetSubscription> request = List.of(new SubnetSubscription(1, UInt64.ONE)); final String requestJson = jsonProvider.objectToJSON(request); when(context.body()).thenReturn(requestJson); handler.handle(context); ArgumentCaptor<List<SubnetSubscription>> captor = ArgumentCaptor.forClass(List.class); verify(provider).subscribeToPersistentSubnets(captor.capture()); verify(context).status(SC_OK); List<SubnetSubscription> receivedRequest = captor.getValue(); assertThat(receivedRequest).usingRecursiveComparison().isEqualTo(request); }