package com.processpuzzle.fundamental_types.domain;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoAnnotations.Mock;
import com.processpuzzle.application.configuration.domain.ApplicationContextFactory;
import com.processpuzzle.application.configuration.domain.MeasurementContext;
import com.processpuzzle.application.configuration.domain.ProcessPuzzleContext;
import com.processpuzzle.application.domain.Application;
import com.processpuzzle.fundamental_types.quantity.domain.Unit;
import com.processpuzzle.fundamental_types.quantity.domain.Units;
import com.processpuzzle.fundamental_types.quantity.money.domain.Currency;
import com.processpuzzle.sharedfixtures.domaintier.DomainTierTestConfiguration;
public class UnitRepositoryTest {
@Mock private Application application;
private ProcessPuzzleContext config;
private MeasurementContext measurementContext = null;
private MeasurementContext repository = null;
private Unit metre;
private Unit kilometre;
private Unit gramm;
private Unit dekagramm;
private Unit kilogramm;
private Unit ton;
private Unit second;
private Unit minute;
private Unit hour;
private Unit day;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks( UnitRepositoryTest.class );
config = ApplicationContextFactory.create( application, DomainTierTestConfiguration.CONFIGURATION_PROPERTY_FILE );
config.setUp( Application.Action.start );
measurementContext = config.getMeasurementContext();
metre = measurementContext.findUnitBySymbol( Units.METRE );
kilometre = measurementContext.findUnitBySymbol( Units.KILOMETRE );
gramm = measurementContext.findUnitBySymbol( Units.GRAMM );
dekagramm = measurementContext.findUnitBySymbol( Units.DEKAGRAMM );
kilogramm = measurementContext.findUnitBySymbol( Units.KILOGRAMM );
ton = measurementContext.findUnitBySymbol( Units.TON );
second = measurementContext.findUnitBySymbol( Units.SECOND );
minute = measurementContext.findUnitBySymbol( Units.MINUTE );
hour = measurementContext.findUnitBySymbol( Units.HOUR );
day = measurementContext.findUnitBySymbol( Units.DAY );
}
@After
public void tearDown() throws Exception {}
@Ignore
@Test
public final void testUnitRepository_ForSymbol() {
assertTrue( "We can find a given unit by symbol: ", measurementContext.findUnitBySymbol( "m" ) instanceof Unit );
// assertTrue("Unit's symbol also uniquely identifies a unit: ", repository.findByIdentityExpression("m") instanceof Unit);
assertTrue( "We can find a given currency by symbol: ", repository.findUnitBySymbol( "EUR" ) instanceof Currency );
}
@Ignore
@Test
public final void testPredefinedConversationRatio() {
// Conversation ratios are expexted to setUp by UnitRepository
assertThat( 0.001d, equalTo( metre.findConversionRatio( kilometre )));
assertThat( 0.1d, equalTo( gramm.findConversionRatio( dekagramm )));
assertThat( 0.001d, equalTo( gramm.findConversionRatio( kilogramm )));
assertThat( 0.000001d, equalTo( gramm.findConversionRatio( ton )));
assertThat( 0.01d, equalTo( dekagramm.findConversionRatio( kilogramm )));
assertThat( 0.00001d, equalTo( dekagramm.findConversionRatio( ton )));
assertThat( 0.001d, equalTo( kilogramm.findConversionRatio( ton )));
assertThat( 0.016666666666666666d, equalTo( second.findConversionRatio( minute )));
assertThat( 2.7777777777777777777777777777778e-4d, equalTo( second.findConversionRatio( hour )));
assertThat( 1.1574074074074074074074074074074e-5d, equalTo( second.findConversionRatio( day )));
assertThat( 0.016666666666666666666666666666667d, equalTo( minute.findConversionRatio( hour )));
assertThat( 6.9444444444444444444444444444444e-4d, equalTo( minute.findConversionRatio( day )));
assertThat( 0.041666666666666666666666666666667d, equalTo( hour.findConversionRatio( day )));
}
}