diff --git a/src/main/kotlin/dev/fyloz/colorrecipesexplorer/repository/RecipeRepository.kt b/src/main/kotlin/dev/fyloz/colorrecipesexplorer/repository/RecipeRepository.kt index a7284f7..251374d 100644 --- a/src/main/kotlin/dev/fyloz/colorrecipesexplorer/repository/RecipeRepository.kt +++ b/src/main/kotlin/dev/fyloz/colorrecipesexplorer/repository/RecipeRepository.kt @@ -11,6 +11,9 @@ interface RecipeRepository : JpaRepository { /** Checks if a recipe exists with the given [name] and [company]. */ fun existsByNameAndCompany(name: String, company: Company): Boolean + /** Gets all recipes with the given [name]. */ + fun findAllByName(name: String): Collection + /** Gets all recipes with the given [company]. */ fun findAllByCompany(company: Company): Collection } diff --git a/src/main/kotlin/dev/fyloz/colorrecipesexplorer/rest/RecipeController.kt b/src/main/kotlin/dev/fyloz/colorrecipesexplorer/rest/RecipeController.kt index efdd414..0b840a9 100644 --- a/src/main/kotlin/dev/fyloz/colorrecipesexplorer/rest/RecipeController.kt +++ b/src/main/kotlin/dev/fyloz/colorrecipesexplorer/rest/RecipeController.kt @@ -25,8 +25,13 @@ class RecipeController( private val recipeImageService: RecipeImageService ) { @GetMapping - fun getAll() = - ok(recipeService.getAllForOutput()) + fun getAll(@RequestParam(required = false) name: String?) = + if (name == null) + ok(recipeService.getAllForOutput()) + else + ok(with(recipeService) { + getAllByName(name).map { it.toOutput() } + }) @GetMapping("{id}") fun getById(@PathVariable id: Long) = diff --git a/src/main/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeService.kt b/src/main/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeService.kt index 7f0a1cc..c28ef6e 100644 --- a/src/main/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeService.kt +++ b/src/main/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeService.kt @@ -20,6 +20,9 @@ interface RecipeService : /** Checks if a recipe exists with the given [name] and [company]. */ fun existsByNameAndCompany(name: String, company: Company): Boolean + /** Gets all recipes with the given [name]. */ + fun getAllByName(name: String): Collection + /** Gets all recipes with the given [company]. */ fun getAllByCompany(company: Company): Collection @@ -74,7 +77,8 @@ class RecipeServiceImpl( override fun existsByNameAndCompany(name: String, company: Company) = repository.existsByNameAndCompany(name, company) - override fun getAllByCompany(company: Company): Collection = repository.findAllByCompany(company) + override fun getAllByName(name: String) = repository.findAllByName(name) + override fun getAllByCompany(company: Company) = repository.findAllByCompany(company) override fun save(entity: RecipeSaveDto): Recipe { val company = companyService.getById(entity.companyId) diff --git a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/AccountsServiceTest.kt b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/AccountsServiceTest.kt index ba55ec5..4d15164 100644 --- a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/AccountsServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/AccountsServiceTest.kt @@ -7,10 +7,7 @@ import dev.fyloz.colorrecipesexplorer.exception.NotFoundException import dev.fyloz.colorrecipesexplorer.model.account.* import dev.fyloz.colorrecipesexplorer.repository.UserRepository import dev.fyloz.colorrecipesexplorer.repository.GroupRepository -import org.junit.jupiter.api.AfterEach -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertThrows +import org.junit.jupiter.api.* import org.springframework.mock.web.MockHttpServletResponse import org.springframework.security.core.userdetails.UsernameNotFoundException import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder @@ -23,6 +20,7 @@ import kotlin.test.assertNotNull import kotlin.test.assertTrue import org.springframework.security.core.userdetails.User as SpringUser +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class UserServiceTest : AbstractExternalModelServiceTest() { private val passwordEncoder = BCryptPasswordEncoder() @@ -198,6 +196,7 @@ class UserServiceTest : } } +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class GroupServiceTest : AbstractExternalNamedModelServiceTest() { private val userService: UserService = mock() @@ -301,6 +300,7 @@ class GroupServiceTest : withBaseUpdateDtoTest(entity, entityUpdateDto, service, { any() }) } +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class UserUserDetailsServiceTest { private val userService: UserService = mock() private val service = spy(CreUserDetailsServiceImpl(userService)) diff --git a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/CompanyServiceTest.kt b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/CompanyServiceTest.kt index 75dfba1..7843cae 100644 --- a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/CompanyServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/CompanyServiceTest.kt @@ -5,9 +5,11 @@ import dev.fyloz.colorrecipesexplorer.model.* import dev.fyloz.colorrecipesexplorer.repository.CompanyRepository import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance import kotlin.test.assertFalse import kotlin.test.assertTrue +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class CompanyServiceTest : AbstractExternalNamedModelServiceTest() { private val recipeService: RecipeService = mock() diff --git a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/InventoryServiceTest.kt b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/InventoryServiceTest.kt index aae3b92..98eb32e 100644 --- a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/InventoryServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/InventoryServiceTest.kt @@ -4,10 +4,12 @@ import com.nhaarman.mockitokotlin2.* import dev.fyloz.colorrecipesexplorer.model.* import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.assertThrows import kotlin.test.assertEquals import kotlin.test.assertTrue +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class InventoryServiceTest { private val materialService: MaterialService = mock() private val mixService: MixService = mock() diff --git a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MaterialServiceTest.kt b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MaterialServiceTest.kt index dc13ca3..9b3dacb 100644 --- a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MaterialServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MaterialServiceTest.kt @@ -7,12 +7,14 @@ import dev.fyloz.colorrecipesexplorer.repository.MaterialRepository import dev.fyloz.colorrecipesexplorer.service.files.FileService import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.assertThrows import org.springframework.mock.web.MockMultipartFile import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class MaterialServiceTest : AbstractExternalNamedModelServiceTest() { override val repository: MaterialRepository = mock() diff --git a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MaterialTypeServiceTest.kt b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MaterialTypeServiceTest.kt index 797c1d0..7d8a1dd 100644 --- a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MaterialTypeServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MaterialTypeServiceTest.kt @@ -7,11 +7,13 @@ import dev.fyloz.colorrecipesexplorer.model.* import dev.fyloz.colorrecipesexplorer.repository.MaterialTypeRepository import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.assertThrows import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class MaterialTypeServiceTest : AbstractExternalNamedModelServiceTest() { override val repository: MaterialTypeRepository = mock() diff --git a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixMaterialServiceTest.kt b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixMaterialServiceTest.kt index bffc6a4..0ab18cf 100644 --- a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixMaterialServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixMaterialServiceTest.kt @@ -4,12 +4,14 @@ import com.nhaarman.mockitokotlin2.* import dev.fyloz.colorrecipesexplorer.model.* import dev.fyloz.colorrecipesexplorer.repository.MixMaterialRepository import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.assertThrows import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertNotEquals import kotlin.test.assertTrue +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class MixMaterialServiceTest : AbstractModelServiceTest() { override val repository: MixMaterialRepository = mock() private val materialService: MaterialService = mock() diff --git a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixServiceTest.kt b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixServiceTest.kt index 00d1c2c..a9debc1 100644 --- a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixServiceTest.kt @@ -5,9 +5,11 @@ import dev.fyloz.colorrecipesexplorer.model.* import dev.fyloz.colorrecipesexplorer.repository.MixRepository import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance import kotlin.test.assertEquals import kotlin.test.assertTrue +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class MixServiceTest : AbstractExternalModelServiceTest() { override val repository: MixRepository = mock() private val recipeService: RecipeService = mock() diff --git a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixTypeServiceTest.kt b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixTypeServiceTest.kt index b57d4ce..4e6f246 100644 --- a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixTypeServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/MixTypeServiceTest.kt @@ -7,10 +7,12 @@ import dev.fyloz.colorrecipesexplorer.model.* import dev.fyloz.colorrecipesexplorer.repository.MixTypeRepository import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.assertThrows import kotlin.test.assertEquals import kotlin.test.assertTrue +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class MixTypeServiceTest : AbstractNamedModelServiceTest() { override val repository: MixTypeRepository = mock() private val materialService: MaterialService = mock() diff --git a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeServiceTest.kt b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeServiceTest.kt index dd3793c..a8ccd0b 100644 --- a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeServiceTest.kt @@ -9,6 +9,7 @@ import dev.fyloz.colorrecipesexplorer.service.files.FileService import io.mockk.* import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.assertThrows import org.springframework.mock.web.MockMultipartFile import org.springframework.web.multipart.MultipartFile @@ -17,6 +18,7 @@ import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class RecipeServiceTest : AbstractExternalModelServiceTest() { override val repository: RecipeRepository = mock() @@ -72,6 +74,19 @@ class RecipeServiceTest : } } + // getAllByName() + + @Test + fun `getAllByName() returns the recipes with the given name`() { + val recipes = listOf(entity, anotherEntity) + + whenever(repository.findAllByName(entity.name)).doReturn(recipes) + + val found = service.getAllByName(entity.name) + + assertEquals(recipes, found) + } + // getAllByCompany() @Test diff --git a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeStepServiceTest.kt b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeStepServiceTest.kt index 4fe2e5a..b0f9c73 100644 --- a/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeStepServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/colorrecipesexplorer/service/RecipeStepServiceTest.kt @@ -5,9 +5,11 @@ import dev.fyloz.colorrecipesexplorer.model.* import dev.fyloz.colorrecipesexplorer.model.account.group import dev.fyloz.colorrecipesexplorer.repository.RecipeStepRepository import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.assertThrows import kotlin.test.assertTrue +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class RecipeStepServiceTest : AbstractModelServiceTest() { override val repository: RecipeStepRepository = mock()