| package org.apache.maven.plugins.github; |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| import static org.mockito.Mockito.mock; |
| import static org.mockito.Mockito.when; |
| import static org.mockito.Mockito.verify; |
| import static org.mockito.Mockito.any; |
| |
| import java.io.IOException; |
| import java.net.MalformedURLException; |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.List; |
| |
| import org.apache.maven.model.IssueManagement; |
| import org.apache.maven.plugin.logging.Log; |
| import org.apache.maven.plugins.issues.Issue; |
| import org.apache.maven.project.MavenProject; |
| import org.apache.maven.settings.Server; |
| import org.apache.maven.settings.Settings; |
| import org.apache.maven.settings.building.DefaultSettingsProblem; |
| import org.apache.maven.settings.building.SettingsProblem; |
| import org.apache.maven.settings.building.SettingsProblem.Severity; |
| import org.apache.maven.settings.crypto.DefaultSettingsDecryptionRequest; |
| import org.apache.maven.settings.crypto.SettingsDecrypter; |
| import org.apache.maven.settings.crypto.SettingsDecryptionRequest; |
| import org.apache.maven.settings.crypto.SettingsDecryptionResult; |
| import org.eclipse.egit.github.core.User; |
| import org.mockito.ArgumentCaptor; |
| |
| import junit.framework.TestCase; |
| |
| public class GitHubDownloaderTestCase |
| extends TestCase |
| { |
| |
| public void testCreateIssue() |
| throws IOException |
| { |
| IssueManagement issueManagement = newGitHubIssueManagement(); |
| GitHubDownloader gitHubDownloader = newGitHubDownloader( issueManagement ); |
| |
| org.eclipse.egit.github.core.Issue githubIssue = new org.eclipse.egit.github.core.Issue(); |
| githubIssue.setNumber( 1 ); |
| githubIssue.setBody( "Body" ); |
| githubIssue.setTitle( "Title" ); |
| User user = new User(); |
| githubIssue.setUser( user ); |
| |
| Issue issue = gitHubDownloader.createIssue( githubIssue ); |
| |
| assertEquals( Integer.toString( githubIssue.getNumber() ), issue.getId() ); |
| assertEquals( Integer.toString( githubIssue.getNumber() ), issue.getKey() ); |
| assertEquals( githubIssue.getTitle(), issue.getTitle() ); |
| assertEquals( githubIssue.getTitle(), issue.getSummary() ); |
| assertEquals( issueManagement.getUrl() + githubIssue.getNumber(), issue.getLink() ); |
| } |
| |
| public void testConfigureAuthenticationWithProblems() |
| throws Exception |
| { |
| IssueManagement issueManagement = newGitHubIssueManagement(); |
| GitHubDownloader gitHubDownloader = newGitHubDownloader( issueManagement ); |
| Settings settings = new Settings(); |
| Server server = newServer( "github-server" ); |
| settings.addServer( server ); |
| SettingsDecrypter decrypter = mock( SettingsDecrypter.class ); |
| SettingsDecryptionResult result = mock( SettingsDecryptionResult.class ); |
| Log log = mock( Log.class ); |
| when( result.getProblems() ).thenReturn( Arrays.<SettingsProblem>asList( new DefaultSettingsProblem( "Ups " |
| + server.getId(), Severity.ERROR, null, -1, -1, null ) ) ); |
| when( result.getServer() ).thenReturn( server ); |
| when( decrypter.decrypt( any( SettingsDecryptionRequest.class ) ) ).thenReturn( result ); |
| |
| gitHubDownloader.configureAuthentication( decrypter, "github-server", settings, log ); |
| |
| verify( log ).error( "Ups github-server", null ); |
| ArgumentCaptor<SettingsDecryptionRequest> argument = ArgumentCaptor.forClass( SettingsDecryptionRequest.class ); |
| verify( decrypter ).decrypt( argument.capture() ); |
| List<Server> servers = ( (DefaultSettingsDecryptionRequest) argument.getValue() ).getServers(); |
| assertEquals( 1, servers.size() ); |
| assertSame( server, servers.get( 0 ) ); |
| } |
| |
| public void testConfigureAuthenticationWithNoServer() |
| throws Exception |
| { |
| IssueManagement issueManagement = newGitHubIssueManagement(); |
| GitHubDownloader gitHubDownloader = newGitHubDownloader( issueManagement ); |
| Settings settings = new Settings(); |
| Server server = newServer( "not-the-right-one" ); |
| settings.addServer( server ); |
| SettingsDecrypter decrypter = mock( SettingsDecrypter.class ); |
| SettingsDecryptionResult result = mock( SettingsDecryptionResult.class ); |
| Log log = mock( Log.class ); |
| when( result.getProblems() ).thenReturn( Collections.<SettingsProblem>emptyList() ); |
| when( result.getServer() ).thenReturn( server ); |
| when( decrypter.decrypt( new DefaultSettingsDecryptionRequest( server ) ) ).thenReturn( result ); |
| |
| gitHubDownloader.configureAuthentication( decrypter, "github-server", settings, log ); |
| |
| verify( log ).warn( "Can't find server id [github-server] configured in githubAPIServerId." ); |
| } |
| |
| private Server newServer( String id ) |
| { |
| Server server = new Server(); |
| server.setId( id ); |
| server.setUsername( "some-user" ); |
| server.setPassword( "Sup3rSecret" ); |
| return server; |
| } |
| |
| private GitHubDownloader newGitHubDownloader( IssueManagement issueManagement ) |
| throws MalformedURLException |
| { |
| MavenProject mavenProject = new MavenProject(); |
| mavenProject.setIssueManagement( issueManagement ); |
| return new GitHubDownloader( mavenProject, "https", 80, true, false ); |
| } |
| |
| private IssueManagement newGitHubIssueManagement() |
| { |
| IssueManagement issueManagement = new IssueManagement(); |
| issueManagement.setSystem( "GitHub" ); |
| issueManagement.setUrl( "https://github.com/dadoonet/spring-elasticsearch/issues/" ); |
| return issueManagement; |
| } |
| |
| } |