From 1804b1556f021936e155a98913d9e58b3c5ffd09 Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Wed, 7 Aug 2024 17:32:48 -0500 Subject: [PATCH] Refactored ContainsItemsMatcher to allow different expected and actual types. --- .../api/image/ContainsImagesMatcher.java | 4 +-- .../api/matchers/ContainsItemsMatcher.java | 28 +++++++++++-------- ...tainsRecipeInfoViewsForRecipesMatcher.java | 23 +++++++++++++++ .../recipe/ContainsRecipeStarsMatcher.java | 3 +- .../api/recipe/ContainsRecipesMatcher.java | 4 +-- .../api/user/ContainsUsersMatcher.java | 4 +-- 6 files changed, 47 insertions(+), 19 deletions(-) create mode 100644 src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipeInfoViewsForRecipesMatcher.java diff --git a/src/testFixtures/java/app/mealsmadeeasy/api/image/ContainsImagesMatcher.java b/src/testFixtures/java/app/mealsmadeeasy/api/image/ContainsImagesMatcher.java index 006540f..cad6788 100644 --- a/src/testFixtures/java/app/mealsmadeeasy/api/image/ContainsImagesMatcher.java +++ b/src/testFixtures/java/app/mealsmadeeasy/api/image/ContainsImagesMatcher.java @@ -4,14 +4,14 @@ import app.mealsmadeeasy.api.matchers.ContainsItemsMatcher; import java.util.List; -public final class ContainsImagesMatcher extends ContainsItemsMatcher { +public final class ContainsImagesMatcher extends ContainsItemsMatcher { public static ContainsImagesMatcher containsImages(Image... expected) { return new ContainsImagesMatcher(expected); } private ContainsImagesMatcher(Image... allExpected) { - super(List.of(allExpected), o -> o instanceof Image, Image::getId); + super(List.of(allExpected), o -> o instanceof Image, Image::getId, Image::getId); } } diff --git a/src/testFixtures/java/app/mealsmadeeasy/api/matchers/ContainsItemsMatcher.java b/src/testFixtures/java/app/mealsmadeeasy/api/matchers/ContainsItemsMatcher.java index df94cae..a4b48db 100644 --- a/src/testFixtures/java/app/mealsmadeeasy/api/matchers/ContainsItemsMatcher.java +++ b/src/testFixtures/java/app/mealsmadeeasy/api/matchers/ContainsItemsMatcher.java @@ -9,31 +9,35 @@ import java.util.function.BiPredicate; import java.util.function.Function; import java.util.function.Predicate; -public class ContainsItemsMatcher extends BaseMatcher> { +public class ContainsItemsMatcher extends BaseMatcher> { - private final List allExpected; + private final List allExpected; private final Predicate isT; - private final Function idFunction; + private final Function givenToIdFunction; + private final Function expectedToIdFunction; private final BiPredicate equalsFunction; public ContainsItemsMatcher( - List allExpected, + List allExpected, Predicate isT, - Function idFunction, + Function givenToIdFunction, + Function expectedToIdFunction, BiPredicate equalsFunction ) { this.allExpected = allExpected; this.isT = isT; - this.idFunction = idFunction; + this.givenToIdFunction = givenToIdFunction; + this.expectedToIdFunction = expectedToIdFunction; this.equalsFunction = equalsFunction; } public ContainsItemsMatcher( - List allExpected, + List allExpected, Predicate isT, - Function idFunction + Function givenToIdFunction, + Function expectedToIdFunction ) { - this(allExpected, isT, idFunction, Objects::equals); + this(allExpected, isT, givenToIdFunction, expectedToIdFunction, Objects::equals); } @SuppressWarnings("unchecked") @@ -41,12 +45,12 @@ public class ContainsItemsMatcher extends BaseMatcher> { public boolean matches(Object o) { if (o instanceof Iterable iterable) { checkExpected: - for (final T expected : this.allExpected) { + for (final E expected : this.allExpected) { for (final Object item : iterable) { if ( this.isT.test(item) && this.equalsFunction.test( - this.idFunction.apply((T) item), - this.idFunction.apply(expected) + this.givenToIdFunction.apply((T) item), + this.expectedToIdFunction.apply(expected) ) ) { continue checkExpected; diff --git a/src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipeInfoViewsForRecipesMatcher.java b/src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipeInfoViewsForRecipesMatcher.java new file mode 100644 index 0000000..cd3b42b --- /dev/null +++ b/src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipeInfoViewsForRecipesMatcher.java @@ -0,0 +1,23 @@ +package app.mealsmadeeasy.api.recipe; + +import app.mealsmadeeasy.api.matchers.ContainsItemsMatcher; +import app.mealsmadeeasy.api.recipe.view.RecipeInfoView; + +import java.util.List; + +public class ContainsRecipeInfoViewsForRecipesMatcher extends ContainsItemsMatcher { + + public static ContainsRecipeInfoViewsForRecipesMatcher containsRecipeInfoViewsForRecipes(Recipe... expected) { + return new ContainsRecipeInfoViewsForRecipesMatcher(List.of(expected)); + } + + private ContainsRecipeInfoViewsForRecipesMatcher(List expected) { + super( + expected, + o -> o instanceof RecipeInfoView, + RecipeInfoView::getId, + Recipe::getId + ); + } + +} diff --git a/src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipeStarsMatcher.java b/src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipeStarsMatcher.java index fb29c9e..854c9f1 100644 --- a/src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipeStarsMatcher.java +++ b/src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipeStarsMatcher.java @@ -8,7 +8,7 @@ import app.mealsmadeeasy.api.recipe.star.RecipeStarId; import java.util.List; import java.util.Objects; -public class ContainsRecipeStarsMatcher extends ContainsItemsMatcher { +public class ContainsRecipeStarsMatcher extends ContainsItemsMatcher { public static ContainsRecipeStarsMatcher containsStars(RecipeStar... expected) { return new ContainsRecipeStarsMatcher(expected); @@ -19,6 +19,7 @@ public class ContainsRecipeStarsMatcher extends ContainsItemsMatcher o instanceof RecipeStar, recipeStar -> ((RecipeStarEntity) recipeStar).getId(), + recipeStar -> ((RecipeStarEntity) recipeStar).getId(), (id0, id1) -> Objects.equals(id0.getRecipeId(), id1.getRecipeId()) && Objects.equals(id0.getOwnerUsername(), id1.getOwnerUsername()) ); diff --git a/src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipesMatcher.java b/src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipesMatcher.java index 52c64d1..bb0d8f9 100644 --- a/src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipesMatcher.java +++ b/src/testFixtures/java/app/mealsmadeeasy/api/recipe/ContainsRecipesMatcher.java @@ -4,14 +4,14 @@ import app.mealsmadeeasy.api.matchers.ContainsItemsMatcher; import java.util.List; -public final class ContainsRecipesMatcher extends ContainsItemsMatcher { +public final class ContainsRecipesMatcher extends ContainsItemsMatcher { public static ContainsRecipesMatcher containsRecipes(Recipe... expected) { return new ContainsRecipesMatcher(expected); } private ContainsRecipesMatcher(Recipe[] allExpected) { - super(List.of(allExpected), o -> o instanceof Recipe, Recipe::getId); + super(List.of(allExpected), o -> o instanceof Recipe, Recipe::getId, Recipe::getId); } } diff --git a/src/testFixtures/java/app/mealsmadeeasy/api/user/ContainsUsersMatcher.java b/src/testFixtures/java/app/mealsmadeeasy/api/user/ContainsUsersMatcher.java index 11dc151..700d669 100644 --- a/src/testFixtures/java/app/mealsmadeeasy/api/user/ContainsUsersMatcher.java +++ b/src/testFixtures/java/app/mealsmadeeasy/api/user/ContainsUsersMatcher.java @@ -4,14 +4,14 @@ import app.mealsmadeeasy.api.matchers.ContainsItemsMatcher; import java.util.List; -public class ContainsUsersMatcher extends ContainsItemsMatcher { +public class ContainsUsersMatcher extends ContainsItemsMatcher { public static ContainsUsersMatcher containsUsers(User... allExpected) { return new ContainsUsersMatcher(allExpected); } private ContainsUsersMatcher(User... allExpected) { - super(List.of(allExpected), o -> o instanceof User, User::getId); + super(List.of(allExpected), o -> o instanceof User, User::getId, User::getId); } }