package de.edu.hsfulda.ccip.tdd.withdependencies; import static org.junit.Assert.assertThat; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.hamcrest.CoreMatchers; import org.junit.Ignore; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; class GameOfLifeCellTest { private GameOfLifeStatus status = Mockito.mock(GameOfLifeStatus.class, "initial state"); private GameOfLifeCell gameOfLifeCell; private List neighbors; private GameOfLifeCell neigborCell = Mockito.mock(GameOfLifeCell.class); @BeforeEach void setUp() throws Exception { gameOfLifeCell = new GameOfLifeCell(status); neighbors = Arrays.asList(neigborCell, neigborCell, neigborCell, neigborCell, neigborCell, neigborCell, neigborCell, neigborCell); for (GameOfLifeCell neighbor : neighbors) { gameOfLifeCell.addNeighbor(neighbor); } } @Test void passesNeighborStatusToOwn() { gameOfLifeCell.caclulateNextState(); ArgumentCaptor> listOfNeghborStates = ArgumentCaptor.forClass(List.class); Mockito.verify(status).calculateNextBy(listOfNeghborStates.capture()); assertThat("all neighbor states", listOfNeghborStates.getValue().size(), CoreMatchers.equalTo(neighbors.size())); } @Test void doesNotChangeStateWhenCalculating() { GameOfLifeStatus newState = Mockito.mock(GameOfLifeStatus.class); Mockito.doReturn(newState).when(status).calculateNextBy(Mockito.anyList()); gameOfLifeCell.caclulateNextState(); GameOfLifeStatus currentState = gameOfLifeCell.getState(); Mockito.verify(status).calculateNextBy(Mockito.anyList()); assertThat("status not changed", currentState, CoreMatchers.equalTo(status)); } @Test void changesStateWhenRequested() { GameOfLifeStatus newState = Mockito.mock(GameOfLifeStatus.class, "new state"); Mockito.doReturn(newState).when(status).calculateNextBy(Mockito.anyList()); gameOfLifeCell.caclulateNextState(); gameOfLifeCell.updateState(); GameOfLifeStatus currentState = gameOfLifeCell.getState(); Mockito.verify(status).calculateNextBy(Mockito.anyList()); assertThat("status changed", currentState, CoreMatchers.equalTo(newState)); } }