Created
January 9, 2018 12:22
-
-
Save RicardoRFaria/549762aa8c7dddd05124432c8988952e to your computer and use it in GitHub Desktop.
Mockito tests example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.ifood.merchant.core.service; | |
import com.ifood.merchant.core.converter.domain.GroupClientToGroupConverter; | |
import com.ifood.merchant.core.domain.Group; | |
import com.ifood.merchant.core.domain.Store; | |
import com.ifood.merchant.core.repository.GroupJpaRepository; | |
import com.ifood.merchant.model.GroupClientDTO; | |
import com.ifood.merchant.model.enums.GroupType; | |
import org.junit.Before; | |
import org.junit.Rule; | |
import org.junit.Test; | |
import org.junit.rules.ExpectedException; | |
import org.junit.runner.RunWith; | |
import org.mockito.ArgumentCaptor; | |
import org.mockito.InjectMocks; | |
import org.mockito.Mock; | |
import org.mockito.runners.MockitoJUnitRunner; | |
import javax.persistence.EntityManager; | |
import java.util.ArrayList; | |
import java.util.HashMap; | |
import static org.junit.Assert.*; | |
import static org.mockito.Matchers.any; | |
import static org.mockito.Mockito.verify; | |
import static org.mockito.Mockito.when; | |
@RunWith(MockitoJUnitRunner.class) | |
public class GroupServiceTest { | |
private static final String EXTERNAL_ID_TEST = "EXTERNAL_ID_TEST"; | |
private static final String DESCRIPTION_TEST = "Description test"; | |
private static final String SECOND_NAME_TEST = "Second name test"; | |
private static final String NAME_TEST = "Name test"; | |
private static final String SYSTEM_ID = "SYSTEM_ID"; | |
private static final String USER_ID = "USER_ID"; | |
@Mock | |
private GroupJpaRepository repository; | |
@Mock | |
private GroupClientToGroupConverter toUnmanagedGroup; | |
@Mock | |
private EntityManager entityManager; | |
@InjectMocks | |
private GroupService groupService; | |
@Rule | |
public ExpectedException thrown = ExpectedException.none(); | |
private ArgumentCaptor<Group> groupArgumentCaptor; | |
private GroupClientDTO mockGroupDTO; | |
@Before | |
public void setUp() { | |
mockGroupDTO = buildMockGroupDTO(); | |
when(toUnmanagedGroup.convert(any())).thenCallRealMethod(); | |
groupArgumentCaptor = ArgumentCaptor.forClass(Group.class); | |
} | |
@Test | |
public void createGroup() { | |
groupService.create(SYSTEM_ID, USER_ID, mockGroupDTO); | |
verify(repository).save(groupArgumentCaptor.capture()); | |
Group groupCreated = groupArgumentCaptor.getValue(); | |
assertNotNull(groupCreated.getId()); | |
assertEquals(EXTERNAL_ID_TEST, groupCreated.getExternalId()); | |
assertEquals(DESCRIPTION_TEST, groupCreated.getDescription()); | |
assertEquals(SECOND_NAME_TEST, groupCreated.getSecondName()); | |
assertEquals(NAME_TEST, groupCreated.getName()); | |
assertEquals(GroupType.GROUP, groupCreated.getType()); | |
assertTrue(groupCreated.isEnabled()); | |
assertNotNull(groupCreated.getSubGroups()); | |
assertNotNull(groupCreated.getStores()); | |
} | |
@Test | |
public void createGroupShouldThrowExceptionIfTypeIsNotSet() { | |
mockGroupDTO.setType(null); | |
thrown.expect(IllegalArgumentException.class); | |
thrown.expectMessage("Can't create a group without type"); | |
groupService.create(SYSTEM_ID, USER_ID, mockGroupDTO); | |
} | |
@Test | |
public void createCompanyGroupWithoutExternalIdShouldThrowException() { | |
mockGroupDTO.setType(GroupType.COMPANY); | |
mockGroupDTO.setExternalId(null); | |
thrown.expect(IllegalArgumentException.class); | |
thrown.expectMessage("Can't create a group with COMPANY type without External ID"); | |
groupService.create(SYSTEM_ID, USER_ID, mockGroupDTO); | |
} | |
@Test | |
public void createGroupShouldPutIDasExternalIdIfDontHaveIt() { | |
mockGroupDTO.setType(GroupType.REGION); | |
mockGroupDTO.setExternalId(null); | |
groupService.create(SYSTEM_ID, USER_ID, mockGroupDTO); | |
verify(repository).save(groupArgumentCaptor.capture()); | |
Group groupCreated = groupArgumentCaptor.getValue(); | |
assertNotNull(groupCreated.getExternalId()); | |
assertEquals(groupCreated.getId().toString(), groupCreated.getExternalId()); | |
} | |
private GroupClientDTO buildMockGroupDTO() { | |
return GroupClientDTO.builder() | |
.externalId(EXTERNAL_ID_TEST) | |
.subGroups(new ArrayList<>()) | |
.stores(new ArrayList<>()) | |
.metaData(new HashMap<>()) | |
.description(DESCRIPTION_TEST) | |
.secondName(SECOND_NAME_TEST) | |
.name(NAME_TEST) | |
.type(GroupType.GROUP) | |
.build(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment