/******************************************************************************* * Copyright (c) 2015, 2016 Christian Gaege and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Christian Gaege - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.hudson.tests.client; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.eclipse.mylyn.commons.repositories.core.RepositoryLocation; import org.eclipse.mylyn.commons.sdk.util.CommonTestUtil.PrivilegeLevel; import org.eclipse.mylyn.hudson.tests.support.HudsonFixture; import org.eclipse.mylyn.hudson.tests.support.HudsonHarness; import org.eclipse.mylyn.internal.hudson.core.client.HudsonException; import org.eclipse.mylyn.internal.hudson.core.client.HudsonUrlUtil; import org.eclipse.mylyn.internal.hudson.core.client.RestfulHudsonClient; import org.junit.Assert; import junit.framework.TestCase; /** * @author Christian Gaege */ public class HudsonUrlUtilTest extends TestCase { private HudsonUrlUtil hudsonUrlUtil; private HudsonHarness harness; private RepositoryLocation repositoryLocation; @Override protected void setUp() throws Exception { harness = HudsonFixture.current().createHarness(); RestfulHudsonClient client = harness.connect(PrivilegeLevel.ANONYMOUS); repositoryLocation = client.getLocation(); hudsonUrlUtil = new HudsonUrlUtil(repositoryLocation); } public void testBaseUrl() { Assert.assertEquals(repositoryLocation.getUrl(), hudsonUrlUtil.baseUrl()); } public void testAssembleJobUrl() throws HudsonException { String jobName = harness.getPlanNestedTwo(); String folderUrl = repositoryLocation.getUrl(); String expectedJobUrl = folderUrl + "job/" + jobName + "/"; Assert.assertEquals(expectedJobUrl, hudsonUrlUtil.assembleJobUrl(jobName, folderUrl)); } public void testAssembleJobUrlWithWhitespace() throws HudsonException, URISyntaxException { String jobName = harness.getPlanWhitespace(); String folderUrl = repositoryLocation.getUrl(); String encodedJobName = new URI(null, jobName, null).toASCIIString(); String expectedJobUrl = folderUrl + "job/" + encodedJobName + "/"; Assert.assertEquals(expectedJobUrl, hudsonUrlUtil.assembleJobUrl(jobName, folderUrl)); } public void testGroupJobNamesByFolderUrlWithoutJobUrls() throws HudsonException { Map<String, List<String>> jobNamesByFolderUrl = hudsonUrlUtil.groupJobNamesByFolderUrl(new ArrayList<String>()); Assert.assertNotNull(jobNamesByFolderUrl); Assert.assertTrue(jobNamesByFolderUrl.isEmpty()); } public void testGroupJobNameByFolderUrlWithJobUrlIds() throws HudsonException { String baseUrl = repositoryLocation.getUrl(); String folderUrl = baseUrl + "job/test-folder/"; String subFolderUrl = folderUrl + "job/test-sub-folder/"; List<String> jobIds = new ArrayList<String>(); jobIds.add(baseUrl + "job/test-succeeding/"); jobIds.add(baseUrl + "job/test-white%20space/"); jobIds.add(folderUrl + "job/test-nested-one/"); jobIds.add(subFolderUrl + "job/test-nested-two/"); Map<String, List<String>> jobNamesByFolderUrl = hudsonUrlUtil.groupJobNamesByFolderUrl(jobIds); Assert.assertNotNull(jobNamesByFolderUrl); Assert.assertEquals(3, jobNamesByFolderUrl.keySet().size()); Assert.assertTrue(jobNamesByFolderUrl.containsKey(baseUrl)); List<String> baseUrlJobs = jobNamesByFolderUrl.get(baseUrl); Assert.assertNotNull(baseUrlJobs); Assert.assertTrue(baseUrlJobs.contains("test-succeeding")); Assert.assertTrue(baseUrlJobs.contains("test-white space")); Assert.assertTrue(jobNamesByFolderUrl.containsKey(baseUrl)); List<String> folderUrlJobs = jobNamesByFolderUrl.get(folderUrl); Assert.assertNotNull(folderUrlJobs); Assert.assertTrue(folderUrlJobs.contains("test-nested-one")); Assert.assertTrue(jobNamesByFolderUrl.containsKey(baseUrl)); List<String> subFolderUrlJobs = jobNamesByFolderUrl.get(subFolderUrl); Assert.assertNotNull(subFolderUrlJobs); Assert.assertTrue(subFolderUrlJobs.contains("test-nested-two")); } public void testGroupJobNameByFolderUrlWithJobNameIds() throws HudsonException { String baseUrl = repositoryLocation.getUrl(); List<String> jobIds = new ArrayList<String>(); jobIds.add(harness.getPlanGit()); jobIds.add(harness.getPlanWhitespace()); Map<String, List<String>> jobNamesByFolderUrl = hudsonUrlUtil.groupJobNamesByFolderUrl(jobIds); Assert.assertNotNull(jobNamesByFolderUrl); Assert.assertEquals(1, jobNamesByFolderUrl.keySet().size()); List<String> baseUrlJobs = jobNamesByFolderUrl.get(baseUrl); Assert.assertNotNull(baseUrlJobs); Assert.assertTrue(baseUrlJobs.contains(harness.getPlanGit())); Assert.assertTrue(baseUrlJobs.contains(harness.getPlanWhitespace())); } public void testGroupJobNameByFolderUrlWithJobNameIdsAndJobUrlIds() throws HudsonException { String baseUrl = repositoryLocation.getUrl(); String folderUrl = baseUrl + "job/test-folder/"; List<String> jobIds = new ArrayList<String>(); jobIds.add(harness.getPlanGit()); jobIds.add(harness.getPlanWhitespace()); jobIds.add(baseUrl + "job/test-succeeding/"); jobIds.add(folderUrl + "job/test-nested-one/"); Map<String, List<String>> jobNamesByFolderUrl = hudsonUrlUtil.groupJobNamesByFolderUrl(jobIds); Assert.assertNotNull(jobNamesByFolderUrl); Assert.assertEquals(2, jobNamesByFolderUrl.keySet().size()); List<String> baseUrlJobs = jobNamesByFolderUrl.get(baseUrl); Assert.assertNotNull(baseUrlJobs); Assert.assertTrue(baseUrlJobs.contains(harness.getPlanGit())); Assert.assertTrue(baseUrlJobs.contains(harness.getPlanWhitespace())); Assert.assertTrue(baseUrlJobs.contains("test-succeeding")); List<String> folderUrlJobs = jobNamesByFolderUrl.get(folderUrl); Assert.assertNotNull(folderUrlJobs); Assert.assertTrue(folderUrlJobs.contains("test-nested-one")); } public void testGetJobUrlFromJobIdWithJobName() throws HudsonException { String jobId = harness.getPlanGit(); String expectedJobUrl = repositoryLocation.getUrl() + "job/" + jobId + "/"; String jobUrl = hudsonUrlUtil.getJobUrlFromJobId(jobId); Assert.assertEquals(expectedJobUrl, jobUrl); } public void testGetJobUrlFromJobIdWithJobUrl() throws HudsonException { String jobId = this.repositoryLocation.getUrl() + "job/" + harness.getPlanSucceeding() + "/"; String jobUrl = hudsonUrlUtil.getJobUrlFromJobId(jobId); Assert.assertEquals(jobId, jobUrl); } public void testGetJobUrlFromJobIdWithNestedJobUrl() throws HudsonException { String jobId = this.repositoryLocation.getUrl() + "job/" + harness.getPlanFolder() + "/job/" + harness.getPlanNestedOne() + "/"; String jobUrl = hudsonUrlUtil.getJobUrlFromJobId(jobId); Assert.assertEquals(jobId, jobUrl); } public void testIsNestedJobWithNestedJob() { String nestedJobId = this.repositoryLocation.getUrl() + "job/" + harness.getPlanFolder() + "/job/" + harness.getPlanNestedOne() + "/"; Assert.assertTrue(hudsonUrlUtil.isNestedJob(nestedJobId)); } public void testIsNestedJobWithTopLevelJob() { String topLevelJobId = this.repositoryLocation.getUrl() + "job/" + harness.getPlanSucceeding() + "/"; Assert.assertFalse(hudsonUrlUtil.isNestedJob(topLevelJobId)); } public void testGetDisplayNameWithTopLevelJob() throws HudsonException { String nestedJobUrl = this.repositoryLocation.getUrl() + "job/" + harness.getPlanSucceeding() + "/"; String expectedDisplayName = harness.getPlanSucceeding(); Assert.assertEquals(expectedDisplayName, hudsonUrlUtil.getDisplayName(nestedJobUrl)); } public void testGetDisplayNameWithNestedJob() throws HudsonException { String nestedJobUrl = this.repositoryLocation.getUrl() + "job/" + harness.getPlanFolder() + "/job/" + harness.getPlanNestedOne() + "/"; String expectedDisplayName = harness.getPlanFolder() + "/" + harness.getPlanNestedOne(); Assert.assertEquals(expectedDisplayName, hudsonUrlUtil.getDisplayName(nestedJobUrl)); } public void testGetDisplayNameWithJobNamedJob() throws HudsonException { String nestedJobUrl = this.repositoryLocation.getUrl() + "job/job/"; String expectedDisplayName = "job"; Assert.assertEquals(expectedDisplayName, hudsonUrlUtil.getDisplayName(nestedJobUrl)); } public void testGetDisplayNameWithFolderAndJobNamedJob() throws HudsonException { String nestedJobUrl = this.repositoryLocation.getUrl() + "job/job/job/job/"; String expectedDisplayName = "job/job"; Assert.assertEquals(expectedDisplayName, hudsonUrlUtil.getDisplayName(nestedJobUrl)); } public void testGetDisplayNameWithWhitespace() throws URISyntaxException, HudsonException { String jobUrl = new URI(null, this.repositoryLocation.getUrl() + "job/" + harness.getPlanWhitespace() + "/", null).toASCIIString(); String expectedDisplayName = harness.getPlanWhitespace(); Assert.assertEquals(expectedDisplayName, hudsonUrlUtil.getDisplayName(jobUrl)); } }