package org.leumasjaffe.recipe.view; import static org.junit.jupiter.api.Assertions.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsArrayWithSize.arrayWithSize; import static org.hamcrest.number.OrderingComparison.greaterThanOrEqualTo; import static org.mockito.Mockito.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.platform.runner.JUnitPlatform; import org.junit.runner.RunWith; import org.leumasjaffe.mock.MockObserverListener; import org.leumasjaffe.observer.ObserverDispatch; import org.leumasjaffe.recipe.model.Amount; import org.leumasjaffe.recipe.model.Duration; import org.leumasjaffe.recipe.model.Ingredient; import org.leumasjaffe.recipe.model.Step; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) @RunWith(JUnitPlatform.class) class StepPanelTest extends SwingTestCase { List ingredients; @Mock Step stuff; StepPanel panel; @BeforeEach void setUp() { Duration dur = new Duration(Duration.Display.SECONDS, 0, 30); ingredients = new ArrayList<>(Arrays.asList(new Ingredient("Onion", "Sliced", new Amount("100 g")))); doReturn(dur).when(stuff).getDuration(); doReturn("These are test instructions").when(stuff).getInstruction(); doReturn(ingredients).when(stuff).getIngredients(); panel = new StepPanel(0, stuff); } @Test void testFilledOutWithContent() { assertEquals("Step 1", panel.getLblIndex().getText()); assertEquals("These are test instructions", panel.getTxtpnInstructions().getText()); assertThat(panel.getPanelIngredients().getComponents(), arrayWithSize(greaterThanOrEqualTo(1))); } // TODO: Write tests for modifying the txtpnInstructions @Test void testPropogatesNotifications() { final MockObserverListener listener = spy(MockObserverListener.class); listener.setObserved(stuff); // setObserved invokes our callback. clearInvocations(listener); ObserverDispatch.notifySubscribers(ingredients.get(0)); verify(listener, atLeast(1)).updateWasSignalled(); } }