package edu.ucsd.cse70.ircclient;

import org.concordion.integration.junit3.ConcordionTestCase;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Before;

public class AcceptanceTest extends ConcordionTestCase {
	private Mockery context = new Mockery() {{
		setImposteriser(ClassImposteriser.INSTANCE);
	}};
	private IRCConnection mockConnection = context.mock(IRCConnection.class);
	private IRCClientWindow mockWindow = context.mock(IRCClientWindow.class);
	private final IRCClient client = new IRCClient();

	private IRCMessage ircMessage;
	
	@Before
	public void setUp() {
		client.setWindow(mockWindow);
		client.setConnection(mockConnection);
	}

	public String expectConnectionNotifyOnEval(final String userInput, final String expected) {
		context.checking(new Expectations() {{
			allowing (mockConnection).isConnected();
			ircMessage = new IRCMessage(expected);
			one (mockConnection).notify(ircMessage);
			allowing (mockWindow).appendLine(userInput);
		}});
		client.eval(userInput);
		return ircMessage.toString();
	}

	public boolean expectNonNullStringOnNotify(String serverReply) {
		context.checking(new Expectations() {{
			allowing (mockConnection).getNick();
			one (mockWindow).appendLine(with(aNonNull(String.class)));
		}});
		client.notify(new IRCMessage(serverReply));
		return true;
	}
}
