### Question:
BlockRepositoryVertxImpl extends AbstractRepositoryVertxImpl implements BlockRepository { @Override public Observable<Page<BlockInfo>> search(BlockSearchCriteria criteria) { Consumer<Handler<AsyncResult<BlockPage>>> callback = handler -> getClient() .searchBlocks( toDto(criteria.getSignerPublicKey()), toDto(criteria.getBeneficiaryAddress()), criteria.getPageSize(), criteria.getPageNumber(), criteria.getOffset(), toDto(criteria.getOrder()), toDto(criteria.getOrderBy()), handler); return exceptionHandling( call(callback) .map( mosaicPage -> this.toPage( mosaicPage.getPagination(), mosaicPage.getData().stream() .map(BlockRepositoryVertxImpl::toBlockInfo) .collect(Collectors.toList())))); } BlockRepositoryVertxImpl(ApiClient apiClient); @Override Observable<BlockInfo> getBlockByHeight(BigInteger height); @Override Observable<Page<BlockInfo>> search(BlockSearchCriteria criteria); @Override Observable<MerkleProofInfo> getMerkleTransaction(BigInteger height, String hash); Observable<MerkleProofInfo> getMerkleReceipts(BigInteger height, String hash); static BlockInfo toBlockInfo(BlockInfoDTO blockInfoDTO); BlockRoutesApi getClient();  }### Answer:
@Test public void shouldGetBlocksByHeightWithLimit() throws Exception { Address address = Address.generateRandom(this.networkType); BlockInfoDTO dto = new BlockInfoDTO(); BlockMetaDTO metaDTO = new BlockMetaDTO(); metaDTO.setHash("someHash"); metaDTO.setTransactionsCount(10); metaDTO.setGenerationHash("generationHash"); metaDTO.setStatementsCount(20); metaDTO.setStateHashSubCacheMerkleRoots(Arrays.asList("string1", "string2")); metaDTO.setTotalFee(BigInteger.valueOf(8)); dto.setMeta(metaDTO); BlockDTO blockDto = new BlockDTO(); blockDto.setType(16716); blockDto.setVersion(3); blockDto.setSignerPublicKey("B630EFDDFADCC4A2077AB8F1EC846B08FEE2D2972EACF95BBAC6BFAC3D31834C"); blockDto.setBeneficiaryAddress(address.encoded()); blockDto.setHeight(BigInteger.valueOf(9L)); blockDto.setNetwork(NetworkTypeEnum.NUMBER_144); blockDto.setProofGamma("proofGamma"); blockDto.setProofScalar("proofScalar"); blockDto.setProofVerificationHash("proofVerificationHash"); dto.setBlock(blockDto); mockRemoteCall(Collections.singletonList(dto)); mockRemoteCall(toPage(dto)); BlockSearchCriteria criteria = new BlockSearchCriteria(); criteria.offset("abc"); List<BlockInfo> resolvedList = repository.search(criteria).toFuture().get().getData(); BlockInfo info = resolvedList.get(0); Assertions.assertNotNull(info); Assertions.assertEquals( blockDto.getBeneficiaryAddress(), info.getBeneficiaryAddress().encoded()); Assertions.assertEquals( blockDto.getSignerPublicKey(), info.getSignerPublicAccount().getPublicKey().toHex()); Assertions.assertEquals(16716, info.getType()); Assertions.assertEquals(3, info.getVersion().intValue()); Assertions.assertEquals(NetworkType.MIJIN_TEST, info.getNetworkType()); Assertions.assertEquals(BigInteger.valueOf(9L), info.getHeight()); Assertions.assertEquals(metaDTO.getHash(), info.getHash()); Assertions.assertEquals(metaDTO.getGenerationHash(), info.getGenerationHash()); Assertions.assertEquals(metaDTO.getTransactionsCount(), info.getTransactionsCount()); Assertions.assertEquals( metaDTO.getStateHashSubCacheMerkleRoots(), info.getSubCacheMerkleRoots()); Assertions.assertEquals(metaDTO.getTotalFee(), info.getTotalFee()); Assertions.assertEquals(blockDto.getHeight(), info.getHeight()); Assertions.assertEquals(blockDto.getProofGamma(), info.getProofGamma()); Assertions.assertEquals(blockDto.getProofScalar(), info.getProofScalar()); Assertions.assertEquals(blockDto.getProofVerificationHash(), info.getProofVerificationHash()); Assertions.assertEquals(address, info.getBeneficiaryAddress()); }