|
|
@@ -0,0 +1,93 @@
|
|
|
+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.Element;
|
|
|
+import org.leumasjaffe.recipe.model.RecipeCard;
|
|
|
+import org.mockito.Spy;
|
|
|
+import org.mockito.junit.jupiter.MockitoExtension;
|
|
|
+
|
|
|
+@ExtendWith(MockitoExtension.class)
|
|
|
+class RecipeCardPanelIT extends SwingTestCase {
|
|
|
+ @Spy MockObserverListener listener;
|
|
|
+
|
|
|
+ List<Element> elements;
|
|
|
+ RecipeCard stuff;
|
|
|
+
|
|
|
+ RecipeCardPanel panel = new RecipeCardPanel();
|
|
|
+
|
|
|
+ @BeforeEach
|
|
|
+ void setUp() {
|
|
|
+ elements = new ArrayList<>(Arrays.asList(new Element()));
|
|
|
+ elements.get(0).setName("Stuff");
|
|
|
+ stuff = new RecipeCard();
|
|
|
+ stuff.setElements(elements);
|
|
|
+
|
|
|
+ panel.setModel(stuff);
|
|
|
+
|
|
|
+ listener.setObserved(stuff);
|
|
|
+ // setObserved invokes our callback.
|
|
|
+ clearInvocations(listener);
|
|
|
+ }
|
|
|
+
|
|
|
+ private AutoGrowPanel<ElementPanel, Element> getPanelIngredients() {
|
|
|
+ return panel.getPanelElements();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testRecievesSignalWhenNewElementAdded() {
|
|
|
+ final ElementPanel newElement =
|
|
|
+ (ElementPanel) getPanelIngredients().getComponent(1);
|
|
|
+
|
|
|
+ newElement.getTxtName().setText("Bacon");
|
|
|
+ waitForSwing();
|
|
|
+
|
|
|
+ verify(listener, times(1)).updateWasSignalled();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testNewItemCanProduceUpdate() {
|
|
|
+ final ElementPanel newElement =
|
|
|
+ (ElementPanel) getPanelIngredients().getComponent(1);
|
|
|
+ newElement.getTxtName().setText("Bacon");
|
|
|
+ waitForSwing();
|
|
|
+
|
|
|
+ ObserverDispatch.notifySubscribers(elements.get(1));
|
|
|
+
|
|
|
+ verify(listener, times(2)).updateWasSignalled();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testReceivesSignalWhenElementRemoved() {
|
|
|
+ final ElementPanel oldElement =
|
|
|
+ (ElementPanel) getPanelIngredients().getComponent(0);
|
|
|
+ oldElement.getTxtName().setText("");
|
|
|
+ waitForSwing();
|
|
|
+
|
|
|
+ verify(listener, times(1)).updateWasSignalled();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testIgnoresOldItemUpdates() {
|
|
|
+ final Element elem = elements.get(0);
|
|
|
+ final ElementPanel oldElement =
|
|
|
+ (ElementPanel) getPanelIngredients().getComponent(0);
|
|
|
+ oldElement.getTxtName().setText("");
|
|
|
+
|
|
|
+ waitForSwing();
|
|
|
+ clearInvocations(listener);
|
|
|
+
|
|
|
+ ObserverDispatch.notifySubscribers(elem);
|
|
|
+ verify(listener, never()).updateWasSignalled();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|