package jhaushalt.service.factories; import static org.fest.assertions.Assertions.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; import java.util.List; import jhaushalt.domain.Register; import jhaushalt.domain.buchung.Buchung; import jhaushalt.domain.buchung.SplitBuchung; import jhaushalt.service.factories.io.DataInputFacade; import jhaushalt.service.factories.io.DataOutputFacade; import org.junit.Before; import org.junit.Test; public class RegisterFactoryUnitTest { private static final String ANY_REGISTER_NAME = "Foo Register"; private RegisterFactory registerFactory; private BuchungFactory bookingFactory; @Before public void setup() { bookingFactory = mock(BuchungFactory.class); registerFactory = new RegisterFactory(); registerFactory.setBookingFactory(bookingFactory); } @Test public void getInstanceGetsNameAndBookingList() throws IOException, UnknownBuchungTypeException, ParseException { DataInputFacade inputFacade = mock(DataInputFacade.class); when(inputFacade.getInt()).thenReturn(1); List<Buchung> bookingList = createBookingList(); when(bookingFactory.getInstance(inputFacade)).thenReturn(bookingList.get(0)); Register actualRegister = registerFactory.getInstance(inputFacade, ANY_REGISTER_NAME); assertThat(actualRegister.getName()).isEqualTo(ANY_REGISTER_NAME); assertThat(actualRegister.getAnzahlBuchungen()).isEqualTo(1); assertThat(actualRegister.getBookings()).isEqualTo(bookingList); verify(bookingFactory).getInstance(inputFacade); } @Test public void saveRegister() throws IOException { Register register = new Register("fooName"); List<Buchung> bookingList = createBookingList(); register.insertBookingList(bookingList); DataOutputFacade dataOutputFacade = mock(DataOutputFacade.class); registerFactory.saveData(dataOutputFacade, register); verify(dataOutputFacade).writeInt(1); verify(bookingFactory).saveData(eq(dataOutputFacade), any(Buchung.class)); } private List<Buchung> createBookingList() { List<Buchung> bookingList = new ArrayList<Buchung>(); bookingList.add(new SplitBuchung()); return bookingList; } }