From 790974461ff6039874f9258c5154e883fb06896c Mon Sep 17 00:00:00 2001 From: pedrolopes Date: Sun, 27 Nov 2022 09:08:38 -0300 Subject: [PATCH] BAEL-5922 User for Optional in Java (#13051) * repositories. model class. initial tests * tests declarative api * removing from module java 11 * copy to optional module * fix assertEquals import --- .../java/com/baeldung/optionaluses/User.java | 21 ++++++ .../optionaluses/UserRepositoryWithNull.java | 20 ++++++ .../UserRepositoryWithOptional.java | 21 ++++++ .../optionaluses/UsesForOptionalUnitTest.java | 64 +++++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/User.java create mode 100644 core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithNull.java create mode 100644 core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithOptional.java create mode 100644 core-java-modules/core-java-optional/src/test/java/com/baeldung/optionaluses/UsesForOptionalUnitTest.java diff --git a/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/User.java b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/User.java new file mode 100644 index 0000000000..99a8810d5b --- /dev/null +++ b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/User.java @@ -0,0 +1,21 @@ +package com.baeldung.optionaluses; + +public class User { + + public User(String id, String name) { + this.id = id; + this.name = name; + } + + private String id; + + private String name; + + public String getName() { + return name; + } + + public String getId() { + return id; + } +} diff --git a/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithNull.java b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithNull.java new file mode 100644 index 0000000000..c41de1b5f5 --- /dev/null +++ b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithNull.java @@ -0,0 +1,20 @@ +package com.baeldung.optionaluses; + +import java.util.Arrays; +import java.util.List; + +public class UserRepositoryWithNull { + + private final List dbUsers = Arrays.asList(new User("1", "John"), new User("2", "Maria"), new User("3", "Daniel")); + + public User findById(String id) { + + for (User u : dbUsers) { + if (u.getId().equals(id)) { + return u; + } + } + + return null; + } +} diff --git a/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithOptional.java b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithOptional.java new file mode 100644 index 0000000000..f31e35d85f --- /dev/null +++ b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithOptional.java @@ -0,0 +1,21 @@ +package com.baeldung.optionaluses; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +public class UserRepositoryWithOptional { + + private final List dbUsers = Arrays.asList(new User("1", "John"), new User("2", "Maria"), new User("3", "Daniel")); + + public Optional findById(String id) { + + for (User u : dbUsers) { + if (u.getId().equals(id)) { + return Optional.of(u); + } + } + + return Optional.empty(); + } +} diff --git a/core-java-modules/core-java-optional/src/test/java/com/baeldung/optionaluses/UsesForOptionalUnitTest.java b/core-java-modules/core-java-optional/src/test/java/com/baeldung/optionaluses/UsesForOptionalUnitTest.java new file mode 100644 index 0000000000..d0f92be097 --- /dev/null +++ b/core-java-modules/core-java-optional/src/test/java/com/baeldung/optionaluses/UsesForOptionalUnitTest.java @@ -0,0 +1,64 @@ +package com.baeldung.optionaluses; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class UsesForOptionalUnitTest { + + @Test + public void givenNonExistentUserId_whenSearchForUser_andNoNullCheck_thenThrowException() { + + UserRepositoryWithNull userRepositoryWithNull = new UserRepositoryWithNull(); + String nonExistentUserId = "4"; + + assertThrows(NullPointerException.class, () -> { + System.out.println("User name: " + userRepositoryWithNull.findById(nonExistentUserId) + .getName()); + }); + } + + @Test + public void givenNonExistentUserId_whenSearchForUser_thenOptionalShouldBeTreatedProperly() { + + UserRepositoryWithOptional userRepositoryWithOptional = new UserRepositoryWithOptional(); + String nonExistentUserId = "4"; + + String userName = userRepositoryWithOptional.findById(nonExistentUserId) + .orElse(new User("0", "admin")) + .getName(); + + assertEquals("admin", userName); + } + + @Test + public void givenExistentUserId_whenFoundUserWithNameStartingWithMInRepositoryUsingNull_thenNameShouldBeUpperCased() { + + UserRepositoryWithNull userRepositoryWithNull = new UserRepositoryWithNull(); + + User user = userRepositoryWithNull.findById("2"); + String upperCasedName = ""; + + if (user != null) { + if (user.getName().startsWith("M")) { + upperCasedName = user.getName().toUpperCase(); + } + } + + assertEquals("MARIA", upperCasedName); + } + + @Test + public void givenExistentUserId_whenFoundUserWithNameStartingWithMInRepositoryUsingOptional_thenNameShouldBeUpperCased() { + + UserRepositoryWithOptional userRepositoryWithOptional = new UserRepositoryWithOptional(); + + String upperCasedName = userRepositoryWithOptional.findById("2") + .filter(u -> u.getName().startsWith("M")) + .map(u -> u.getName().toUpperCase()) + .orElse(""); + + assertEquals("MARIA", upperCasedName); + } +}