sendReliable method

  1. @override
Future<Either<RealtimeFailure, dynamic>> sendReliable(
  1. String methodName, {
  2. List? args,
  3. String? deliveryId,
  4. ReliableDeliveryPolicy? policy,
})
override

Records the call and resolves like invoke does — with the result or failure stubbed by whenInvoke / whenInvokeThrows — publishing pending, sent, then acknowledged or failed on deliveryStream. No retries: a stubbed failure fails at once.

Implementation

@override
Future<Either<RealtimeFailure, dynamic>> sendReliable(
  String methodName, {
  List<dynamic>? args,
  String? deliveryId,
  ReliableDeliveryPolicy? policy,
}) async {
  final id = deliveryId ?? 'fake-delivery-${_deliveryCounter++}';
  _reliableSends.add({'method': methodName, 'args': args ?? [], 'deliveryId': id});

  _deliveryController.add(ReliableDelivery(id: id, target: methodName, status: DeliveryStatus.pending));
  _deliveryController.add(ReliableDelivery(id: id, target: methodName, status: DeliveryStatus.sent, attempt: 1));

  final failure = _mockErrors[methodName];
  if (failure != null) {
    _deliveryController.add(ReliableDelivery(id: id, target: methodName, status: DeliveryStatus.failed, attempt: 1, failure: failure));
    return Left(failure);
  }
  _deliveryController.add(ReliableDelivery(id: id, target: methodName, status: DeliveryStatus.acknowledged, attempt: 1));
  return Right(_mockResults[methodName]);
}