### Question:
RemoteValidatorApiHandler implements ValidatorApiChannel { @Override public SafeFuture<Optional<BeaconBlock>> createUnsignedBlock( final UInt64 slot, final BLSSignature randaoReveal, final Optional<Bytes32> graffiti) { return asyncRunner.runAsync( () -> { final tech.pegasys.teku.api.schema.BLSSignature schemaBLSSignature = new tech.pegasys.teku.api.schema.BLSSignature(randaoReveal); return apiClient .createUnsignedBlock(slot, schemaBLSSignature, graffiti) .map(tech.pegasys.teku.api.schema.BeaconBlock::asInternalBeaconBlock); }); } RemoteValidatorApiHandler(final ServiceConfig config, final AsyncRunner asyncRunner); @VisibleForTesting  RemoteValidatorApiHandler(
      final ValidatorRestApiClient apiClient, final AsyncRunner asyncRunner); @Override SafeFuture<Optional<ForkInfo>> getForkInfo(); @Override SafeFuture<Optional<UInt64>> getGenesisTime(); @Override SafeFuture<Optional<List<ValidatorDuties>>> getDuties(
      final UInt64 epoch, final Collection<BLSPublicKey> publicKeys); @Override SafeFuture<Optional<List<AttesterDuties>>> getAttestationDuties(
      final UInt64 epoch, final Collection<Integer> validatorIndexes); @Override SafeFuture<Optional<List<ProposerDuties>>> getProposerDuties(final UInt64 epoch); @Override SafeFuture<Optional<Attestation>> createUnsignedAttestation(
      final UInt64 slot, final int committeeIndex); @Override void sendSignedAttestation(final Attestation attestation); @Override void sendSignedAttestation(
      final Attestation attestation, final Optional<Integer> validatorIndex); @Override SafeFuture<Optional<BeaconBlock>> createUnsignedBlock(
      final UInt64 slot, final BLSSignature randaoReveal, final Optional<Bytes32> graffiti); @Override void sendSignedBlock(final SignedBeaconBlock block); @Override SafeFuture<Optional<Attestation>> createAggregate(final Bytes32 attestationHashTreeRoot); @Override void sendAggregateAndProof(final SignedAggregateAndProof aggregateAndProof); @Override void subscribeToBeaconCommitteeForAggregation(
      final int committeeIndex, final UInt64 aggregationSlot); @Override void subscribeToPersistentSubnets(final Set<SubnetSubscription> subnetSubscriptions);  }### Answer:
@Test public void createUnsignedBlock_WhenNoneFound_ReturnsEmpty() { final BLSSignature blsSignature = dataStructureUtil.randomSignature(); SafeFuture<Optional<BeaconBlock>> future = apiHandler.createUnsignedBlock(UInt64.ONE, blsSignature, Optional.of(Bytes32.random())); assertThat(unwrapToOptional(future)).isEmpty(); }
@Test public void createUnsignedBlock_WhenFound_ReturnsBlock() { final BeaconBlock beaconBlock = dataStructureUtil.randomBeaconBlock(UInt64.ONE); final BLSSignature blsSignature = dataStructureUtil.randomSignature(); final Optional<Bytes32> graffiti = Optional.of(Bytes32.random()); final tech.pegasys.teku.api.schema.BLSSignature schemaBlsSignature = new tech.pegasys.teku.api.schema.BLSSignature(blsSignature); final tech.pegasys.teku.api.schema.BeaconBlock schemaBeaconBlock = new tech.pegasys.teku.api.schema.BeaconBlock(beaconBlock); when(apiClient.createUnsignedBlock( eq(beaconBlock.getSlot()), refEq(schemaBlsSignature), eq(graffiti))) .thenReturn(Optional.of(schemaBeaconBlock)); SafeFuture<Optional<BeaconBlock>> future = apiHandler.createUnsignedBlock(UInt64.ONE, blsSignature, graffiti); assertThat(unwrapToValue(future)).usingRecursiveComparison().isEqualTo(beaconBlock); }