|
|
@@ -0,0 +1,86 @@
|
|
|
+package org.leumasjaffe.recipe.view;
|
|
|
+
|
|
|
+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.leumasjaffe.mock.MockObserverListener;
|
|
|
+import org.leumasjaffe.observer.ObserverDispatch;
|
|
|
+import org.leumasjaffe.recipe.model.Phase;
|
|
|
+import org.leumasjaffe.recipe.model.Step;
|
|
|
+import org.mockito.Spy;
|
|
|
+import org.mockito.junit.jupiter.MockitoExtension;
|
|
|
+
|
|
|
+@ExtendWith(MockitoExtension.class)
|
|
|
+class PhasePanelIT extends SwingTestCase {
|
|
|
+ @Spy MockObserverListener listener;
|
|
|
+ List<Step> steps;
|
|
|
+ @Spy Phase stuff;
|
|
|
+ PhasePanel panel;
|
|
|
+
|
|
|
+ @BeforeEach
|
|
|
+ void setUp() {
|
|
|
+ Step step = new Step();
|
|
|
+ step.setInstruction("Dance");
|
|
|
+ steps = new ArrayList<>(Arrays.asList(step));
|
|
|
+ doReturn(steps).when(stuff).getCooking();
|
|
|
+
|
|
|
+ panel = new PhasePanel(stuff);
|
|
|
+ listener.setObserved(stuff);
|
|
|
+ // setObserved invokes our callback.
|
|
|
+ clearInvocations(listener);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testRecievesSignalWhenNewElementAdded() {
|
|
|
+ final StepPanel newIngredient =
|
|
|
+ (StepPanel) panel.getPanelSteps().getComponent(1);
|
|
|
+
|
|
|
+ newIngredient.getTxtpnInstructions().setText("Bacon");
|
|
|
+ waitForSwing();
|
|
|
+
|
|
|
+ verify(listener, times(1)).updateWasSignalled();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testNewItemCanProduceUpdate() {
|
|
|
+ final StepPanel newIngredient =
|
|
|
+ (StepPanel) panel.getPanelSteps().getComponent(1);
|
|
|
+ newIngredient.getTxtpnInstructions().setText("Bacon");
|
|
|
+ waitForSwing();
|
|
|
+
|
|
|
+ ObserverDispatch.notifySubscribers(steps.get(1));
|
|
|
+
|
|
|
+ verify(listener, times(2)).updateWasSignalled();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testReceivesSignalWhenElementRemoved() {
|
|
|
+ final StepPanel oldIngredient =
|
|
|
+ (StepPanel) panel.getPanelSteps().getComponent(0);
|
|
|
+ oldIngredient.getTxtpnInstructions().setText("");
|
|
|
+ waitForSwing();
|
|
|
+
|
|
|
+ verify(listener, times(1)).updateWasSignalled();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testIgnoresOldItemUpdates() {
|
|
|
+ final Step st = steps.get(0);
|
|
|
+ final StepPanel oldIngredient =
|
|
|
+ (StepPanel) panel.getPanelSteps().getComponent(0);
|
|
|
+ oldIngredient.getTxtpnInstructions().setText("");
|
|
|
+
|
|
|
+ waitForSwing();
|
|
|
+ clearInvocations(listener);
|
|
|
+
|
|
|
+ ObserverDispatch.notifySubscribers(st);
|
|
|
+ verify(listener, never()).updateWasSignalled();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|