package fr.openwide.core.test.jpa.more.business.history.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.mockito.Mockito.when; import java.util.Locale; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.internal.stubbing.answers.Returns; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.mockito.stubbing.OngoingStubbing; import fr.openwide.core.commons.util.rendering.IRenderer; import fr.openwide.core.jpa.business.generic.model.GenericEntityReference; import fr.openwide.core.jpa.business.generic.service.IEntityService; import fr.openwide.core.jpa.more.business.history.model.embeddable.HistoryValue; import fr.openwide.core.jpa.more.rendering.service.IRendererService; import fr.openwide.core.spring.property.SpringPropertyIds; import fr.openwide.core.spring.property.service.IPropertyService; import fr.openwide.core.test.jpa.more.business.entity.model.TestEntity; import fr.openwide.core.test.jpa.more.business.history.service.TestHistoryValueServiceImpl; public class TestHistoryValueService /** Mocked, no need for extending a base class */ { private static final Locale DEFAULT_LOCALE = Locale.ENGLISH; @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @Mock protected IEntityService entityService; @Mock protected IRendererService rendererService; @Mock protected IPropertyService propertyService; @Mock protected IRenderer<Object> renderer; @InjectMocks protected TestHistoryValueServiceImpl historyValueService; @Before public void initPropertyService() { OngoingStubbing<Locale> ongoing = when(propertyService.get(SpringPropertyIds.DEFAULT_LOCALE)); ongoing.thenReturn(DEFAULT_LOCALE); } @Test public void retrieveGenericEntityMissing() { GenericEntityReference<Long, TestEntity> missingEntityReference = GenericEntityReference.of(TestEntity.class, 1L); HistoryValue historyValue = new HistoryValue("label", missingEntityReference); when(entityService.getEntity(missingEntityReference)).thenReturn(null); assertNull(historyValueService.retrieve(historyValue)); } @Test public void retrieveGenericEntityPresent() { TestEntity testEntity = new TestEntity(); GenericEntityReference<Long, TestEntity> presentEntityReference = GenericEntityReference.of(TestEntity.class, 1L); HistoryValue historyValue = new HistoryValue("label", presentEntityReference); when(entityService.getEntity(presentEntityReference)).thenReturn(testEntity); assertEquals(testEntity, historyValueService.retrieve(historyValue)); } @Test public void renderHistoryValueExplicitRendererWithRetrieval() { final String expectedRendering = "EXPECTED"; TestEntity testEntity = new TestEntity(); GenericEntityReference<Long, TestEntity> presentEntityReference = GenericEntityReference.of(TestEntity.class, 1L); HistoryValue historyValue = new HistoryValue("UNEXPECTED", presentEntityReference); when(entityService.getEntity(presentEntityReference)).thenReturn(testEntity); when(renderer.render(testEntity, DEFAULT_LOCALE)).thenReturn(expectedRendering); assertEquals(expectedRendering, historyValueService.render(historyValue, renderer, DEFAULT_LOCALE)); } @Test public void renderHistoryValueImplicitRendererWithRetrieval() { final String expectedRendering = "EXPECTED"; TestEntity testEntity = new TestEntity(); GenericEntityReference<Long, TestEntity> presentEntityReference = GenericEntityReference.of(TestEntity.class, 1L); HistoryValue historyValue = new HistoryValue("UNEXPECTED", presentEntityReference); when(entityService.getEntity(presentEntityReference)).thenReturn(testEntity); when(renderer.render(testEntity, DEFAULT_LOCALE)).thenReturn(expectedRendering); when(rendererService.findRenderer(TestEntity.class)).then(/* Bypass generics with an Answer */ new Returns(renderer)); assertEquals(expectedRendering, historyValueService.render(historyValue, DEFAULT_LOCALE)); } @Test public void renderHistoryValueExplicitRendererNoRetrieval() { final String expectedRendering = "EXPECTED"; HistoryValue historyValue = new HistoryValue(expectedRendering); assertEquals(expectedRendering, historyValueService.render(historyValue, renderer, DEFAULT_LOCALE)); } @Test public void renderHistoryValueImplicitRendererNoRetrieval() { final String expectedRendering = "EXPECTED"; HistoryValue historyValue = new HistoryValue(expectedRendering); assertEquals(expectedRendering, historyValueService.render(historyValue, DEFAULT_LOCALE)); } @Test public void createNullExplicitRenderer() { final String expectedRendering = "EXPECTED"; when(renderer.render(null, DEFAULT_LOCALE)).thenReturn(expectedRendering); HistoryValue expectedValue = new HistoryValue(expectedRendering); assertEquals(expectedValue, historyValueService.create(null, renderer)); } @Test public void createNullImplicitRenderer() { HistoryValue expectedValue = new HistoryValue(); assertEquals(expectedValue, historyValueService.create(null)); } @Test public void createEntityTypeExplicitRenderer() { final String expectedRendering = "EXPECTED"; final TestEntity originalValue = new TestEntity(); originalValue.setId(1L); when(renderer.render(originalValue, DEFAULT_LOCALE)).thenReturn(expectedRendering); HistoryValue expectedValue = new HistoryValue(expectedRendering, GenericEntityReference.of(originalValue)); assertEquals(expectedValue, historyValueService.create(originalValue, renderer)); } @Test public void createEntityTypeImplicitRenderer() { final String expectedRendering = "EXPECTED"; final TestEntity originalValue = new TestEntity(); originalValue.setId(1L); when(renderer.render(originalValue, DEFAULT_LOCALE)).thenReturn(expectedRendering); when(rendererService.findRenderer(TestEntity.class)).then(/* Bypass generics with an Answer */ new Returns(renderer)); HistoryValue expectedValue = new HistoryValue(expectedRendering, GenericEntityReference.of(originalValue)); assertEquals(expectedValue, historyValueService.create(originalValue)); } @Test public void createMiscTypeExplicitRenderer() { final String expectedRendering = "EXPECTED"; final Object originalValue = new Object(); when(renderer.render(originalValue, DEFAULT_LOCALE)).thenReturn(expectedRendering); HistoryValue expectedValue = new HistoryValue(expectedRendering); assertEquals(expectedValue, historyValueService.create(originalValue, renderer)); } @Test public void createMiscTypeImplicitRenderer() { final String expectedRendering = "EXPECTED"; final Object originalValue = new Object(); when(renderer.render(originalValue, DEFAULT_LOCALE)).thenReturn(expectedRendering); when(rendererService.findRenderer(Object.class)).then(/* Bypass generics with an Answer */ new Returns(renderer)); HistoryValue expectedValue = new HistoryValue(expectedRendering); assertEquals(expectedValue, historyValueService.create(originalValue)); } }