isLaravelValidationError function
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');