From 0f8012134e3bd95ac305447d5358d18b62be8af8 Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Mon, 1 Jul 2024 10:00:39 +0200 Subject: [PATCH] Utility matchers for testing. --- .../api/matchers/ContainsRecipesMatcher.java | 43 +++++++++++++++++++ .../api/matchers/IsUserMatcher.java | 27 ++++++++++++ .../mealsmadeeasy/api/matchers/Matchers.java | 18 ++++++++ 3 files changed, 88 insertions(+) create mode 100644 src/testFixtures/java/app/mealsmadeeasy/api/matchers/ContainsRecipesMatcher.java create mode 100644 src/testFixtures/java/app/mealsmadeeasy/api/matchers/IsUserMatcher.java create mode 100644 src/testFixtures/java/app/mealsmadeeasy/api/matchers/Matchers.java diff --git a/src/testFixtures/java/app/mealsmadeeasy/api/matchers/ContainsRecipesMatcher.java b/src/testFixtures/java/app/mealsmadeeasy/api/matchers/ContainsRecipesMatcher.java new file mode 100644 index 0000000..5cd85b9 --- /dev/null +++ b/src/testFixtures/java/app/mealsmadeeasy/api/matchers/ContainsRecipesMatcher.java @@ -0,0 +1,43 @@ +package app.mealsmadeeasy.api.matchers; + +import app.mealsmadeeasy.api.recipe.Recipe; +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; + +import java.util.List; +import java.util.Objects; + +public final class ContainsRecipesMatcher extends BaseMatcher> { + + private final Recipe[] allExpected; + + public ContainsRecipesMatcher(Recipe[] allExpected) { + this.allExpected = allExpected; + } + + @Override + public boolean matches(Object actual) { + if (actual instanceof List list) { + checkExpected: + for (final Recipe expected : allExpected) { + for (final Object item : list) { + if (item instanceof Recipe o && Objects.equals(o.getId(), expected.getId())) { + continue checkExpected; + } + } + // Did not find the expected in the list + return false; + } + // Found all expected in list + return true; + } + // actual is not a List + return false; + } + + @Override + public void describeTo(Description description) { + description.appendText("Expected ").appendValue(List.of(this.allExpected)); + } + +} diff --git a/src/testFixtures/java/app/mealsmadeeasy/api/matchers/IsUserMatcher.java b/src/testFixtures/java/app/mealsmadeeasy/api/matchers/IsUserMatcher.java new file mode 100644 index 0000000..5fde6c9 --- /dev/null +++ b/src/testFixtures/java/app/mealsmadeeasy/api/matchers/IsUserMatcher.java @@ -0,0 +1,27 @@ +package app.mealsmadeeasy.api.matchers; + +import app.mealsmadeeasy.api.user.User; +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; + +import java.util.Objects; + +public final class IsUserMatcher extends BaseMatcher { + + private final User expected; + + public IsUserMatcher(User expected) { + this.expected = expected; + } + + @Override + public boolean matches(Object actual) { + return actual instanceof User o && Objects.equals(o.getId(), this.expected.getId()); + } + + @Override + public void describeTo(Description description) { + description.appendText("Expected ").appendValue(this.expected); + } + +} diff --git a/src/testFixtures/java/app/mealsmadeeasy/api/matchers/Matchers.java b/src/testFixtures/java/app/mealsmadeeasy/api/matchers/Matchers.java new file mode 100644 index 0000000..477ded5 --- /dev/null +++ b/src/testFixtures/java/app/mealsmadeeasy/api/matchers/Matchers.java @@ -0,0 +1,18 @@ +package app.mealsmadeeasy.api.matchers; + +import app.mealsmadeeasy.api.recipe.Recipe; +import app.mealsmadeeasy.api.user.User; + +public final class Matchers { + + public static ContainsRecipesMatcher containsRecipes(Recipe... expected) { + return new ContainsRecipesMatcher(expected); + } + + public static IsUserMatcher isUser(User expected) { + return new IsUserMatcher(expected); + } + + private Matchers() {} + +}