| /* |
| ******************************************************************************* |
| * Copyright (c) 2019 Contributors to the Eclipse Foundation |
| * |
| * See the NOTICE file(s) distributed with this work for additional |
| * information regarding copyright ownership. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| ******************************************************************************* |
| */ |
| package org.eclipse.openk.contactbasedata.service; |
| |
| import org.eclipse.openk.contactbasedata.config.TestConfiguration; |
| import org.eclipse.openk.contactbasedata.exceptions.NotFoundException; |
| import org.eclipse.openk.contactbasedata.model.TblCompany; |
| import org.eclipse.openk.contactbasedata.model.TblContact; |
| import org.eclipse.openk.contactbasedata.repository.CompanyRepository; |
| import org.eclipse.openk.contactbasedata.repository.ContactRepository; |
| import org.eclipse.openk.contactbasedata.repository.PersonTypeRepository; |
| import org.eclipse.openk.contactbasedata.repository.SalutationRepository; |
| import org.eclipse.openk.contactbasedata.support.MockDataHelper; |
| import org.eclipse.openk.contactbasedata.viewmodel.CompanyDto; |
| import org.eclipse.openk.contactbasedata.viewmodel.ContactPersonDto; |
| import org.junit.jupiter.api.Test; |
| import org.mockito.stubbing.Answer; |
| import org.springframework.beans.factory.annotation.Autowired; |
| import org.springframework.beans.factory.annotation.Qualifier; |
| import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; |
| import org.springframework.boot.test.mock.mockito.MockBean; |
| import org.springframework.test.context.ContextConfiguration; |
| |
| import java.util.List; |
| import java.util.Optional; |
| import java.util.UUID; |
| |
| import static org.junit.jupiter.api.Assertions.*; |
| import static org.mockito.ArgumentMatchers.any; |
| import static org.mockito.Mockito.when; |
| |
| @DataJpaTest |
| @ContextConfiguration(classes = {TestConfiguration.class}) |
| |
| public class CompanyServiceTest { |
| @Qualifier("myCompanyService") |
| @Autowired |
| private CompanyService companyService; |
| |
| @MockBean |
| private CompanyRepository companyRepository; |
| |
| @MockBean |
| private ContactRepository contactRepository; |
| |
| @MockBean |
| private SalutationRepository salutationRepository; |
| |
| @MockBean |
| private PersonTypeRepository personTypeRepository; |
| |
| @Test |
| public void shouldFindACompanyProperly() { |
| TblCompany ep = MockDataHelper.mockCompany(); |
| when(companyRepository.findByTblContactUuid(any(UUID.class))).thenReturn(Optional.of(ep)); |
| CompanyDto dto = companyService.findCompany(UUID.randomUUID()); |
| |
| assertEquals(ep.getContact().getUuid(), dto.getContactUuid()); |
| } |
| |
| @Test |
| public void shouldThrowInErrorCaseWithCompany() { |
| TblCompany ep = MockDataHelper.mockCompany(); |
| when(companyRepository.findByTblContactUuid(any(UUID.class))).thenReturn(Optional.empty()); |
| assertThrows(NotFoundException.class, () -> companyService.findCompany(UUID.randomUUID())); |
| } |
| |
| @Test |
| public void shouldUpdateCompany() { |
| CompanyDto epDto = MockDataHelper.mockCompanyDto(); |
| TblCompany epTbl = MockDataHelper.mockCompany(); |
| when(companyRepository.findByTblContactUuid(any(UUID.class))).thenReturn(Optional.of(epTbl)); |
| when(salutationRepository.findByUuid(any(UUID.class))) |
| .thenReturn(Optional.of(MockDataHelper.mockRefSalutation())); |
| when(personTypeRepository.findByUuid(any(UUID.class))) |
| .thenReturn(Optional.of(MockDataHelper.mockRefPersonType())); |
| |
| when(companyRepository.save(any(TblCompany.class))) |
| .then((Answer<TblCompany>) invocation -> { |
| Object[] args = invocation.getArguments(); |
| return (TblCompany) args[0]; |
| }); |
| |
| CompanyDto savedDto = companyService.updateCompany(epDto); |
| assertEquals(epTbl.getContact().getUuid(), savedDto.getContactUuid()); |
| assertEquals(epTbl.getContact().getNote(), savedDto.getContactNote()); |
| assertEquals(epTbl.getContact().getContactType(), savedDto.getContactType()); |
| assertEquals(epTbl.getCompanyName(), savedDto.getCompanyName()); |
| assertEquals(epTbl.getCompanyType(), savedDto.getCompanyType()); |
| } |
| |
| @Test |
| public void shouldNotUpdateCompany_Exception1() { |
| CompanyDto epDto = MockDataHelper.mockCompanyDto(); |
| TblCompany epTbl = MockDataHelper.mockCompany(); |
| when(companyRepository.findByTblContactUuid(any(UUID.class))).thenReturn(Optional.empty()); |
| when(salutationRepository.findByUuid(any(UUID.class))) |
| .thenReturn(Optional.of(MockDataHelper.mockRefSalutation())); |
| when(personTypeRepository.findByUuid(any(UUID.class))) |
| .thenReturn(Optional.of(MockDataHelper.mockRefPersonType())); |
| |
| when(companyRepository.save(any(TblCompany.class))) |
| .then((Answer<TblCompany>) invocation -> { |
| Object[] args = invocation.getArguments(); |
| return (TblCompany) args[0]; |
| }); |
| |
| assertThrows( NotFoundException.class, () -> companyService.updateCompany(epDto)); |
| } |
| |
| @Test |
| public void shouldInsertCompany() { |
| CompanyDto epDto = MockDataHelper.mockCompanyDto(); |
| epDto.setContactUuid(null); |
| |
| when(contactRepository.save(any(TblContact.class))) |
| .then((Answer<TblContact>) invocation -> { |
| Object[] args = invocation.getArguments(); |
| return (TblContact) args[0]; |
| }); |
| when(companyRepository.save(any(TblCompany.class))) |
| .then((Answer<TblCompany>) invocation -> { |
| Object[] args = invocation.getArguments(); |
| return (TblCompany) args[0]; |
| }); |
| |
| CompanyDto savedDto = companyService.insertCompany(epDto); |
| assertNotNull(savedDto.getContactUuid()); |
| assertEquals(epDto.getContactNote(), savedDto.getContactNote()); |
| assertEquals(epDto.getContactType(), savedDto.getContactType()); |
| assertEquals(epDto.getCompanyName(), savedDto.getCompanyName()); |
| assertEquals(epDto.getCompanyType(), savedDto.getCompanyType()); |
| } |
| |
| @Test |
| public void findContactPersonsToCompanyWithSuccess() { |
| TblCompany company = MockDataHelper.mockCompany(); |
| company.setContactPersons( MockDataHelper.mockTblContactPersons()); |
| when(companyRepository.findByTblContactUuid(any(UUID.class))).thenReturn(Optional.of(company)); |
| List<ContactPersonDto> cpDtos = companyService.findContactPersonsToCompany(UUID.randomUUID()); |
| assertEquals(company.getContactPersons().size(), cpDtos.size()); |
| assertEquals(company.getContactPersons().get(1).getContact().getUuid(), cpDtos.get(1).getContactUuid()); |
| } |
| |
| |
| @Test |
| public void findContactPersonsToCompanyWithException() { |
| when(companyRepository.findByTblContactUuid(any(UUID.class))).thenReturn(Optional.empty()); |
| assertThrows( NotFoundException.class, ()-> companyService.findContactPersonsToCompany(UUID.randomUUID())); |
| } |
| } |