Selaa lähdekoodia

Make some better tests.

Sam Jaffe 5 vuotta sitten
vanhempi
commit
d133d90bda

+ 19 - 13
src/main/lombok/org/leumasjaffe/recipe/view/RestPanel.java

@@ -7,7 +7,6 @@ import org.leumasjaffe.observer.ObservableListener;
 import org.leumasjaffe.recipe.model.Rest;
 
 import lombok.AccessLevel;
-import lombok.Getter;
 import lombok.experimental.FieldDefaults;
 
 import java.awt.GridBagLayout;
@@ -18,14 +17,13 @@ import java.awt.GridBagConstraints;
 import java.awt.Insets;
 
 @SuppressWarnings("serial")
-@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
+@FieldDefaults(level=AccessLevel.PRIVATE)
 public class RestPanel extends JPanel {
 	ObservableListener<JFormattedTextField, Rest> durationListener;
 
-	@Getter(AccessLevel.PACKAGE) JLabel lblLocation;
-	@Getter(AccessLevel.PACKAGE) DurationPanel lblDuration;
+	JLabel lblLocation;
 
-	public RestPanel(Rest rest) {
+	public RestPanel() {
 		GridBagLayout gridBagLayout = new GridBagLayout();
 		gridBagLayout.columnWidths = new int[]{0, 0, 0, 0};
 		gridBagLayout.rowHeights = new int[]{0, 0};
@@ -40,22 +38,30 @@ public class RestPanel extends JPanel {
 		gbc_lblRest.gridy = 0;
 		add(lblRest, gbc_lblRest);
 		
-		lblLocation = new JLabel(rest.getWhere().getHumanReadable());
+		lblLocation = new JLabel();
 		GridBagConstraints gbc_lblLocation = new GridBagConstraints();
 		gbc_lblLocation.insets = new Insets(0, 0, 0, 5);
 		gbc_lblLocation.gridx = 1;
 		gbc_lblLocation.gridy = 0;
 		add(lblLocation, gbc_lblLocation);
 		
-		lblDuration = new DurationPanel("");
-		GridBagConstraints gbc_lblDuration = new GridBagConstraints();
-		gbc_lblDuration.gridx = 2;
-		gbc_lblDuration.gridy = 0;
-		add(lblDuration, gbc_lblDuration);
+		DurationPanel panelDuration = new DurationPanel("");
+		GridBagConstraints gbc_panelDuration = new GridBagConstraints();
+		gbc_panelDuration.gridx = 2;
+		gbc_panelDuration.gridy = 0;
+		add(panelDuration, gbc_panelDuration);
 		
-		durationListener = ObservableController.from(lblDuration.txtTime,
+		durationListener = ObservableController.from(panelDuration.txtTime,
 				Rest::getDuration, Rest::setDuration);
-		
+	}
+
+	public RestPanel(final Rest rest) {
+		this();
+		setModel(rest);
+	}
+	
+	public void setModel(final Rest rest) {
+		lblLocation.setText(rest.getWhere().getHumanReadable());
 		durationListener.setObserved(rest);
 	}
 

+ 3 - 3
src/test/java/org/leumasjaffe/recipe/model/PhaseTest.java

@@ -12,7 +12,7 @@ import org.junit.jupiter.api.Test;
 
 class PhaseTest {
 	private static final Amount _1g = new Amount("1 g");
-	private static final Duration dur = new Duration(Duration.Display.SECONDS, 10, 20);
+	private static final Duration dur = new Duration("10 - 20 s");
 
 	@Test
 	void cannotAddNullPreparation() {
@@ -37,12 +37,12 @@ class PhaseTest {
 	}
 	
 	@Test
-	void testAddsPrepDurationIfPresent() {
+	void testDoesNotAddPrepDurationIfPresent() {
 		final Phase phase = new Phase();
 		final Preparation prep = new Preparation();
 		prep.setDuration(dur);
 		phase.setPreparation(prep);
-		assertNotEquals(Duration.ZERO, phase.getDuration());
+		assertEquals(Duration.ZERO, phase.getDuration());
 	}
 	
 	@Test

+ 7 - 9
src/test/java/org/leumasjaffe/recipe/view/PreparationPanelTest.java

@@ -2,12 +2,14 @@ package org.leumasjaffe.recipe.view;
 
 import static org.mockito.Mockito.*;
 
+import javax.swing.JFormattedTextField;
+
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.leumasjaffe.observer.ObservableListener;
 import org.leumasjaffe.observer.ObserverDispatch;
 import org.leumasjaffe.recipe.controller.ReplaceChildrenController;
-import org.leumasjaffe.recipe.model.Duration;
 import org.leumasjaffe.recipe.model.Ingredient;
 import org.leumasjaffe.recipe.model.Preparation;
 import org.mockito.InjectMocks;
@@ -17,30 +19,26 @@ import org.mockito.junit.jupiter.MockitoExtension;
 @ExtendWith(MockitoExtension.class)
 class PreparationPanelTest extends SwingTestCase {
 	
+	@Mock ObservableListener<JFormattedTextField, Preparation> durationListener;
 	@Mock ReplaceChildrenController<Preparation, Ingredient> controller;
-	Preparation stuff;
+	Preparation stuff = new Preparation();
 	@InjectMocks PreparationPanel panel = new PreparationPanel();
 	
 	@BeforeEach
 	void setUp() {
-		stuff = mock(Preparation.class);
-		Duration dur = new Duration(Duration.Display.SECONDS, 0, 30);
-		doReturn(dur).when(stuff).getDuration();
-		
 		panel.setModel(stuff);
 	}
 
 	@Test
 	void testHasContent() {
+		verify(durationListener, times(1)).setObserved(same(stuff));
 		verify(controller, times(1)).accept(any(), same(stuff));
 	}
 
 	@Test
 	void testUpdatesNumberOfChildrenWhenNotified() {
-		clearInvocations((Object) controller);
-		
 		ObserverDispatch.notifySubscribers(stuff);		
 
-		verify(controller, times(1)).accept(any(), same(stuff));
+		verify(controller, times(2)).accept(any(), same(stuff));
 	}
 }

+ 25 - 13
src/test/java/org/leumasjaffe/recipe/view/RestPanelTest.java

@@ -1,40 +1,52 @@
 package org.leumasjaffe.recipe.view;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.StringContains.containsString;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.*;
+
+import javax.swing.JFormattedTextField;
+import javax.swing.JLabel;
 
 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.ObservableListener;
 import org.leumasjaffe.recipe.model.Duration;
 import org.leumasjaffe.recipe.model.Rest;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
 import org.mockito.junit.jupiter.MockitoExtension;
 
 @ExtendWith(MockitoExtension.class)
 @RunWith(JUnitPlatform.class)
 class RestPanelTest extends SwingTestCase {
 	
-	Duration dur;
+	@Spy MockObserverListener listener;
+	
 	Rest stuff;
-	RestPanel panel;
+	
+	@Spy JLabel lblLocation;
+	@Mock ObservableListener<JFormattedTextField, Rest> durationListener;
+	@InjectMocks RestPanel panel = new RestPanel();
 	
 	@BeforeEach
 	void setUp() {
-		dur = new Duration(Duration.Display.SECONDS, 0, 30);
-		stuff = new Rest(Rest.Where.REFRIGERATOR, dur);
-		panel = new RestPanel(stuff);
+		stuff = new Rest(Rest.Where.REFRIGERATOR, new Duration(Duration.Display.SECONDS, 0, 30));
+		panel.setModel(stuff);
+		
+		listener.setObserved(stuff);
+		clearInvocations(listener);
 	}
 
 	@Test
 	void testHasContent() {
-		assertThat(panel.getLblDuration().txtTime.getText(),
-				containsString(dur.toString()));
-		assertEquals(stuff.getWhere().getHumanReadable(),
-				panel.getLblLocation().getText());
+		verify(lblLocation).setText(eq(stuff.getWhere().getHumanReadable()));
 	}
 
-	// TODO: Hook-ups for editing the preparation time
+	@Test
+	void testDurationIsListeningToModel() {
+		verify(durationListener).setObserved(same(stuff));
+	}
 }