package net.sourceforge.cruisecontrol.publishers;
import static junit.framework.Assert.fail;
import static junit.framework.Assert.assertEquals;
import net.sourceforge.cruisecontrol.CruiseControlException;
import net.sourceforge.cruisecontrol.testutil.TestUtil;
import org.junit.Test;
import org.jdom.Element;
public class TwitterPublisherTest {
@Test
public void validateShouldNotThrowExceptionWhenUsernameAndPasswordAreSet() throws CruiseControlException {
TwitterPublisher twitter = new TwitterPublisher();
twitter.setUsername("username");
twitter.setPassword("password");
twitter.validate();
}
@Test
public void validateExceptionShouldIndicateMissingUsername() {
TwitterPublisher twitter = new TwitterPublisher();
twitter.setPassword("arbitrary");
String expected = "'username' is required for TwitterPublisher";
assertValidateFails(twitter, expected);
}
private void assertValidateFails(TwitterPublisher twitter, String expected) {
try {
twitter.validate();
fail();
} catch (CruiseControlException e) {
assertEquals(expected, e.getMessage());
}
}
@Test
public void validateExceptionShouldIndicateMissingPassword() {
TwitterPublisher twitter = new TwitterPublisher();
twitter.setUsername("arbitrary");
assertValidateFails(twitter, "'password' is required for TwitterPublisher");
}
@Test
public void messageShouldBeBuildFailure() throws CruiseControlException {
TestTwitterProxy proxy = new TestTwitterProxy();
TwitterPublisher twitter = new TwitterPublisher(proxy);
Element failed = TestUtil.createFailedBuild();
twitter.publish(failed);
assertEquals("someproject failed", proxy.status);
}
@Test
public void messageShouldBePassedWhenBuildPasses() throws CruiseControlException {
TestTwitterProxy proxy = new TestTwitterProxy();
TwitterPublisher twitter = new TwitterPublisher(proxy);
Element passed = TestUtil.createPassingBuild();
twitter.publish(passed);
assertEquals("someproject successful", proxy.status);
}
@Test
public void messageShouldBeFixedWhenBuildIsFixed() throws CruiseControlException {
TestTwitterProxy proxy = new TestTwitterProxy();
TwitterPublisher twitter = new TwitterPublisher(proxy);
Element fixed = TestUtil.createFixedBuild();
twitter.publish(fixed);
assertEquals("someproject fixed", proxy.status);
}
@Test
public void messageShouldIncludeProjectName() throws CruiseControlException {
TestTwitterProxy proxy = new TestTwitterProxy();
TwitterPublisher twitter = new TwitterPublisher(proxy);
Element passed = TestUtil.createPassingBuild();
String projectName = "myProject" + System.currentTimeMillis();
setProjectName(passed, projectName);
twitter.publish(passed);
assertEquals(projectName + " successful", proxy.status);
}
private void setProjectName(Element passed, String s) {
passed.removeChild("info");
Element info = new Element("info");
TestUtil.addProperty(info, "projectname", s);
TestUtil.addProperty(info, "lastbuildsuccessful", "true");
passed.addContent(info);
}
@Test
public void usernameShouldBeSetOnProxy() throws CruiseControlException {
TestTwitterProxy proxy = new TestTwitterProxy();
TwitterPublisher twitter = new TwitterPublisher(proxy);
twitter.setUsername("user");
Element log = TestUtil.createPassingBuild();
twitter.publish(log);
assertEquals("user", proxy.username);
}
@Test
public void passwordShouldBeSetOnProxy() throws CruiseControlException {
TestTwitterProxy proxy = new TestTwitterProxy();
TwitterPublisher twitter = new TwitterPublisher(proxy);
twitter.setPassword("pass");
Element log = TestUtil.createPassingBuild();
twitter.publish(log);
assertEquals("pass", proxy.password);
}
private class TestTwitterProxy implements TwitterProxy {
public String status;
public String username;
public String password;
public void twitter(String message, String username, String password) {
status = message;
this.username = username;
this.password = password;
}
}
}