isLaravelValidationError function

Matcher isLaravelValidationError([
  1. Map<String, List<String>>? errors
])

Matches a Laravel 422 body: exactly {message, errors}, the message being the LaravelContract.validationSummary of the errors, and (when given) the exact errors.

Implementation

Matcher isLaravelValidationError([Map<String, List<String>>? errors]) =>
    predicate<Object?>((body) {
      if (body is! Map<String, Object?>) {
        return false;
      }
      final actual = body['errors'];
      if (body.keys.toList().join(',') != 'message,errors' ||
          actual is! Map<String, Object?>) {
        return false;
      }
      final all = <String>[
        for (final list in actual.values) ...(list! as List<Object?>).cast(),
      ];
      if (body['message'] != LaravelContract.validationSummary(all)) {
        return false;
      }
      return errors == null ||
          const DeepCollectionEquality().equals(actual, errors);
    }, 'a Laravel validation error body');