diff --git a/pom.xml b/pom.xml index 60afc118..d06b3979 100644 --- a/pom.xml +++ b/pom.xml @@ -162,6 +162,9 @@ java.util.logging.* edu.tamu.app.config.AppEmailConfig + + **/ProjectInitialization.class + html @@ -173,6 +176,11 @@ org.jacoco jacoco-maven-plugin + + + **/ProjectInitialization.class + + prepare-agent diff --git a/src/main/java/edu/tamu/app/ProjectInitialization.java b/src/main/java/edu/tamu/app/ProjectInitialization.java index 41e92f7c..2e516c6b 100644 --- a/src/main/java/edu/tamu/app/ProjectInitialization.java +++ b/src/main/java/edu/tamu/app/ProjectInitialization.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Component; import edu.tamu.app.model.CardType; +import edu.tamu.app.model.ServiceType; import edu.tamu.app.model.repo.CardTypeRepo; import edu.tamu.app.model.repo.RemoteProjectManagerRepo; import edu.tamu.app.service.registry.ManagementBeanRegistry; @@ -29,6 +30,22 @@ public class ProjectInitialization implements CommandLineRunner { @Override public void run(String... args) throws Exception { remoteProjectManagerRepo.findAll().forEach(versionManagementSoftware -> { + if (versionManagementSoftware.getType().equals(ServiceType.GITHUB)) { + if (!versionManagementSoftware.getSettingValue("token").isPresent()) { + return; + } + } + + if (versionManagementSoftware.getType().equals(ServiceType.VERSION_ONE)) { + if (!versionManagementSoftware.getSettingValue("url").isPresent()) { + return; + } + + if (versionManagementSoftware.getSettingValue("url").get().isEmpty()) { + return; + } + } + managementBeanRegistry.register(versionManagementSoftware); }); CardType type = cardTypeRepo.findByIdentifier("Feature"); diff --git a/src/main/java/edu/tamu/app/model/ServiceType.java b/src/main/java/edu/tamu/app/model/ServiceType.java index c9a3f199..a0130dac 100644 --- a/src/main/java/edu/tamu/app/model/ServiceType.java +++ b/src/main/java/edu/tamu/app/model/ServiceType.java @@ -40,6 +40,9 @@ public List getScaffold() { List scaffold = new ArrayList(); switch (this) { case GITHUB: + scaffold.add(new Setting("text", "url", "URL", true)); + scaffold.add(new Setting("password", "token", "Token", false)); + break; case VERSION_ONE: scaffold.add(new Setting("text", "url", "URL", true)); scaffold.add(new Setting("text", "username", "Username", false)); diff --git a/src/main/java/edu/tamu/app/service/manager/GitHubService.java b/src/main/java/edu/tamu/app/service/manager/GitHubService.java index 251118ce..835c6c96 100644 --- a/src/main/java/edu/tamu/app/service/manager/GitHubService.java +++ b/src/main/java/edu/tamu/app/service/manager/GitHubService.java @@ -12,7 +12,6 @@ import java.util.Map; import java.util.Optional; -import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.kohsuke.github.GHIssue; import org.kohsuke.github.GHIssueState; @@ -40,7 +39,6 @@ import edu.tamu.app.cache.model.Sprint; import edu.tamu.app.model.ManagementService; import edu.tamu.app.model.request.FeatureRequest; -import edu.tamu.app.rest.BasicAuthRestTemplate; import edu.tamu.app.rest.TokenAuthRestTemplate; public class GitHubService extends MappingRemoteProjectManagerBean { @@ -136,24 +134,18 @@ public String push(final FeatureRequest request) throws Exception { } protected GitHub getGitHubInstance() throws IOException { - GitHub githubInstance; final Optional endpoint = managementService.getSettingValue("url"); final Optional token = managementService.getSettingValue("token"); if (!endpoint.isPresent()) { - throw new RuntimeException("GitHub service enpoint was not defined"); + throw new RuntimeException("GitHub service endpoint was not defined"); } - if (token.isPresent()) { - githubInstance = ghBuilder - .withEndpoint(endpoint.get()) - .withOAuthToken(token.get()) - .build(); - } else { - githubInstance = ghBuilder - .withEndpoint(endpoint.get()) - .withPassword(getSettingValue("username"), getSettingValue("password")) - .build(); + if (!token.isPresent()) { + throw new RuntimeException("GitHub token was not defined"); } - return githubInstance; + return ghBuilder + .withEndpoint(endpoint.get()) + .withOAuthToken(token.get()) + .build(); } private String getSettingValue(final String key) { @@ -166,8 +158,7 @@ private String getSettingValue(final String key) { } private RestTemplate getRestTemplate() { - String token = getSettingValue("token"); - return StringUtils.isNotBlank(token) ? new TokenAuthRestTemplate(token) : new BasicAuthRestTemplate(getSettingValue("username"), getSettingValue("password")); + return new TokenAuthRestTemplate(getSettingValue("token")); } private RemoteProject buildRemoteProject(GHRepository repo, List labels) throws IOException { diff --git a/src/test/java/edu/tamu/app/model/ModelTest.java b/src/test/java/edu/tamu/app/model/ModelTest.java index 093d0dfe..0dce87fc 100644 --- a/src/test/java/edu/tamu/app/model/ModelTest.java +++ b/src/test/java/edu/tamu/app/model/ModelTest.java @@ -75,6 +75,20 @@ public abstract class ModelTest { protected InternalRequestRepo internalRequestRepo; protected static Map getMockSettings() { + return getMockSettings(false); + } + + protected static Map getMockSettings(boolean token) { + if (token) { + return new HashMap() { + private static final long serialVersionUID = 2020874481642498007L; + { + put("url", "https://localhost:9101/TexasAMLibrary"); + put("token", "token"); + } + }; + } + return new HashMap() { private static final long serialVersionUID = 2020874481642498006L; { diff --git a/src/test/java/edu/tamu/app/model/RemoteProjectManagerTest.java b/src/test/java/edu/tamu/app/model/RemoteProjectManagerTest.java index 333d245a..80a715b0 100644 --- a/src/test/java/edu/tamu/app/model/RemoteProjectManagerTest.java +++ b/src/test/java/edu/tamu/app/model/RemoteProjectManagerTest.java @@ -23,15 +23,16 @@ public class RemoteProjectManagerTest extends ModelTest { @Test public void testCreate() { Map settings = getMockSettings(); + Map settingsToken = getMockSettings(true); RemoteProjectManager remoteProjectManager1 = remoteProjectManagerRepo.create(new RemoteProjectManager(TEST_REMOTE_PROJECT_MANAGER1_NAME, ServiceType.VERSION_ONE, settings)); - RemoteProjectManager remoteProjectManager2 = remoteProjectManagerRepo.create(new RemoteProjectManager(TEST_REMOTE_PROJECT_MANAGER2_NAME, ServiceType.GITHUB, settings)); + RemoteProjectManager remoteProjectManager2 = remoteProjectManagerRepo.create(new RemoteProjectManager(TEST_REMOTE_PROJECT_MANAGER2_NAME, ServiceType.GITHUB, settingsToken)); assertEquals("Remote project manager repo had incorrect number of remote project managers!", 2, remoteProjectManagerRepo.count()); assertEquals("Remote project manager had incorrect name!", TEST_REMOTE_PROJECT_MANAGER1_NAME, remoteProjectManager1.getName()); assertEquals("Remote project manager had incorrect service type!", ServiceType.VERSION_ONE, remoteProjectManager1.getType()); assertEquals("Remote project manager had incorrect settings!", settings, remoteProjectManager1.getSettings()); assertEquals("Remote project manager had incorrect name!", TEST_REMOTE_PROJECT_MANAGER2_NAME, remoteProjectManager2.getName()); assertEquals("Remote project manager had incorrect service type!", ServiceType.GITHUB, remoteProjectManager2.getType()); - assertEquals("Remote project manager had incorrect settings!", settings, remoteProjectManager2.getSettings()); + assertEquals("Remote project manager had incorrect settings!", settingsToken, remoteProjectManager2.getSettings()); } @Test diff --git a/src/test/java/edu/tamu/app/service/manager/GitHubServiceTest.java b/src/test/java/edu/tamu/app/service/manager/GitHubServiceTest.java index eca0bbea..dedf0002 100644 --- a/src/test/java/edu/tamu/app/service/manager/GitHubServiceTest.java +++ b/src/test/java/edu/tamu/app/service/manager/GitHubServiceTest.java @@ -173,14 +173,14 @@ public class GitHubServiceTest extends CacheMockTests { @Before public void setUp() throws Exception { ManagementService managementService = new RemoteProjectManager("GitHub", ServiceType.GITHUB, - new HashMap() { - private static final long serialVersionUID = 2020874481642498006L; - { - put("url", "https://localhost:9101/TexasAMLibrary"); - put("username", "username"); - put("password", "password"); - } - }); + new HashMap() { + private static final long serialVersionUID = 2020874481642498006L; + { + put("url", "https://localhost:9101/TexasAMLibrary"); + put("token", "token"); + } + }); + CardTypeRepo cardTypeRepo = mock(CardTypeRepo.class); StatusRepo statusRepo = mock(StatusRepo.class); @@ -199,7 +199,6 @@ public void setUp() throws Exception { github = mock(GitHub.class); when(ghBuilder.withEndpoint(any(String.class))).thenReturn(ghBuilder); - when(ghBuilder.withPassword(any(String.class), any(String.class))).thenReturn(ghBuilder); when(ghBuilder.withOAuthToken(any(String.class))).thenReturn(ghBuilder); when(ghBuilder.build()).thenReturn(github); @@ -397,24 +396,45 @@ public void testGetMember() throws IOException { } @Test - public void testGetGitHubInstanceByPassword() throws IOException { - GitHub githubInstance = gitHubService.getGitHubInstance(); - assertNotNull("GitHub object was not created", githubInstance); + public void testGetGitHubInstanceWithInvalidServiceEndpoint() throws IOException { + ManagementService invalidManagementService = new RemoteProjectManager("GitHub", ServiceType.GITHUB, + new HashMap() { + private static final long serialVersionUID = 2020874481642498006L; + { + put("token", "token"); + } + }); + + setField(gitHubService, "managementService", invalidManagementService); + + try { + gitHubService.getGitHubInstance(); + } catch (RuntimeException e) { + assertEquals(e.getMessage(), "GitHub service endpoint was not defined"); + } } @Test - public void testGetGitHubInstanceByToken() throws IOException { - ManagementService tokenManagementService = new RemoteProjectManager("GitHub", ServiceType.GITHUB, - new HashMap() { - private static final long serialVersionUID = 2020874481642498006L; - { - put("url", "https://localhost:9101/TexasAMLibrary"); - put("token", "token"); - } - }); + public void testGetGitHubInstanceWithInvalidToken() throws IOException { + ManagementService invalidManagementService = new RemoteProjectManager("GitHub", ServiceType.GITHUB, + new HashMap() { + private static final long serialVersionUID = 2020874481642498006L; + { + put("url", "https://localhost:9101/TexasAMLibrary"); + } + }); + + setField(gitHubService, "managementService", invalidManagementService); - setField(gitHubService, "managementService", tokenManagementService); + try { + gitHubService.getGitHubInstance(); + } catch (RuntimeException e) { + assertEquals(e.getMessage(), "GitHub token was not defined"); + } + } + @Test + public void testGetGitHubInstanceByToken() throws IOException { GitHub gitHubInstance = gitHubService.getGitHubInstance(); assertNotNull("GitHub object was not created", gitHubInstance); }