From 6bd111a5e95a093bd7f60e7348195d935afb5ffe Mon Sep 17 00:00:00 2001 From: FyloZ Date: Sun, 27 Dec 2020 01:04:02 -0500 Subject: [PATCH] Ajout du support des compagnies dans le backend REST. --- .../colorrecipesexplorer/model/Company.java | 40 ------------- .../repository/CompanyRepository.java | 11 ---- ...nyService.java => CompanyJavaService.java} | 6 +- .../service/model/RecipeService.java | 4 +- .../creators/CompanyCreatorController.java | 8 +-- .../creators/RecipeCreatorController.java | 6 +- .../editors/RecipeEditorController.java | 6 +- .../removers/CompanyRemoverController.java | 8 +-- .../colorrecipesexplorer/model/Company.kt | 60 +++++++++++++++++++ .../repository/CompanyRepository.kt | 7 +++ .../rest/CompanyController.kt | 16 +++++ .../rest/MaterialController.kt | 2 +- .../service/CompanyService.kt | 34 +++++++++++ .../service/MaterialService.kt | 3 +- .../repository/CompanyRepositoryTest.kt | 11 ++++ .../service/AbstractServiceTest.kt | 16 ++++- .../service/CompanyServiceTest.kt | 47 +++++++++++++++ .../service/MaterialServiceTest.kt | 2 +- 18 files changed, 210 insertions(+), 77 deletions(-) delete mode 100644 src/main/java/dev/fyloz/trial/colorrecipesexplorer/model/Company.java delete mode 100644 src/main/java/dev/fyloz/trial/colorrecipesexplorer/repository/CompanyRepository.java rename src/main/java/dev/fyloz/trial/colorrecipesexplorer/service/model/{CompanyService.java => CompanyJavaService.java} (94%) create mode 100644 src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/model/Company.kt create mode 100644 src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/repository/CompanyRepository.kt create mode 100644 src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/rest/CompanyController.kt create mode 100644 src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/CompanyService.kt create mode 100644 src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/repository/CompanyRepositoryTest.kt create mode 100644 src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/CompanyServiceTest.kt diff --git a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/model/Company.java b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/model/Company.java deleted file mode 100644 index 591230f..0000000 --- a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/model/Company.java +++ /dev/null @@ -1,40 +0,0 @@ -package dev.fyloz.trial.colorrecipesexplorer.model; - -import lombok.*; -import org.hibernate.validator.constraints.Length; -import org.jetbrains.annotations.Nullable; - -import javax.persistence.*; -import javax.validation.constraints.NotNull; -import java.util.Objects; - -@Entity -@Data -@NoArgsConstructor -@RequiredArgsConstructor -@AllArgsConstructor -public class Company implements Model { - - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) - private Long id; - - @NonNull - @NotNull - @Length(min = 2, max = 50) - @Column(unique = true) - private String name; - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Company company = (Company) o; - return Objects.equals(name, company.name); - } - - @Override - public int hashCode() { - return Objects.hash(name); - } -} diff --git a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/repository/CompanyRepository.java b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/repository/CompanyRepository.java deleted file mode 100644 index c418597..0000000 --- a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/repository/CompanyRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package dev.fyloz.trial.colorrecipesexplorer.repository; - -import dev.fyloz.trial.colorrecipesexplorer.model.Company; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface CompanyRepository extends JpaRepository { - - boolean existsByName(String name); -} diff --git a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/service/model/CompanyService.java b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/service/model/CompanyJavaService.java similarity index 94% rename from src/main/java/dev/fyloz/trial/colorrecipesexplorer/service/model/CompanyService.java rename to src/main/java/dev/fyloz/trial/colorrecipesexplorer/service/model/CompanyJavaService.java index 9f01028..6260a7b 100644 --- a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/service/model/CompanyService.java +++ b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/service/model/CompanyJavaService.java @@ -4,8 +4,8 @@ import dev.fyloz.trial.colorrecipesexplorer.exception.model.EntityAlreadyExistsE import dev.fyloz.trial.colorrecipesexplorer.exception.model.EntityLinkedException; import dev.fyloz.trial.colorrecipesexplorer.exception.model.ModelException; import dev.fyloz.trial.colorrecipesexplorer.model.Company; -import dev.fyloz.trial.colorrecipesexplorer.service.AbstractJavaService; import dev.fyloz.trial.colorrecipesexplorer.repository.CompanyRepository; +import dev.fyloz.trial.colorrecipesexplorer.service.AbstractJavaService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -13,11 +13,11 @@ import org.springframework.stereotype.Service; import javax.validation.constraints.NotNull; @Service -public class CompanyService extends AbstractJavaService { +public class CompanyJavaService extends AbstractJavaService { private RecipeService recipeService; - public CompanyService() { + public CompanyJavaService() { super(Company.class); } diff --git a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/service/model/RecipeService.java b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/service/model/RecipeService.java index 4edb11b..1fe4237 100644 --- a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/service/model/RecipeService.java +++ b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/service/model/RecipeService.java @@ -19,7 +19,7 @@ import java.util.stream.Collectors; @Service public class RecipeService extends AbstractJavaService { - private CompanyService companyService; + private CompanyJavaService companyService; private MixService mixService; private StepService stepService; private ImagesService imagesService; @@ -34,7 +34,7 @@ public class RecipeService extends AbstractJavaService } @Autowired - public void setCompanyService(CompanyService companyService) { + public void setCompanyService(CompanyJavaService companyService) { this.companyService = companyService; } diff --git a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/creators/CompanyCreatorController.java b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/creators/CompanyCreatorController.java index f3d5784..54edae7 100644 --- a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/creators/CompanyCreatorController.java +++ b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/creators/CompanyCreatorController.java @@ -1,11 +1,11 @@ package dev.fyloz.trial.colorrecipesexplorer.web.controller.thymeleaf.creators; import dev.fyloz.trial.colorrecipesexplorer.exception.model.EntityAlreadyExistsException; +import dev.fyloz.trial.colorrecipesexplorer.model.Company; import dev.fyloz.trial.colorrecipesexplorer.web.response.ModelResponseBuilder; import dev.fyloz.trial.colorrecipesexplorer.web.response.ResponseCode; import dev.fyloz.trial.colorrecipesexplorer.web.response.ResponseDataType; -import dev.fyloz.trial.colorrecipesexplorer.model.Company; -import dev.fyloz.trial.colorrecipesexplorer.service.model.CompanyService; +import dev.fyloz.trial.colorrecipesexplorer.service.model.CompanyJavaService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.http.MediaType; @@ -23,10 +23,10 @@ import static dev.fyloz.trial.colorrecipesexplorer.web.WebsitePaths.CREATOR_COMP @Profile("thymeleaf") public class CompanyCreatorController { - private CompanyService companyService; + private CompanyJavaService companyService; @Autowired - public CompanyCreatorController(CompanyService companyService) { + public CompanyCreatorController(CompanyJavaService companyService) { this.companyService = companyService; } diff --git a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/creators/RecipeCreatorController.java b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/creators/RecipeCreatorController.java index d1116d6..020dfe5 100644 --- a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/creators/RecipeCreatorController.java +++ b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/creators/RecipeCreatorController.java @@ -4,7 +4,7 @@ import dev.fyloz.trial.colorrecipesexplorer.web.response.ModelResponseBuilder; import dev.fyloz.trial.colorrecipesexplorer.web.response.ResponseCode; import dev.fyloz.trial.colorrecipesexplorer.web.response.ResponseDataType; import dev.fyloz.trial.colorrecipesexplorer.model.Recipe; -import dev.fyloz.trial.colorrecipesexplorer.service.model.CompanyService; +import dev.fyloz.trial.colorrecipesexplorer.service.model.CompanyJavaService; import dev.fyloz.trial.colorrecipesexplorer.service.model.RecipeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; @@ -23,10 +23,10 @@ import static dev.fyloz.trial.colorrecipesexplorer.web.WebsitePaths.EDITOR_RECIP public class RecipeCreatorController { private RecipeService recipeService; - private CompanyService companyService; + private CompanyJavaService companyService; @Autowired - public RecipeCreatorController(RecipeService recipeService, CompanyService companyService) { + public RecipeCreatorController(RecipeService recipeService, CompanyJavaService companyService) { this.recipeService = recipeService; this.companyService = companyService; } diff --git a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/editors/RecipeEditorController.java b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/editors/RecipeEditorController.java index 452627f..275ecac 100644 --- a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/editors/RecipeEditorController.java +++ b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/editors/RecipeEditorController.java @@ -6,7 +6,7 @@ import dev.fyloz.trial.colorrecipesexplorer.web.response.ResponseCode; import dev.fyloz.trial.colorrecipesexplorer.web.response.ResponseDataType; import dev.fyloz.trial.colorrecipesexplorer.model.Recipe; import dev.fyloz.trial.colorrecipesexplorer.model.dto.RecipeEditorFormDto; -import dev.fyloz.trial.colorrecipesexplorer.service.model.CompanyService; +import dev.fyloz.trial.colorrecipesexplorer.service.model.CompanyJavaService; import dev.fyloz.trial.colorrecipesexplorer.service.model.RecipeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; @@ -25,10 +25,10 @@ import static dev.fyloz.trial.colorrecipesexplorer.web.WebsitePaths.*; public class RecipeEditorController { private RecipeService recipeService; - private CompanyService companyService; + private CompanyJavaService companyService; @Autowired - public RecipeEditorController(RecipeService recipeService, CompanyService companyService) { + public RecipeEditorController(RecipeService recipeService, CompanyJavaService companyService) { this.recipeService = recipeService; this.companyService = companyService; } diff --git a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/removers/CompanyRemoverController.java b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/removers/CompanyRemoverController.java index c7b0888..24d9172 100644 --- a/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/removers/CompanyRemoverController.java +++ b/src/main/java/dev/fyloz/trial/colorrecipesexplorer/web/controller/thymeleaf/removers/CompanyRemoverController.java @@ -2,11 +2,11 @@ package dev.fyloz.trial.colorrecipesexplorer.web.controller.thymeleaf.removers; import dev.fyloz.trial.colorrecipesexplorer.exception.model.EntityLinkedException; import dev.fyloz.trial.colorrecipesexplorer.exception.model.EntityNotFoundException; +import dev.fyloz.trial.colorrecipesexplorer.model.Company; import dev.fyloz.trial.colorrecipesexplorer.web.response.ModelResponseBuilder; import dev.fyloz.trial.colorrecipesexplorer.web.response.ResponseCode; import dev.fyloz.trial.colorrecipesexplorer.web.response.ResponseDataType; -import dev.fyloz.trial.colorrecipesexplorer.model.Company; -import dev.fyloz.trial.colorrecipesexplorer.service.model.CompanyService; +import dev.fyloz.trial.colorrecipesexplorer.service.model.CompanyJavaService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Controller; @@ -22,10 +22,10 @@ import static dev.fyloz.trial.colorrecipesexplorer.web.WebsitePaths.REMOVER_COMP @Profile("thymeleaf") public class CompanyRemoverController { - private CompanyService companyService; + private CompanyJavaService companyService; @Autowired - public CompanyRemoverController(CompanyService companyService) { + public CompanyRemoverController(CompanyJavaService companyService) { this.companyService = companyService; } diff --git a/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/model/Company.kt b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/model/Company.kt new file mode 100644 index 0000000..b971530 --- /dev/null +++ b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/model/Company.kt @@ -0,0 +1,60 @@ +package dev.fyloz.trial.colorrecipesexplorer.model + +import dev.fyloz.trial.colorrecipesexplorer.model.validation.NullOrNotBlank +import java.util.* +import javax.persistence.* +import javax.validation.constraints.NotBlank +import javax.validation.constraints.NotNull + +private const val COMPANY_ID_NULL_MESSAGE = "Un identifiant est requis" +private const val COMPANY_NAME_NULL_MESSAGE = "Un nom est requis" + +@Entity +data class Company( + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE) + override val id: Long?, + + @Column(unique = true) + override val name: String +) : NamedModel { + override fun equals(other: Any?): Boolean = other is Company && name == other.name + override fun hashCode(): Int = Objects.hash(name) +} + + +open class CompanySaveDto( + @field:NotBlank(message = COMPANY_NAME_NULL_MESSAGE) + val name: String +) : EntityDto { + override fun toEntity(): Company = Company(null, name) +} + + +open class CompanyUpdateDto( + @field:NotNull(message = COMPANY_ID_NULL_MESSAGE) + val id: Long, + + @field:NullOrNotBlank(message = COMPANY_NAME_NULL_MESSAGE) + val name: String? +) : EntityDto { + override fun toEntity(): Company = Company(id, name ?: "") +} + +// ==== DSL ==== +fun company( + id: Long? = null, + name: String = "name", + op: Company.() -> Unit = {} +) = Company(id, name).apply(op) + +fun companySaveDto( + name: String = "name", + op: CompanySaveDto.() -> Unit = {} +) = CompanySaveDto(name).apply(op) + +fun companyUpdateDto( + id: Long = 0L, + name: String? = "name", + op: CompanyUpdateDto.() -> Unit = {} +) = CompanyUpdateDto(id, name).apply(op) diff --git a/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/repository/CompanyRepository.kt b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/repository/CompanyRepository.kt new file mode 100644 index 0000000..f07b1bd --- /dev/null +++ b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/repository/CompanyRepository.kt @@ -0,0 +1,7 @@ +package dev.fyloz.trial.colorrecipesexplorer.repository + +import dev.fyloz.trial.colorrecipesexplorer.model.Company +import org.springframework.stereotype.Repository + +@Repository +interface CompanyRepository : NamedJpaRepository diff --git a/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/rest/CompanyController.kt b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/rest/CompanyController.kt new file mode 100644 index 0000000..e4028b4 --- /dev/null +++ b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/rest/CompanyController.kt @@ -0,0 +1,16 @@ +package dev.fyloz.trial.colorrecipesexplorer.rest + +import dev.fyloz.trial.colorrecipesexplorer.model.Company +import dev.fyloz.trial.colorrecipesexplorer.model.CompanySaveDto +import dev.fyloz.trial.colorrecipesexplorer.model.CompanyUpdateDto +import dev.fyloz.trial.colorrecipesexplorer.service.CompanyService +import org.springframework.context.annotation.Profile +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +private const val COMPANY_CONTROLLER_PATH = "api/company" + +@RestController +@RequestMapping(COMPANY_CONTROLLER_PATH) +@Profile("rest") +class CompanyController(companyService: CompanyService) : AbstractRestModelApiController(companyService, COMPANY_CONTROLLER_PATH) diff --git a/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/rest/MaterialController.kt b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/rest/MaterialController.kt index a81f6da..bd3ecef 100644 --- a/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/rest/MaterialController.kt +++ b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/rest/MaterialController.kt @@ -49,5 +49,5 @@ class MaterialController(materialService: MaterialService) : AbstractRestModelAp @PutMapping("oldupdate") override fun update(entity: MaterialUpdateDto): ResponseEntity = - super.update(entity) + ResponseEntity.notFound().build() } diff --git a/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/CompanyService.kt b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/CompanyService.kt new file mode 100644 index 0000000..5b491f8 --- /dev/null +++ b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/CompanyService.kt @@ -0,0 +1,34 @@ +package dev.fyloz.trial.colorrecipesexplorer.service + +import dev.fyloz.trial.colorrecipesexplorer.model.Company +import dev.fyloz.trial.colorrecipesexplorer.model.CompanySaveDto +import dev.fyloz.trial.colorrecipesexplorer.model.CompanyUpdateDto +import dev.fyloz.trial.colorrecipesexplorer.model.company +import dev.fyloz.trial.colorrecipesexplorer.repository.CompanyRepository +import dev.fyloz.trial.colorrecipesexplorer.service.model.RecipeService +import org.springframework.stereotype.Service +import org.springframework.util.Assert + +interface CompanyService : NamedModelService { + /** Checks if the given [company] is used by one or more recipes. */ + fun isLinkedToRecipes(company: Company): Boolean +} + +@Service +class CompanyServiceImpl(companyRepository: CompanyRepository, val recipeService: RecipeService) : + AbstractNamedModelService(companyRepository), + CompanyService { + override fun isLinkedToRecipes(company: Company): Boolean = recipeService.existsByCompany(company) + + override fun update(entity: Company): Company { + Assert.notNull(entity.id, "CompanyService.update() was called with a null identifier") + val persistedCompany = getById(entity.id!!) + + return super.update(with(entity) { + company( + id = id!!, + name = if (name.isNotBlank()) name else persistedCompany.name + ) + }) + } +} diff --git a/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/MaterialService.kt b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/MaterialService.kt index 16c890b..cea0283 100644 --- a/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/MaterialService.kt +++ b/src/main/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/MaterialService.kt @@ -1,6 +1,5 @@ package dev.fyloz.trial.colorrecipesexplorer.service -import dev.fyloz.trial.colorrecipesexplorer.exception.model.EntityAlreadyExistsRestException import dev.fyloz.trial.colorrecipesexplorer.model.* import dev.fyloz.trial.colorrecipesexplorer.repository.MaterialRepository import dev.fyloz.trial.colorrecipesexplorer.service.files.SimdutService @@ -12,7 +11,7 @@ interface MaterialService : NamedModelService(companyRepository, entityManager) { + override fun entity(name: String): Company = company(name = name) +} diff --git a/src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/AbstractServiceTest.kt b/src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/AbstractServiceTest.kt index a00d3f0..cfd0a37 100644 --- a/src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/AbstractServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/AbstractServiceTest.kt @@ -1,13 +1,19 @@ package dev.fyloz.trial.colorrecipesexplorer.service -import com.nhaarman.mockitokotlin2.* +import com.nhaarman.mockitokotlin2.doReturn +import com.nhaarman.mockitokotlin2.reset +import com.nhaarman.mockitokotlin2.verify +import com.nhaarman.mockitokotlin2.whenever import dev.fyloz.trial.colorrecipesexplorer.exception.model.EntityAlreadyExistsRestException import dev.fyloz.trial.colorrecipesexplorer.exception.model.EntityNotFoundRestException import dev.fyloz.trial.colorrecipesexplorer.model.EntityDto import dev.fyloz.trial.colorrecipesexplorer.model.Model import dev.fyloz.trial.colorrecipesexplorer.model.NamedModel import dev.fyloz.trial.colorrecipesexplorer.repository.NamedJpaRepository -import org.junit.jupiter.api.* +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows import org.springframework.data.jpa.repository.JpaRepository import java.util.* import kotlin.test.assertEquals @@ -203,9 +209,11 @@ abstract class AbstractModelServiceTest, U : EntityD inner class DeleteById { @Test fun `calls deleteById() in the repository with the given id`() { + doReturn(entity).whenever(service).getById(entity.id!!) + service.deleteById(entity.id!!) - verify(repository).deleteById(entity.id!!) + verify(repository).delete(entity) } } } @@ -272,6 +280,7 @@ abstract class AbstractNamedModelServiceTest, U whenever(repository.save(entity)).doReturn(entity) whenever(repository.findByName(entity.name)).doReturn(null) doReturn(true).whenever(service).existsById(entity.id!!) + doReturn(entity).whenever(service).getById(entity.id!!) val found = service.update(entity) @@ -292,6 +301,7 @@ abstract class AbstractNamedModelServiceTest, U @Test fun `throws EntityAlreadyExistsRestException when an entity with the updated name exists`() { whenever(repository.findByName(entity.name)).doReturn(entityWithEntityName) + doReturn(entity).whenever(service).getById(entity.id!!) val exception = assertThrows { service.update(entity) } assertEquals(entity.name, exception.value) diff --git a/src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/CompanyServiceTest.kt b/src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/CompanyServiceTest.kt new file mode 100644 index 0000000..5c38d93 --- /dev/null +++ b/src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/CompanyServiceTest.kt @@ -0,0 +1,47 @@ +package dev.fyloz.trial.colorrecipesexplorer.service + +import com.nhaarman.mockitokotlin2.* +import dev.fyloz.trial.colorrecipesexplorer.model.* +import dev.fyloz.trial.colorrecipesexplorer.repository.CompanyRepository +import dev.fyloz.trial.colorrecipesexplorer.service.model.RecipeService +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.Nested +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class CompanyServiceTest : AbstractNamedModelServiceTest() { + private val recipeService: RecipeService = mock() + override val repository: CompanyRepository = mock() + override val service: CompanyService = spy(CompanyServiceImpl(repository, recipeService)) + + override val entity: Company = company(id = 0L, name = "company") + override val anotherEntity: Company = company(id = 1L, name = "another company") + override val entityWithEntityName: Company = company(id = 2L, name = "company") + override val entitySaveDto: CompanySaveDto = spy(companySaveDto()) + override val entityUpdateDto: CompanyUpdateDto = spy(companyUpdateDto(id = 0L)) + + @AfterEach + override fun afterEach() { + reset(recipeService) + super.afterEach() + } + + @Nested + inner class IsLinkedToRecipes { + fun `returns true when a given company is linked to one or more recipes`() { + whenever(recipeService.existsByCompany(entity)).doReturn(true) + + val found = service.isLinkedToRecipes(entity) + + assertTrue(found) + } + + fun `returns false when a given company is not linked to any recipe`() { + whenever(recipeService.existsByCompany(entity)).doReturn(false) + + val found = service.isLinkedToRecipes(entity) + + assertFalse(found) + } + } +} diff --git a/src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/MaterialServiceTest.kt b/src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/MaterialServiceTest.kt index de58191..9e94dc2 100644 --- a/src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/MaterialServiceTest.kt +++ b/src/test/kotlin/dev/fyloz/trial/colorrecipesexplorer/service/MaterialServiceTest.kt @@ -163,7 +163,7 @@ class MaterialServiceTest : AbstractNamedModelServiceTest