package com.tddinaction.swing.mvp.sc;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.tddinaction.swing.mvp.common.Colors;
import com.tddinaction.swing.mvp.common.GreenBarModel;
import com.tddinaction.swing.mvp.common.GreenBarModelStub;
public class TestGreenBarController {
private GreenBarObservingViewStub view;
private GreenBarModelStub model;
@Before
public void setUp() {
view = new GreenBarObservingViewStub();
model = new GreenBarModelStub();
new GreenBarController(view, model);
}
@Test
public void shouldPopulateViewWithDefaultValues()
throws Exception {
assertEquals(Colors.getDefault(), view.getBarColor());
}
@Test
public void shouldRegisterForUserGestures() throws Exception {
assertNotNull(view.registeredRunButtonListener);
}
@Test
public void userGestureTriggersChangeInModelAndViewShouldReflect()
throws Exception {
model.testsWillPassOnNextTestRun = true;
view.registeredRunButtonListener.onRunButtonClick();
assertEquals(Colors.testsPassed(), view.barColor);
model.testsWillPassOnNextTestRun = false;
view.registeredRunButtonListener.onRunButtonClick();
assertEquals(Colors.testsFailed(), view.barColor);
}
@Test
public void userGestureShouldTriggerChangeInModel()
throws Exception {
final List<String> testsWereRun = new ArrayList<String>();
final List<GreenBarModel> updatesReceivedByView = new ArrayList<GreenBarModel>();
model = new GreenBarModelStub() {
@Override
public void runTests() {
testsWereRun.add("tests were run...");
}
};
view = new GreenBarObservingViewStub() {
@Override
public void update(GreenBarModel model) {
updatesReceivedByView.add(model);
}
};
new GreenBarController(view, model);
view.registeredRunButtonListener.onRunButtonClick();
assertTrue(testsWereRun.contains("tests were run..."));
assertTrue(updatesReceivedByView.contains(model));
}
}