package org.kohsuke.github; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.kohsuke.github.GHOrganization.Permission; import java.io.IOException; import java.util.List; import static org.hamcrest.Matchers.*; public class GHOrganizationTest extends AbstractGitHubWireMockTest { public static final String GITHUB_API_TEST = "github-api-test"; public static final String GITHUB_API_TEMPLATE_TEST = "github-api-template-test"; public static final String TEAM_NAME_CREATE = "create-team-test"; @Before @After public void cleanUpTeam() throws IOException { // Cleanup is only needed when proxying if (!mockGitHub.isUseProxy()) { return; } GHTeam team = getNonRecordingGitHub().getOrganization(GITHUB_API_TEST_ORG).getTeamByName(TEAM_NAME_CREATE); if (team != null) { team.delete(); } } @Test public void testCreateRepository() throws IOException { cleanupRepository(GITHUB_API_TEST_ORG + '/' + GITHUB_API_TEST); GHOrganization org = gitHub.getOrganization(GITHUB_API_TEST_ORG); GHRepository repository = org.createRepository(GITHUB_API_TEST) .description("a test repository used to test kohsuke's github-api") .homepage("http://github-api.kohsuke.org/") .team(org.getTeamByName("Core Developers")) .private_(false) .create(); Assert.assertNotNull(repository); } @Test public void testCreateRepositoryWithAutoInitialization() throws IOException { cleanupRepository(GITHUB_API_TEST_ORG + '/' + GITHUB_API_TEST); GHOrganization org = gitHub.getOrganization(GITHUB_API_TEST_ORG); GHRepository repository = org.createRepository(GITHUB_API_TEST) .description("a test repository used to test kohsuke's github-api") .homepage("http://github-api.kohsuke.org/") .team(org.getTeamByName("Core Developers")) .autoInit(true) .create(); Assert.assertNotNull(repository); Assert.assertNotNull(repository.getReadme()); } @Test public void testCreateRepositoryWithParameterIsTemplate() throws IOException { cleanupRepository(GITHUB_API_TEST_ORG + '/' + GITHUB_API_TEMPLATE_TEST); GHOrganization org = gitHub.getOrganization(GITHUB_API_TEST_ORG); GHTeam team = org.getTeamByName("Core Developers"); int requestCount = mockGitHub.getRequestCount(); GHRepository repository = org.createRepository(GITHUB_API_TEMPLATE_TEST) .description("a test template repository used to test kohsuke's github-api") .homepage("http://github-api.kohsuke.org/") .team(team) .autoInit(true) .isTemplate(true) .create(); Assert.assertNotNull(repository); assertThat(mockGitHub.getRequestCount(), equalTo(requestCount + 1)); Assert.assertNotNull(repository.getReadme()); assertThat(mockGitHub.getRequestCount(), equalTo(requestCount + 2)); // isTemplate() does not call populate() from create assertThat(repository.isTemplate(), equalTo(true)); assertThat(mockGitHub.getRequestCount(), equalTo(requestCount + 2)); repository = org.getRepository(GITHUB_API_TEMPLATE_TEST); // first isTemplate() calls populate() assertThat(repository.isTemplate(), equalTo(true)); assertThat(mockGitHub.getRequestCount(), equalTo(requestCount + 4)); // second isTemplate() does not call populate() assertThat(repository.isTemplate(), equalTo(true)); assertThat(mockGitHub.getRequestCount(), equalTo(requestCount + 4)); } @Test public void testCreateRepositoryWithTemplate() throws IOException { cleanupRepository(GITHUB_API_TEST_ORG + '/' + GITHUB_API_TEST); GHOrganization org = gitHub.getOrganization(GITHUB_API_TEST_ORG); GHRepository repository = org.createRepository(GITHUB_API_TEST) .fromTemplateRepository(GITHUB_API_TEST_ORG, GITHUB_API_TEMPLATE_TEST) .owner(GITHUB_API_TEST_ORG) .create(); Assert.assertNotNull(repository); Assert.assertNotNull(repository.getReadme()); } @Test public void testInviteUser() throws IOException { GHOrganization org = gitHub.getOrganization(GITHUB_API_TEST_ORG); GHUser user = gitHub.getUser("martinvanzijl2"); // First remove the user if (org.hasMember(user)) { org.remove(user); } // Then invite the user again org.add(user, GHOrganization.Role.MEMBER); // Now the user has to accept the invitation // Can this be automated? // user.acceptInvitationTo(org); // ? // Check the invitation has worked. // assertTrue(org.hasMember(user)); } @Test public void testListMembersWithFilter() throws IOException { GHOrganization org = gitHub.getOrganization(GITHUB_API_TEST_ORG); List admins = org.listMembersWithFilter("all").toList(); assertNotNull(admins); assertTrue(admins.size() >= 12); // In case more are added in the future assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("alexanderrtaylor"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("asthinasthi"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("bitwiseman"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("farmdawgnation"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("halkeye"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("jberglund-BSFT"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("kohsuke"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("kohsuke2"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("martinvanzijl"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("PauloMigAlmeida"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("Sage-Pierce"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("timja"))); } @Test public void testListMembersWithRole() throws IOException { GHOrganization org = gitHub.getOrganization(GITHUB_API_TEST_ORG); List admins = org.listMembersWithRole("admin").toList(); assertNotNull(admins); assertTrue(admins.size() >= 12); // In case more are added in the future assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("alexanderrtaylor"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("asthinasthi"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("bitwiseman"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("farmdawgnation"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("halkeye"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("jberglund-BSFT"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("kohsuke"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("kohsuke2"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("martinvanzijl"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("PauloMigAlmeida"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("Sage-Pierce"))); assertTrue(admins.stream().anyMatch(ghUser -> ghUser.getLogin().equals("timja"))); } @Test public void testCreateTeamWithRepoAccess() throws IOException { String REPO_NAME = "github-api"; GHOrganization org = gitHub.getOrganization(GITHUB_API_TEST_ORG); GHRepository repo = org.getRepository(REPO_NAME); // Create team with access to repository. Check access was granted. GHTeam team = org.createTeam(TEAM_NAME_CREATE, GHOrganization.Permission.PUSH, repo); Assert.assertTrue(team.getRepositories().containsKey(REPO_NAME)); assertEquals(Permission.PUSH.toString().toLowerCase(), team.getPermission()); } @Test public void testCreateTeam() throws IOException { String REPO_NAME = "github-api"; String DEFAULT_PERMISSION = Permission.PULL.toString().toLowerCase(); GHOrganization org = gitHub.getOrganization(GITHUB_API_TEST_ORG); GHRepository repo = org.getRepository(REPO_NAME); // Create team with no permission field. Verify that default permission is pull GHTeam team = org.createTeam(TEAM_NAME_CREATE, repo); Assert.assertTrue(team.getRepositories().containsKey(REPO_NAME)); assertEquals(DEFAULT_PERMISSION, team.getPermission()); } @Test public void testCreateVisibleTeam() throws IOException { GHOrganization org = gitHub.getOrganization(GITHUB_API_TEST_ORG); GHTeam team = org.createTeam(TEAM_NAME_CREATE).privacy(GHTeam.Privacy.CLOSED).create(); assertEquals(GHTeam.Privacy.CLOSED, team.getPrivacy()); } @Test public void testCreateAllArgsTeam() throws IOException { String REPO_NAME = "github-api"; GHOrganization org = gitHub.getOrganization(GITHUB_API_TEST_ORG); GHTeam team = org.createTeam(TEAM_NAME_CREATE) .description("Team description") .maintainers("bitwiseman") .repositories(REPO_NAME) .privacy(GHTeam.Privacy.CLOSED) .parentTeamId(3617900) .create(); assertEquals("Team description", team.getDescription()); assertEquals(GHTeam.Privacy.CLOSED, team.getPrivacy()); } }