فهرست منبع

Add integration test for StepPanel.
Fix a few bugs in tests and remove redundant notify().

Sam Jaffe 5 سال پیش
والد
کامیت
5b66c6a92a

+ 1 - 2
src/main/lombok/org/leumasjaffe/recipe/view/StepPanel.java

@@ -29,7 +29,7 @@ import java.awt.Dimension;
 public class StepPanel extends JPanel implements AutoGrowPanel.DocumentListenable {
 public class StepPanel extends JPanel implements AutoGrowPanel.DocumentListenable {
 	@Getter(AccessLevel.PACKAGE) JLabel lblIndex;
 	@Getter(AccessLevel.PACKAGE) JLabel lblIndex;
 	@Getter(AccessLevel.PACKAGE) JTextPane txtpnInstructions;
 	@Getter(AccessLevel.PACKAGE) JTextPane txtpnInstructions;
-	@Getter(AccessLevel.PACKAGE) JPanel panelIngredients;
+	@Getter(AccessLevel.PACKAGE) AutoGrowPanel panelIngredients;
 	ForwardingObservableListener<Step> listener = new ForwardingObservableListener<>();
 	ForwardingObservableListener<Step> listener = new ForwardingObservableListener<>();
 		
 		
 	public StepPanel(int zeroIndex, Step step) {
 	public StepPanel(int zeroIndex, Step step) {
@@ -81,7 +81,6 @@ public class StepPanel extends JPanel implements AutoGrowPanel.DocumentListenabl
 				Ingredient::new, ing -> {
 				Ingredient::new, ing -> {
 					ingredients.add(ing);
 					ingredients.add(ing);
 					listener.setObserved(step, ingredients);
 					listener.setObserved(step, ingredients);
-					ObserverDispatch.notifySubscribers(step);
 				}, i -> {
 				}, i -> {
 					ingredients.remove(i);
 					ingredients.remove(i);
 					listener.setObserved(step, ingredients);
 					listener.setObserved(step, ingredients);

+ 0 - 11
src/test/java/org/leumasjaffe/recipe/TestSuite.java

@@ -1,11 +0,0 @@
-package org.leumasjaffe.recipe;
-
-import org.junit.platform.runner.JUnitPlatform;
-import org.junit.platform.suite.api.SelectPackages;
-import org.junit.runner.RunWith;
-
-@RunWith(JUnitPlatform.class)
-@SelectPackages("org.leumasjaffe.recipe")
-public class TestSuite {
-
-}

+ 92 - 0
src/test/java/org/leumasjaffe/recipe/view/StepPanelIT.java

@@ -0,0 +1,92 @@
+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.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.Spy;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+@ExtendWith(MockitoExtension.class)
+@RunWith(JUnitPlatform.class)
+class StepPanelIT extends SwingTestCase {
+	@Spy MockObserverListener listener;
+	List<Ingredient> ingredients;
+	@Spy 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);
+		listener.setObserved(stuff);
+		// setObserved invokes our callback.
+		clearInvocations(listener);
+	}
+
+	@Test
+	void testRecievesSignalWhenNewElementAdded() {
+		final IngredientPanel newIngredient =
+				(IngredientPanel) panel.getPanelIngredients().getComponent(1);
+		
+		newIngredient.getTxtName().setText("Bacon");
+		waitForSwing();
+		
+		verify(listener, times(1)).updateWasSignalled();
+	}
+
+	@Test
+	void testNewItemCanProduceUpdate() {
+		final IngredientPanel newIngredient =
+				(IngredientPanel) panel.getPanelIngredients().getComponent(1);
+		newIngredient.getTxtName().setText("Bacon");
+		waitForSwing();
+
+		ObserverDispatch.notifySubscribers(ingredients.get(1));
+		
+		verify(listener, times(2)).updateWasSignalled();
+	}
+
+	@Test
+	void testReceivesSignalWhenElementRemoved() {
+		final IngredientPanel oldIngredient =
+				(IngredientPanel) panel.getPanelIngredients().getComponent(0);
+		oldIngredient.getTxtName().setText("");
+		waitForSwing();
+
+		verify(listener, times(1)).updateWasSignalled();
+	}
+
+	@Test
+	void testIgnoresOldItemUpdates() {
+		final Ingredient ing = ingredients.get(0);
+		final IngredientPanel oldIngredient =
+				(IngredientPanel) panel.getPanelIngredients().getComponent(0);
+		oldIngredient.getTxtName().setText("");
+
+		waitForSwing();
+		clearInvocations(listener);
+
+		ObserverDispatch.notifySubscribers(ing);
+		verify(listener, never()).updateWasSignalled();
+	}
+
+}

+ 18 - 9
src/test/java/org/leumasjaffe/recipe/view/StepPanelTest.java

@@ -6,7 +6,9 @@ import static org.hamcrest.collection.IsArrayWithSize.arrayWithSize;
 import static org.hamcrest.number.OrderingComparison.greaterThanOrEqualTo;
 import static org.hamcrest.number.OrderingComparison.greaterThanOrEqualTo;
 import static org.mockito.Mockito.*;
 import static org.mockito.Mockito.*;
 
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
+import java.util.List;
 
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
@@ -14,34 +16,30 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.platform.runner.JUnitPlatform;
 import org.junit.platform.runner.JUnitPlatform;
 import org.junit.runner.RunWith;
 import org.junit.runner.RunWith;
 import org.leumasjaffe.mock.MockObserverListener;
 import org.leumasjaffe.mock.MockObserverListener;
+import org.leumasjaffe.observer.ObserverDispatch;
 import org.leumasjaffe.recipe.model.Amount;
 import org.leumasjaffe.recipe.model.Amount;
 import org.leumasjaffe.recipe.model.Duration;
 import org.leumasjaffe.recipe.model.Duration;
 import org.leumasjaffe.recipe.model.Ingredient;
 import org.leumasjaffe.recipe.model.Ingredient;
 import org.leumasjaffe.recipe.model.Step;
 import org.leumasjaffe.recipe.model.Step;
 import org.mockito.Mock;
 import org.mockito.Mock;
-import org.mockito.Spy;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.junit.jupiter.MockitoExtension;
 
 
 @ExtendWith(MockitoExtension.class)
 @ExtendWith(MockitoExtension.class)
 @RunWith(JUnitPlatform.class)
 @RunWith(JUnitPlatform.class)
 class StepPanelTest extends SwingTestCase {
 class StepPanelTest extends SwingTestCase {
-	@Spy MockObserverListener listener;
-	Duration dur;
+	List<Ingredient> ingredients;
 	@Mock Step stuff;
 	@Mock Step stuff;
 	StepPanel panel;
 	StepPanel panel;
 
 
 	@BeforeEach
 	@BeforeEach
 	void setUp() {
 	void setUp() {
-		dur = new Duration(Duration.Display.SECONDS, 0, 30);
+		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(dur).when(stuff).getDuration();
 		doReturn("These are test instructions").when(stuff).getInstruction();
 		doReturn("These are test instructions").when(stuff).getInstruction();
-		doReturn(Arrays.asList(new Ingredient("Onion", "Sliced", new Amount("100 g"))))
-			.when(stuff).getIngredients();
+		doReturn(ingredients).when(stuff).getIngredients();
 		
 		
 		panel = new StepPanel(0, stuff);
 		panel = new StepPanel(0, stuff);
-		listener.setObserved(stuff);
-		// setObserved invokes our callback.
-		clearInvocations(listener);
 	}
 	}
 
 
 	@Test
 	@Test
@@ -52,4 +50,15 @@ class StepPanelTest extends SwingTestCase {
 				arrayWithSize(greaterThanOrEqualTo(1)));
 				arrayWithSize(greaterThanOrEqualTo(1)));
 	}
 	}
 
 
+	@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();
+	}
 }
 }

+ 2 - 2
src/test/java/org/leumasjaffe/recipe/view/summary/ElementPanelTest.java

@@ -17,14 +17,14 @@ import org.leumasjaffe.recipe.model.Amount;
 import org.leumasjaffe.recipe.model.Ingredient;
 import org.leumasjaffe.recipe.model.Ingredient;
 import org.leumasjaffe.recipe.view.SwingTestCase;
 import org.leumasjaffe.recipe.view.SwingTestCase;
 import org.leumasjaffe.recipe.model.Element;
 import org.leumasjaffe.recipe.model.Element;
-import org.mockito.Mock;
+import org.mockito.Spy;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.junit.jupiter.MockitoExtension;
 
 
 @ExtendWith(MockitoExtension.class)
 @ExtendWith(MockitoExtension.class)
 @RunWith(JUnitPlatform.class)
 @RunWith(JUnitPlatform.class)
 class ElementPanelTest extends SwingTestCase {
 class ElementPanelTest extends SwingTestCase {
 	
 	
-	@Mock Element stuff;
+	@Spy Element stuff;
 	ElementPanel panel;
 	ElementPanel panel;
 	
 	
 	@BeforeEach
 	@BeforeEach