From b6869c1b17c65594f65c3ad5e53461082e5c3088 Mon Sep 17 00:00:00 2001
From: pacien
Date: Fri, 29 Mar 2019 01:31:15 +0100
Subject: initial impl
---
.../lemonad/validation/ValidationResultTest.java | 75 ++++++++++++++++++++++
.../pacien/lemonad/validation/ValidatorTest.java | 61 ++++++++++++++++++
2 files changed, 136 insertions(+)
create mode 100644 src/test/java/org/pacien/lemonad/validation/ValidationResultTest.java
create mode 100644 src/test/java/org/pacien/lemonad/validation/ValidatorTest.java
(limited to 'src/test/java/org/pacien/lemonad/validation')
diff --git a/src/test/java/org/pacien/lemonad/validation/ValidationResultTest.java b/src/test/java/org/pacien/lemonad/validation/ValidationResultTest.java
new file mode 100644
index 0000000..65b2cb3
--- /dev/null
+++ b/src/test/java/org/pacien/lemonad/validation/ValidationResultTest.java
@@ -0,0 +1,75 @@
+/*
+ * lemonad - Some functional sweetness for Java
+ * Copyright (C) 2019 Pacien TRAN-GIRARD
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.pacien.lemonad.validation;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ * @author pacien
+ */
+class ValidationResultTest {
+ @Test void testValidResult() {
+ var subject = "subject";
+ var validationResult = ValidationResult.valid(subject);
+ assertTrue(validationResult.getErrors().isEmpty());
+ assertTrue(validationResult.isValid());
+ assertFalse(validationResult.isInvalid());
+ validationResult.ifValid(innerSubject -> assertEquals(subject, innerSubject));
+ validationResult.ifInvalid((__, ___) -> fail());
+ }
+
+ @Test void testInvalidResult() {
+ var subject = "subject";
+ var errors = List.of(0, 1);
+ var validationResult = ValidationResult.invalid(subject, 0, 1);
+ assertEquals(errors, validationResult.getErrors());
+ assertFalse(validationResult.isValid());
+ assertTrue(validationResult.isInvalid());
+ validationResult.ifValid(Assertions::fail);
+ validationResult.ifInvalid((innerSubject, innerErrors) -> {
+ assertEquals(subject, innerSubject);
+ assertEquals(errors, innerErrors);
+ });
+ }
+
+ @Test void testFlatMap() {
+ ValidationResult.valid("subject")
+ .ifInvalid((__, ___) -> fail())
+ .flatMap(res -> ValidationResult.invalid(res.getSubject(), 0))
+ .ifValid(innerSubject -> fail());
+ }
+
+ @Test void testMerge() {
+ var subject = "subject";
+ assertEquals(List.of(0, 1, 2, 3), ValidationResult.merge(subject, Stream.of(
+ ValidationResult.valid(subject),
+ ValidationResult.invalid(subject, 0, 1),
+ ValidationResult.invalid(subject, 2, 3))
+ ).getErrors());
+ }
+}
diff --git a/src/test/java/org/pacien/lemonad/validation/ValidatorTest.java b/src/test/java/org/pacien/lemonad/validation/ValidatorTest.java
new file mode 100644
index 0000000..55927b5
--- /dev/null
+++ b/src/test/java/org/pacien/lemonad/validation/ValidatorTest.java
@@ -0,0 +1,61 @@
+/*
+ * lemonad - Some functional sweetness for Java
+ * Copyright (C) 2019 Pacien TRAN-GIRARD
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.pacien.lemonad.validation;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+import static java.util.function.Predicate.not;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * @author pacien
+ */
+class ValidatorTest {
+ @Test void testValidatorEnsuringPredicate() {
+ var emptyError = 0;
+ var validator = Validator.ensuringPredicate(not(String::isEmpty), emptyError);
+ assertEquals(List.of(emptyError), validator.validate("").getErrors());
+ assertEquals(List.of(), validator.validate("test").getErrors());
+ }
+
+ @Test void testValidatorValidatingAll() {
+ var emptyError = 0;
+ var tooLongError = 1;
+ var containsBadLetterError = 2;
+
+ var validator = Validator.validatingAll(
+ Validator.ensuringPredicate(not(String::isEmpty), emptyError),
+ Validator.ensuringPredicate((String str) -> str.length() < 10, tooLongError),
+ Validator.ensuringPredicate((String str) -> !str.contains("e"), containsBadLetterError));
+
+ assertEquals(List.of(emptyError), validator.validate("").getErrors());
+ assertEquals(List.of(tooLongError, containsBadLetterError), validator.validate("test test test").getErrors());
+ assertEquals(List.of(), validator.validate("potato").getErrors());
+ }
+
+ @Test void testValidatingField() {
+ var emptyError = 0;
+ var fieldValidator = Validator.ensuringPredicate((Integer len) -> len > 0, emptyError);
+ var validator = Validator.validatingField(String::length, fieldValidator);
+ assertEquals(List.of(emptyError), validator.validate("").getErrors());
+ assertEquals(List.of(), validator.validate("test").getErrors());
+ }
+}
--
cgit v1.2.3