package hudson.plugins.codeplex.scm;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import hudson.model.AbstractBuild;
import hudson.model.User;
import hudson.plugins.codeplex.CodePlexUserProperty;
import hudson.plugins.tfs.ChangeSetReader;
import hudson.plugins.tfs.model.ChangeLogSet;
import hudson.plugins.tfs.model.ChangeSet;
import org.junit.Test;
public class TfsChangeLogParserDecoratorTest {
@Test public void assertTfsUsernameIsDecorated() throws Exception {
List<ChangeSet> changesetList = new ArrayList<ChangeSet>();
changesetList.add(new FakeChangeSet("1", new Date(), "snd\\redsolo_cp", "", mock(User.class)));
ChangeLogSet changeLogSet = new ChangeLogSet(mock(AbstractBuild.class), changesetList);
ChangeSetReader decoratedLogParser = mock(ChangeSetReader.class);
when(decoratedLogParser.parse(null, (File) null)).thenReturn(changeLogSet);
TfsChangeLogParserDecorator logParser = new TfsChangeLogParserDecorator(decoratedLogParser);
ChangeLogSet logSet = (ChangeLogSet) logParser.parse(null, null);
assertEquals("The user name was not fixed", "redsolo", logSet.iterator().next().getUser());
}
@Test public void assertTfsUsernameWithoutDomainIsNotDecorated() throws Exception {
List<ChangeSet> changesetList = new ArrayList<ChangeSet>();
changesetList.add(new FakeChangeSet("1", new Date(), "redsolo", "", mock(User.class)));
ChangeLogSet changeLogSet = new ChangeLogSet(mock(AbstractBuild.class), changesetList);
ChangeSetReader decoratedLogParser = mock(ChangeSetReader.class);
when(decoratedLogParser.parse(null, (File) null)).thenReturn(changeLogSet);
TfsChangeLogParserDecorator logParser = new TfsChangeLogParserDecorator(decoratedLogParser);
ChangeLogSet logSet = (ChangeLogSet) logParser.parse(null, null);
assertEquals("The user name was not fixed", "redsolo", logSet.iterator().next().getUser());
}
@Test public void assertUserPropertyIsAddedToUser() throws Exception {
User user = mock(User.class);
when(user.getProperty(CodePlexUserProperty.class)).
thenReturn(null).
thenReturn(new CodePlexUserProperty());
List<ChangeSet> changesetList = new ArrayList<ChangeSet>();
changesetList.add(new FakeChangeSet("1", new Date(), "redsolo", "", user));
changesetList.add(new FakeChangeSet("2", new Date(), "redsolo", "", user));
ChangeLogSet changeLogSet = new ChangeLogSet(mock(AbstractBuild.class), changesetList);
ChangeSetReader decoratedLogParser = mock(ChangeSetReader.class);
when(decoratedLogParser.parse(null, (File) null)).thenReturn(changeLogSet);
TfsChangeLogParserDecorator logParser = new TfsChangeLogParserDecorator(decoratedLogParser);
logParser.parse(null, null);
verify(user).addProperty(isA(CodePlexUserProperty.class));
}
private static class FakeChangeSet extends ChangeSet {
private final User user;
public FakeChangeSet(String version, Date date, String userName, String comment, User user) {
super(version, date, userName, comment);
this.user = user;
}
@Override
public User getAuthor() {
return user;
}
}
}