package hudson.plugins.im.bot;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import hudson.model.AbstractProject;
import hudson.model.BooleanParameterValue;
import hudson.model.Cause;
import hudson.model.FreeStyleProject;
import hudson.model.ParametersAction;
import hudson.model.StringParameterValue;
import hudson.plugins.im.Sender;
import junit.framework.Assert;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
public class BuildCommandTest {
@Test
@SuppressWarnings("unchecked")
public void testDelay() {
BuildCommand cmd = new BuildCommand("hudsonbot");
JobProvider jobProvider = mock(JobProvider.class);
cmd.setJobProvider(jobProvider);
AbstractProject project = mock(FreeStyleProject.class);
when(jobProvider.getJobByName(Mockito.anyString())).thenReturn(project);
Sender sender = new Sender("sender");
cmd.getReply(sender, new String[]{ "build", "project", "5s" });
verify(project).scheduleBuild(eq(5), (Cause) Mockito.any());
Mockito.reset(project);
cmd.getReply(sender, new String[]{ "build", "project", "5" });
verify(project).scheduleBuild(eq(5), (Cause) Mockito.any());
Mockito.reset(project);
cmd.getReply(sender, new String[]{ "build", "project", "1m" });
verify(project).scheduleBuild(eq(60), (Cause) Mockito.any());
Mockito.reset(project);
cmd.getReply(sender, new String[]{ "build", "project", "1min" });
verify(project).scheduleBuild(eq(60), (Cause) Mockito.any());
Mockito.reset(project);
cmd.getReply(sender, new String[]{ "build", "project", "2h" });
verify(project).scheduleBuild(eq(7200), (Cause) Mockito.any());
// TODO kutzi: this doesn't work, yet. Catch typo before 's'
//Mockito.reset(project);
//when(project.getQuietPeriod()).thenReturn(42);
//cmd.getReply("sender", new String[]{ "build", "project", "1as" });
//verify(project).scheduleBuild(eq(42), (Cause) Mockito.any());
}
@SuppressWarnings("unchecked")
@Test
public void testParameters() {
BuildCommand cmd = new BuildCommand("hudsonbot");
JobProvider jobProvider = mock(JobProvider.class);
cmd.setJobProvider(jobProvider);
AbstractProject project = mock(FreeStyleProject.class);
when(jobProvider.getJobByName(Mockito.anyString())).thenReturn(project);
Sender sender = new Sender("sender");
cmd.getReply(sender, new String[]{ "build", "project", "key=value" });
ArgumentCaptor<ParametersAction> captor = ArgumentCaptor.forClass(ParametersAction.class);
verify(project).scheduleBuild(Mockito.anyInt(), (Cause) Mockito.any(),
captor.capture());
Assert.assertEquals(1, captor.getValue().getParameters().size());
Assert.assertEquals(new StringParameterValue("key", "value"),
captor.getValue().getParameters().get(0));
Mockito.reset(project);
cmd.getReply(sender, new String[]{ "build", "project", "3s", "key=value", "key2=true" });
captor = ArgumentCaptor.forClass(ParametersAction.class);
verify(project).scheduleBuild(Mockito.anyInt(), (Cause) Mockito.any(),
captor.capture());
Assert.assertEquals(2, captor.getValue().getParameters().size());
Assert.assertEquals(new StringParameterValue("key", "value"),
captor.getValue().getParameters().get(0));
Assert.assertEquals(new BooleanParameterValue("key2", true),
captor.getValue().getParameters().get(1));
}
}