From b221e943ec88c1880f1be4093f2db4ae1436f1be Mon Sep 17 00:00:00 2001 From: Sebastien Deleuze Date: Tue, 26 Jun 2018 11:07:19 +0200 Subject: [PATCH] DATACMNS-1346 - Add a findByIdOrNull extension to CrudRepository In Kotlin, it is idiomatic to deal with return value that could have or not a result with nullable types since they are natively supported by the language. This commit add a findByIdOrNull variant to CrudRepository#findById that returns T? instead of Optional. --- .../repository/CrudRepositoryExtensions.kt | 10 ++++++++ .../CrudRepositoryExtensionsTests.kt | 25 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/main/kotlin/org/springframework/data/repository/CrudRepositoryExtensions.kt create mode 100644 src/test/kotlin/org/springframework/data/repository/CrudRepositoryExtensionsTests.kt diff --git a/src/main/kotlin/org/springframework/data/repository/CrudRepositoryExtensions.kt b/src/main/kotlin/org/springframework/data/repository/CrudRepositoryExtensions.kt new file mode 100644 index 0000000000..7c3bfb2a87 --- /dev/null +++ b/src/main/kotlin/org/springframework/data/repository/CrudRepositoryExtensions.kt @@ -0,0 +1,10 @@ +package org.springframework.data.repository + +/** + * Retrieves an entity by its id. + * + * @param id the entity id. + * @return the entity with the given id or `null` if none found + * @author Sebastien Deleuze + */ +fun CrudRepository.findByIdOrNull(id: ID): T? = findById(id).orElse(null) diff --git a/src/test/kotlin/org/springframework/data/repository/CrudRepositoryExtensionsTests.kt b/src/test/kotlin/org/springframework/data/repository/CrudRepositoryExtensionsTests.kt new file mode 100644 index 0000000000..6f4d262e14 --- /dev/null +++ b/src/test/kotlin/org/springframework/data/repository/CrudRepositoryExtensionsTests.kt @@ -0,0 +1,25 @@ +package org.springframework.data.repository + +import com.nhaarman.mockito_kotlin.verify +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Answers +import org.mockito.Mock +import org.mockito.junit.MockitoJUnitRunner +import org.springframework.data.repository.sample.User + +/** + * @author Sebastien Deleuze + */ +@RunWith(MockitoJUnitRunner::class) +class CrudRepositoryExtensionsTests { + + @Mock(answer = Answers.RETURNS_MOCKS) + lateinit var repository: CrudRepository + + @Test + fun `CrudRepository#findByIdOrNull() extension should call its Java counterpart`() { + repository.findByIdOrNull("foo") + verify(repository).findById("foo") + } +}