package org.leumasjaffe.recipe.view; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; 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.Ingredient; import org.mockito.Spy; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) @RunWith(JUnitPlatform.class) class IngredientPanelTest extends SwingTestCase { @Spy MockObserverListener listener; Ingredient stuff; IngredientPanel panel; @BeforeEach void setUp() { stuff = new Ingredient("Onions", "Sliced", new Amount("100 g")); panel = new IngredientPanel(stuff); listener.setObserved(stuff); // setObserved invokes our callback. clearInvocations(listener); } @Test void testFilledOutWithContent() { assertEquals("Onions", panel.getTxtName().getText()); assertEquals("Sliced", panel.getTxtPreparation().getText()); assertEquals("100", panel.getTxtAmount().getText()); assertEquals("g", panel.getTxtUnit().getText()); } @Test void testContentIsEditable() { assertTrue(panel.getTxtName().isEditable()); assertTrue(panel.getTxtPreparation().isEditable()); assertTrue(panel.getTxtAmount().isEditable()); assertTrue(panel.getTxtUnit().isEditable()); } @Test void testIsSubscribedToUpdates() { stuff.setName("Bacon"); stuff.setPreparation("Cut into Lardons"); stuff.setAmount(new Amount("0.25 lb")); assertEquals("Onions", panel.getTxtName().getText()); ObserverDispatch.notifySubscribers(stuff); assertEquals("Bacon", panel.getTxtName().getText()); assertEquals(100.0, panel.getTxtAmount().getValue()); assertEquals("g", panel.getTxtUnit().getText()); assertEquals("Cut into Lardons", panel.getTxtPreparation().getText()); } @Test void testViewUpdateToNameAltersModel() { panel.getTxtName().setText("Bacon"); waitForSwing(); assertEquals("Bacon", stuff.getName()); } @Test void testViewUpdateToPreparationAltersModel() { panel.getTxtPreparation().setText("Cut into Lardons"); waitForSwing(); assertEquals("Cut into Lardons", stuff.getPreparation()); } @Test void testViewUpdateToAmountDoesNotAltersModel() { panel.getTxtAmount().setValue(0.25); waitForSwing(); assertEquals(100.0, stuff.getAmount().getValue()); } @Test void testViewUpdateToUnitDoesNotAltersModel() { panel.getTxtUnit().setText("lb"); waitForSwing(); assertEquals("g", stuff.getAmount().unitName()); } @Test void testUpdateToNameSendsNotify() { panel.getTxtName().setText("Bacon"); waitForSwing(); verify(listener).updateWasSignalled(); } @Test void testUpdateToPreparationSendsNotify() { panel.getTxtPreparation().setText("Cut into Lardons"); waitForSwing(); verify(listener).updateWasSignalled(); } @Test void testUpdateToAmountSendsNotify() { panel.getTxtAmount().setValue(0.25); waitForSwing(); verify(listener, never()).updateWasSignalled(); } @Test void testUpdateToUnitSendsNotify() { panel.getTxtUnit().setText("lb"); waitForSwing(); verify(listener, never()).updateWasSignalled(); } }