mirror of
https://github.com/jlengrand/github-api.git
synced 2026-03-10 08:21:21 +00:00
add tests
This commit is contained in:
18
pom.xml
18
pom.xml
@@ -484,6 +484,24 @@
|
||||
<version>5.9.0.202009080501-r</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-api</artifactId>
|
||||
<version>0.11.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-impl</artifactId>
|
||||
<version>0.11.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-jackson</artifactId>
|
||||
<version>0.11.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.squareup.okio</groupId>
|
||||
<artifactId>okio</artifactId>
|
||||
|
||||
90
src/test/java/org/kohsuke/github/GHAppInstallationTest.java
Normal file
90
src/test/java/org/kohsuke/github/GHAppInstallationTest.java
Normal file
@@ -0,0 +1,90 @@
|
||||
package org.kohsuke.github;
|
||||
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.KeyFactory;
|
||||
import java.security.PrivateKey;
|
||||
import java.security.spec.PKCS8EncodedKeySpec;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
|
||||
public class GHAppInstallationTest extends AbstractGitHubWireMockTest {
|
||||
|
||||
private static String TEST_APP_ID_1 = "82994";
|
||||
private static String TEST_APP_ID_2 = "83009";
|
||||
private static String PRIVATE_KEY_FILE_APP_1 = "/ghapi-test-app-1.private-key.pem";
|
||||
private static String PRIVATE_KEY_FILE_APP_2 = "/ghapi-test-app-2.private-key.pem";
|
||||
|
||||
private String createJwtToken(String keyFileResouceName, String appId) {
|
||||
try {
|
||||
String keyPEM = IOUtils.toString(this.getClass().getResource(keyFileResouceName), "US-ASCII")
|
||||
.replaceAll("(?m)^--.*", "") // remove comments from PEM to allow decoding
|
||||
.replaceAll("\\s", "");
|
||||
|
||||
PKCS8EncodedKeySpec keySpecPKCS8 = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(keyPEM));
|
||||
PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(keySpecPKCS8);
|
||||
|
||||
return Jwts.builder()
|
||||
.setIssuedAt(Date.from(Instant.now()))
|
||||
.setExpiration(Date.from(Instant.now().plus(5, ChronoUnit.MINUTES)))
|
||||
.setIssuer(appId)
|
||||
.signWith(privateKey)
|
||||
.compact();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Error creating JWT token.", e);
|
||||
}
|
||||
}
|
||||
|
||||
private GHAppInstallation getAppInstallationWithToken(String jwtToken) throws IOException {
|
||||
GitHub gitHub = getGitHubBuilder().withJwtToken(jwtToken)
|
||||
.withEndpoint(mockGitHub.apiServer().baseUrl())
|
||||
.build();
|
||||
|
||||
GHAppInstallation appInstallation = gitHub.getApp()
|
||||
.listInstallations()
|
||||
.toList()
|
||||
.stream()
|
||||
.filter(it -> it.getAccount().login.equals("hub4j-test-org"))
|
||||
.findFirst()
|
||||
.get();
|
||||
|
||||
appInstallation
|
||||
.setRoot(getGitHubBuilder().withAppInstallationToken(appInstallation.createToken().create().getToken())
|
||||
.withEndpoint(mockGitHub.apiServer().baseUrl())
|
||||
.build());
|
||||
|
||||
return appInstallation;
|
||||
}
|
||||
|
||||
private GHAppInstallation getAppInstallationWithTokenApp1() throws IOException {
|
||||
return getAppInstallationWithToken(createJwtToken(PRIVATE_KEY_FILE_APP_1, TEST_APP_ID_1));
|
||||
}
|
||||
|
||||
private GHAppInstallation getAppInstallationWithTokenApp2() throws IOException {
|
||||
return getAppInstallationWithToken(createJwtToken(PRIVATE_KEY_FILE_APP_2, TEST_APP_ID_2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListRepositoriesTwoRepos() throws IOException {
|
||||
GHAppInstallation appInstallation = getAppInstallationWithTokenApp1();
|
||||
|
||||
List<GHRepository> repositories = appInstallation.listRepositories().toList();
|
||||
|
||||
assertEquals(2, repositories.size());
|
||||
assertTrue(repositories.stream().anyMatch(it -> it.getName().equals("empty")));
|
||||
assertTrue(repositories.stream().anyMatch(it -> it.getName().equals("test-readme")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListRepositoriesNoPermissions() throws IOException {
|
||||
GHAppInstallation appInstallation = getAppInstallationWithTokenApp2();
|
||||
|
||||
assertTrue("App does not have permissions and should have 0 repositories",
|
||||
appInstallation.listRepositories().toList().isEmpty());
|
||||
}
|
||||
|
||||
}
|
||||
28
src/test/resources/ghapi-test-app-1.private-key.pem
Normal file
28
src/test/resources/ghapi-test-app-1.private-key.pem
Normal file
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDG98AU2pNVCCp/
|
||||
THwEqlDUZ8GRKY9TO52x+3FPTnx69D63f4k44N0DOCEk4q1mKQ0QYy6rgQcyWtwd
|
||||
GYRpgP/KU5Q3ozEnHUJ82d5HgOCMcYdpqaOb9wJRmj0s9cibDd7TmGBv0DTx5KZi
|
||||
ilqv1mYFbeIC/eVv/id0aG6PMef1+fJeGplQQ1mfdvQP/6ftxsVBHyIhYvZLLGLL
|
||||
FrcONmKTJ9Iy4F4M64PE7YkNVIEMu2cVpIxkHiZuTamr3DPgm4nRp2qe3EA2bLRA
|
||||
Zp4Q+WJmJsVgaDRqJYe8U2IVO72eHdWjoG/lV9HOfc+eH4ns8ZnRNtTnH67DnocT
|
||||
+GAbZp0NAgMBAAECggEARlWIGhcWI+XqF+vynzeRsTQoUedOGg8l9Ke861sEV/aF
|
||||
QRqdaHTcy+mIleBniYiTbKqS8d9/qsZBryu5Cg6m3V/kMjLHClumiDoAAGjHd/4d
|
||||
7zUfd9++exg57e3Ihz9E+KmR1ZTVUnkQdB8SZbw1fk/UqFgWRhui2Nyd0JLEu8eK
|
||||
QTE7MMs3w8Iv8FtC7BJBrEW2uc0h/f5gV4XrS2PR+YFKlFDN566+TILS2Q3h1h6p
|
||||
yqriZygLTQc/z0nqB098KgRcNr3LtCTlaSBBKfFEwG5Glj9QybfEuP6PihrYOFN1
|
||||
SeDCI+/b/WNDsspBheks/AYy6zVSPsWxWoHXhLxSQQKBgQD2Q4FtH6n8gqFMmFX3
|
||||
74Suvoi1YKKbeFjloQ4Pu3rPdEKuza5lgfw+YlO/nMDnQF0b+mogRD2Xs23CIub5
|
||||
RS3TZuhxkdz7VhPRwKHuYs7D5oa3BGAgRyEjG0JIZePNHO1kUSkIRrF4FXFgGpQ8
|
||||
ghdDtodXbrMjZNak8bIq6X/zkQKBgQDO1Y0ifMv3rAu0PEbfnaqXrl09c892cpjP
|
||||
A57T7e53x2WKaNwQbYixNdAbDtGEKXjIHRaV9csG1XSQh+OchT7BSOpgIDxFtK5l
|
||||
aRuov+tcMInjojZjwMv87Pet0QrZhLIZU1883q+LiM/HtHPtgsem0AzovcLoY8mH
|
||||
RuR37oebvQKBgA54ewN5h9iRqH7CuNJ/3ZETGx9lVUjDcp3Tr+rWvmmwUDbLWUMX
|
||||
t0XHK1qoEGHGU3JQbaoFuITQg1OUD3R4TzAL7P63bn/KWBHMOveyEKpMQoBAnpFm
|
||||
/Jh+go+UhSVJXN23My0MUmNXBzl5dlpz3oAZGqzVkWs0ArTgivKgk+cxAoGAGp7r
|
||||
ulubmPYAz6LOcGuHkFw1zfoA4rrfJg3OPHKsNahpTkYuxMKETGKjtUfT+ZGo5QCx
|
||||
bn2jMu74QL3ssrGHoTL0T4j2mPYnWBAOKksBTO1GYhD3tSEUYCpTuoBkSBjHH3FW
|
||||
mawDpg7mx0pXfWNOtQ6kCrSZyHVHc+zQ7Qq7U3UCgYBAZEnFW3MIwAizcioEmc53
|
||||
TJuWSvdvRsfJRNqFSpPxj5xfY9HfgpPceRlh4+jwG1bRWzt4MQKh4DyFvi06NhD7
|
||||
MnYhTX+P1jIyzV5SU8GUud/r6TFwhOWpW3zqaTCep5+VIS5W2rR322NQAZmD2u1+
|
||||
h+U8DZTYFDiNzmsHem2tNA==
|
||||
-----END PRIVATE KEY-----
|
||||
28
src/test/resources/ghapi-test-app-2.private-key.pem
Normal file
28
src/test/resources/ghapi-test-app-2.private-key.pem
Normal file
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDYm8i4enZxXwQR
|
||||
rfyBkKIroJIMGw3JSG+JPaxvcxpp6GpGOqmGsEQwzEOeuxX705CeTjpZ6/5xOCYV
|
||||
kNLmwTBG/wGpsjGLY1kV6FAC1jHkFIBWSxkmQaZRsK+MhQtREd81uMa1wA/2j3II
|
||||
AUNd0aVWLRlGte2RlDq16mvnqlgzfKB40TgC0Rww2OdoEYsVJ0tph9JvpVgGSMJD
|
||||
Irr3ZVn5hwpJBliC+obst8lIJw1JfEoYT8jU6QvfgViMzRhKNNPy22fCazfxsk1m
|
||||
+uh7c3tM0I8jnaNFkHgRXPzuXFrcgyixXczHThEP+bifWtsBRPYSVy5/RAGDIzXO
|
||||
e3npKTS1AgMBAAECggEBAMXhs4IMpm21zsLT/ozi87QFccbLZFHQ8cwf4orCTYwZ
|
||||
PhVAfCTGnNUzlkbJRTEUutZUQuxpMr59/BTRhEo4jQEe74b2elqLfRQNciLVSSjD
|
||||
Lecnnicb7HROhGFMHeWG/TJXxni9qBeoPhVgCgoIfxH2C1RU2V6YWvZb3Q37ya3l
|
||||
6kCoRfHkSBTkAySdlZDEfYCmIyx6KPIzLFX3VI/T1CAcSuTJnHe+7gdiX4ngq4Ee
|
||||
ZPppHLo76kyQjd05reGTtLq40utIfzHkSgh5nLHMnU+O3xNyyPZbZE1Gp8czgaBe
|
||||
AoAMCPfwY7l1fBy4RQ1TE2FT9sRksNO6VuV+AT4fwzUCgYEA/dVvhT8hVVldLwgn
|
||||
EObgyU35NLyHWba3AanhETI+bCERq1sUXd5LMVPCRJoT/i+zNRMhELmMeVxMYEqW
|
||||
hzBF9XoE6ONqJ7pdRh9brysfKOye0goOXWr2XKZL8mO8utWsV6ehYiKLvgrAjEDR
|
||||
rToknzp8jIQqPaiheWZZIjFvdCMCgYEA2nUFQGss5Iy3FyNLQITwNRgzu75XAYML
|
||||
wM69iW5eF5dNF5p/6kcu12pgSW2mMI9rSVPiMqJqig2F5sIsqvBxIKS1yWuWn1CO
|
||||
wdP3O7GVHiDXpdra0j8z8PBhJ0jRHED5q259dXC0BvqqU8U8cOFxlgr96ZZP+TS3
|
||||
2Tw/RRzkdUcCgYBpcjXuu4gEZahBNnjMG6070wl4b+0mRrIFneWieCXYU3B8p8xx
|
||||
JjxEVJA6YWt2x6gBn124DeyeKcqMoc+gf1xAmpzZhkd+E3xV+gbjYN2D6bAcfxLy
|
||||
mdGYMXkRS3+GeecrTrbLBqDYpKzSVscD2EiIYQqGcQz/KkNSJENY4gJz0wKBgQCX
|
||||
6eR7BYy0an4v4uVDuq5n3aqsFhLfBEg6DgqT9WINObPshA4L1vBl8J2AsnVtM27C
|
||||
EUktOPCpi/nfnIv/WzDwKFoZ9W1K4HRFqac1paoyx1fvCCA/MKBoHmERNnvkD/MP
|
||||
Gci40GUArXOgyXncbYnVc1NbCqIWhGiM8m51G0BrpQKBgAffan4sPiNnWeQlvbAj
|
||||
kW1GkGCIOqMHVgjOxVlDGri/GLwAt1zOxHT7i9nQb6wpE0fAb05ydjPOuA7iIeG4
|
||||
jZdQWfY6QIhlYkDq7JiRCkcQ3auMzplSV17rDSiBL+ttOY8tLdX5fJVmeGdq7Gs1
|
||||
YPW1uoYsHNTFWew5Ae31KaLn
|
||||
-----END PRIVATE KEY-----
|
||||
Reference in New Issue
Block a user