package hudson.plugins.tfs.browsers; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import hudson.model.AbstractBuild; import hudson.model.AbstractProject; import hudson.plugins.tfs.TeamFoundationServerScm; import hudson.plugins.tfs.model.ChangeLogSet; import hudson.plugins.tfs.model.ChangeSet; import hudson.plugins.tfs.model.ChangeSet.Item; import java.net.URL; import hudson.util.Secret; import org.junit.Test; import org.jvnet.hudson.test.Bug; @SuppressWarnings("rawtypes") public class TeamSystemWebAccessBrowserTest { @Test public void assertChangeSetLinkWithServerUrlWithPort() throws Exception { TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser("http://tfs:8080/"); ChangeSet changeSet = new ChangeSet("99", null, "user", "comment"); URL actual = browser.getChangeSetLink(changeSet); assertEquals("The change set link was incorrect", "http://tfs:8080/_versionControl/changeset?id=99", actual.toString()); } @Test public void assertChangeSetLinkWithRealisticServerUrlWithPort() throws Exception { TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser("http://tfs:8080/tfs/coll"); ChangeSet changeSet = new ChangeSet("99", null, "user", "comment"); URL actual = browser.getChangeSetLink(changeSet); assertEquals("The change set link was incorrect", "http://tfs:8080/tfs/coll/_versionControl/changeset?id=99", actual.toString()); } @Test public void assertChangeSetLinkWithRealisticServerUrl() throws Exception { TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser("http://tfs/tfs/coll"); ChangeSet changeSet = new ChangeSet("99", null, "user", "comment"); URL actual = browser.getChangeSetLink(changeSet); assertEquals("The change set link was incorrect", "http://tfs/tfs/coll/_versionControl/changeset?id=99", actual.toString()); } @Bug(7394) @Test public void assertChangeSetLinkWithOnlyServerUrl() throws Exception { TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser("http://tfs"); ChangeSet changeSet = new ChangeSet("99", null, "user", "comment"); URL actual = browser.getChangeSetLink(changeSet); assertEquals("The change set link was incorrect", "http://tfs/_versionControl/changeset?id=99", actual.toString()); } @Bug(7394) @Test public void assertChangeSetLinkWithOnlyServerUrlWithTrailingSlash() throws Exception { TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser("http://tfs/"); ChangeSet changeSet = new ChangeSet("99", null, "user", "comment"); URL actual = browser.getChangeSetLink(changeSet); assertEquals("The change set link was incorrect","http://tfs/_versionControl/changeset?id=99", actual.toString()); } private static TeamFoundationServerScm createTestScm(String serverUrl) { serverUrl = serverUrl != null ? serverUrl : "http://server:80/tfs/collection/"; final String projectPath = "$/project/folder/folder/branch"; final Secret password = null; final String userName = null; final TeamFoundationServerScm result = new TeamFoundationServerScm(serverUrl, projectPath, null, userName, password); final TeamFoundationServerRepositoryBrowser repositoryBrowser = mock(TeamFoundationServerRepositoryBrowser.class); result.setRepositoryBrowser(repositoryBrowser); return result; } @Test public void assertChangeSetLinkUsesScmConfiguration() throws Exception { AbstractBuild build = mock(AbstractBuild.class); AbstractProject<?,?> project = mock(AbstractProject.class); when(build.getProject()).thenReturn(project); final TeamFoundationServerScm testScm = createTestScm(null); when(project.getScm()).thenReturn(testScm); ChangeSet changeset = new ChangeSet("62643", null, "user", "comment"); new ChangeLogSet(build, new ChangeSet[]{ changeset}); TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser(""); // configured but no URL specified URL actual = browser.getChangeSetLink(changeset); assertEquals("The change set link was incorrect", "http://server:80/tfs/collection/_versionControl/changeset?id=62643", actual.toString()); } @Test public void assertChangeSetLinkUsesScmConfigurationNoSlash() throws Exception { AbstractBuild build = mock(AbstractBuild.class); AbstractProject<?,?> project = mock(AbstractProject.class); when(build.getProject()).thenReturn(project); // the server URL has not trailing slash... final TeamFoundationServerScm testScm = createTestScm("http://server:80/tfs/collection"); when(project.getScm()).thenReturn(testScm); ChangeSet changeset = new ChangeSet("62643", null, "user", "comment"); new ChangeLogSet(build, new ChangeSet[]{ changeset}); TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser(""); // configured but no URL specified URL actual = browser.getChangeSetLink(changeset); assertEquals("The change set link was incorrect", "http://server:80/tfs/collection/_versionControl/changeset?id=62643", actual.toString()); } @Test public void assertFileLinkUsesScmConfiguration() throws Exception { AbstractBuild build = mock(AbstractBuild.class); AbstractProject<?,?> project = mock(AbstractProject.class); when(build.getProject()).thenReturn(project); final TeamFoundationServerScm testScm = createTestScm(null); when(project.getScm()).thenReturn(testScm); ChangeSet changeset = new ChangeSet("62643", null, "user", "comment"); ChangeSet.Item item = new Item("$/project/folder/folder/branch/some/path/to/some/file.txt", "action"); changeset.add(item); new ChangeLogSet(build, new ChangeSet[]{ changeset}); TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser(""); // configured but no URL specified URL actual = browser.getFileLink(item); assertEquals("The file link was incorrect", "http://server:80/tfs/collection/_versionControl/changeset?id=62643#path=%24%2Fproject%2Ffolder%2Ffolder%2Fbranch%2Fsome%2Fpath%2Fto%2Fsome%2Ffile.txt&version=62643&_a=contents", actual.toString()); } @Test public void assertDiffLinkUsesScmConfiguration() throws Exception { AbstractBuild build = mock(AbstractBuild.class); AbstractProject<?,?> project = mock(AbstractProject.class); when(build.getProject()).thenReturn(project); final TeamFoundationServerScm testScm = createTestScm(null); when(project.getScm()).thenReturn(testScm); ChangeSet changeset = new ChangeSet("62643", null, "user", "comment"); new ChangeLogSet(build, new ChangeSet[]{ changeset}); ChangeSet.Item item = new Item("$/project/folder/folder/branch/some/path/to/some/file.txt", "action"); changeset.add(item); TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser(""); // configured but no URL specified URL actual = browser.getDiffLink(item); assertEquals("The diff link was incorrect", "http://server:80/tfs/collection/_versionControl/changeset?id=62643#path=%24%2Fproject%2Ffolder%2Ffolder%2Fbranch%2Fsome%2Fpath%2Fto%2Fsome%2Ffile.txt&version=62643&_a=compare", actual.toString()); } @Test public void assertFileLink() throws Exception { TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser("http://tfs:8080/"); ChangeSet changeSet = new ChangeSet("99", null, "user", "comment"); ChangeSet.Item item = new ChangeSet.Item("$/Project/Folder/file.cs", "add"); changeSet.add(item); URL actual = browser.getFileLink(item); assertEquals("The file link was incorrect", "http://tfs:8080/_versionControl/changeset?id=99#path=%24%2FProject%2FFolder%2Ffile.cs&version=99&_a=contents", actual.toString()); } @Test public void assertFileLinkWithRealisticServerUrl() throws Exception { TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser("http://tfs:8080/tfs/coll"); ChangeSet changeSet = new ChangeSet("99", null, "user", "comment"); ChangeSet.Item item = new ChangeSet.Item("$/Project/Folder/file.cs", "add"); changeSet.add(item); URL actual = browser.getFileLink(item); assertEquals("The file link was incorrect", "http://tfs:8080/tfs/coll/_versionControl/changeset?id=99#path=%24%2FProject%2FFolder%2Ffile.cs&version=99&_a=contents", actual.toString()); } @Test public void assertDiffLink() throws Exception { TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser("http://tfs:8080/"); ChangeSet changeSet = new ChangeSet("99", null, "user", "comment"); ChangeSet.Item item = new ChangeSet.Item("$/Project/Folder/file.cs", "edit"); changeSet.add(item); URL actual = browser.getDiffLink(item); assertEquals("The diff link was incorrect", "http://tfs:8080/_versionControl/changeset?id=99#path=%24%2FProject%2FFolder%2Ffile.cs&version=99&_a=compare", actual.toString()); } @Test public void assertDiffLinkWithRealisticServerUrl() throws Exception { TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser("http://tfs:8080/tfs/coll"); ChangeSet changeSet = new ChangeSet("99", null, "user", "comment"); ChangeSet.Item item = new ChangeSet.Item("$/Project/Folder/file.cs", "edit"); changeSet.add(item); URL actual = browser.getDiffLink(item); assertEquals("The diff link was incorrect", "http://tfs:8080/tfs/coll/_versionControl/changeset?id=99#path=%24%2FProject%2FFolder%2Ffile.cs&version=99&_a=compare", actual.toString()); } @Test public void assertNullDiffLinkForAddedFile() throws Exception { TeamSystemWebAccessBrowser browser = new TeamSystemWebAccessBrowser("http://tfs:8080/"); ChangeSet changeSet = new ChangeSet("99", null, "user", "comment"); ChangeSet.Item item = new ChangeSet.Item("$/Project/Folder/file.cs", "add"); changeSet.add(item); assertNull("The diff link should be null for new files", browser.getDiffLink(item)); } }