Procházet zdrojové kódy

Test RecipeCardPanel.

Sam Jaffe před 5 roky
rodič
revize
a8fdb250f8

+ 1 - 1
src/main/lombok/org/leumasjaffe/recipe/model/RecipeCard.java

@@ -23,7 +23,7 @@ public class RecipeCard extends Observable.Instance implements CompoundRecipeCom
 	
 	@Override
 	public Stream<Element> getComponents() {
-		return elements.stream();
+		return getElements().stream();
 	}
 	
 	@Override

+ 20 - 9
src/main/lombok/org/leumasjaffe/recipe/view/RecipeCardPanel.java

@@ -24,11 +24,14 @@ public class RecipeCardPanel extends JSplitPane {
 	ObservableListener<RecipeCardPanel, RecipeCard> updateUI;
 	ForwardingObservableListener<RecipeCard> listener;
 	
-	public RecipeCardPanel(final RecipeCard card) {
+	SummaryPanel summaryPanel;
+	JPanel rightPanel;
+	
+	public RecipeCardPanel() {
 		setPreferredSize(new Dimension(1050, 600));
 
-		final SummaryPanel summaryPanel = new SummaryPanel(card);
-		final JPanel rightPanel = new JPanel();
+		summaryPanel = new SummaryPanel();
+		rightPanel = new JPanel();
 		rightPanel.setLayout(new VerticalLayout(5));
 
 		final JScrollPane scrollPane = new JScrollPane(rightPanel);
@@ -36,14 +39,22 @@ public class RecipeCardPanel extends JSplitPane {
 		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
 		setRightComponent(scrollPane);
 		setLeftComponent(summaryPanel);
-		
-		card.getComponents().map(ElementPanel::new).forEach(rightPanel::add);
-				
+						
 		listener = new ForwardingObservableListener<>();
-		listener.setObserved(card, card.getElements().toArray(new Element[0]));
-		
 		updateUI = new ObservableListener<>(this, (c, t) -> validate());
-		updateUI.setObserved(card);
+	}
+	
+	public RecipeCardPanel(final RecipeCard card) {
+		this();
+		setModel(card);
+	}
+	
+	public void setModel(final RecipeCard card) {
+		summaryPanel.setModel(card);
+		card.getComponents().map(ElementPanel::new).forEach(rightPanel::add);
+
+		listener.setObserved(card, card.getElements());
+		updateUI.setObserved(card);		
 	}
 
 }

+ 16 - 6
src/main/lombok/org/leumasjaffe/recipe/view/summary/SummaryPanel.java

@@ -30,7 +30,10 @@ public class SummaryPanel extends JPanel {
 	ObservableListener<CollatedDurationPanel, RecipeCard> durationListener;
 	ObservableListener<JPanel, RecipeCard> childListener;
 	
-	public SummaryPanel(final RecipeCard card) {
+	JTextField txtTitle;
+	JTextArea txaDesription;
+	
+	public SummaryPanel() {
 		controller = new ReplaceChildrenController<>(RecipeCard::getElements, element -> {
 			JPanel wrapper = new JPanel(new VerticalLayout());
 			wrapper.add(new ElementPanel(element));
@@ -60,8 +63,7 @@ public class SummaryPanel extends JPanel {
 		gbl_panelHeader.rowWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
 		panelHeader.setLayout(gbl_panelHeader);
 		
-		JTextField txtTitle = new JTextField();
-		txtTitle.setText(card.getTitle());
+		txtTitle = new JTextField();
 		GridBagConstraints gbc_txtTitle = new GridBagConstraints();
 		gbc_txtTitle.insets = new Insets(0, 0, 0, 5);
 		gbc_txtTitle.fill = GridBagConstraints.HORIZONTAL;
@@ -107,11 +109,10 @@ public class SummaryPanel extends JPanel {
 		gbc_panelPhoto.gridy = 0;
 		panel.add(panelPhoto, gbc_panelPhoto);
 		
-		JTextArea txaDesription = new JTextArea(5, 20);
+		txaDesription = new JTextArea(5, 20);
 		txaDesription.setFont(new Font("Verdana", Font.PLAIN, 10));
 		txaDesription.setWrapStyleWord(true);
 		txaDesription.setLineWrap(true);
-		txaDesription.setText(card.getDescription());
 		GridBagConstraints gbc_txaDesription = new GridBagConstraints();
 		gbc_txaDesription.insets = new Insets(0, 0, 5, 0);
 		gbc_txaDesription.fill = GridBagConstraints.BOTH;
@@ -125,7 +126,16 @@ public class SummaryPanel extends JPanel {
 		// This indirection allows for testing of controller
 		childListener = new ObservableListener<>(panelIngredients,
 				(c, v) -> controller.accept(c, v));
-		
+	}
+	
+	public SummaryPanel(final RecipeCard card) {
+		this();
+		setModel(card);
+	}
+	
+	public void setModel(final RecipeCard card) {
+		txtTitle.setText(card.getTitle());
+		txaDesription.setText(card.getDescription());
 		durationListener.setObserved(card);
 		childListener.setObserved(card);
 	}

+ 0 - 3
src/test/java/org/leumasjaffe/recipe/view/PreparationPanelTest.java

@@ -5,8 +5,6 @@ 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.observer.ObserverDispatch;
 import org.leumasjaffe.recipe.controller.ReplaceChildrenController;
 import org.leumasjaffe.recipe.model.Duration;
@@ -17,7 +15,6 @@ import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
 @ExtendWith(MockitoExtension.class)
-@RunWith(JUnitPlatform.class)
 class PreparationPanelTest extends SwingTestCase {
 	
 	@Mock DurationPanel panelDuration;

+ 67 - 0
src/test/java/org/leumasjaffe/recipe/view/RecipeCardPanelTest.java

@@ -0,0 +1,67 @@
+package org.leumasjaffe.recipe.view;
+
+import static org.mockito.Mockito.*;
+
+import java.awt.Component;
+import java.util.Arrays;
+
+import javax.swing.JPanel;
+
+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.leumasjaffe.recipe.view.summary.SummaryPanel;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+@ExtendWith(MockitoExtension.class)
+class RecipeCardPanelTest {
+	
+	@Spy MockObserverListener listener;
+	
+	@Mock SummaryPanel summaryPanel;
+	@Mock JPanel rightPanel;
+	@Spy RecipeCard card;
+	@InjectMocks RecipeCardPanel panel = new RecipeCardPanel();
+	
+	@BeforeEach
+	void setUp() {
+		listener.setObserved(card);
+		clearInvocations(listener);
+	}
+
+	@Test
+	void testModelIsPropogated() {
+		panel.setModel(card);
+		verify(summaryPanel).setModel(same(card));
+		verify(rightPanel, never()).add(any(Component.class));
+	}
+
+	@Test
+	void testModelWithChildrenAddsElements() {
+		final Element element = new Element();
+		doReturn(Arrays.asList(element)).when(card).getElements();
+
+		panel.setModel(card);
+		verify(rightPanel, times(1)).add(any(Component.class));
+	}
+
+	@Test
+	void testToChildElementsIsPropogated() {
+		final Element element = new Element();
+		doReturn(Arrays.asList(element)).when(card).getElements();
+
+		panel.setModel(card);
+		verify(listener).updateWasSignalled();
+		
+		ObserverDispatch.notifySubscribers(element);
+		verify(listener, times(2)).updateWasSignalled();
+	}
+
+}