@Test
  public void proposalWithEmptyPrepareCertificatesOfferNewBlock() {
    final ConsensusRoundIdentifier targetRound = new ConsensusRoundIdentifier(1, 1);

    final List<SignedData<RoundChangePayload>> roundChanges =
        peers.createSignedRoundChangePayload(targetRound);

    final ValidatorPeer nextProposer = context.roundSpecificPeers(targetRound).getProposer();
    final QbftBlock blockToPropose =
        context.createBlockForProposalFromChainHead(15, nextProposer.getNodeAddress());

    nextProposer.injectProposalForFutureRound(
        targetRound, roundChanges, Collections.emptyList(), blockToPropose);

    final Prepare expectedPrepare =
        localNodeMessageFactory.createPrepare(targetRound, blockToPropose.getHash());

    peers.verifyMessagesReceived(expectedPrepare);
  }
Ensure the Qbft component responds appropriately when a future round Proposal message is
received.
consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/test/ReceivedFutureProposalTest.java