From cb285cbfddfc0b633d6b8cdb4dc0d2bd2b8b51ef Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 05 Jan 2012 17:34:05 -0500 Subject: [PATCH] Fixed bug in receive hook for repositories in subfolders --- tests/com/gitblit/tests/UserServiceTest.java | 142 +++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 136 insertions(+), 6 deletions(-) diff --git a/tests/com/gitblit/tests/UserServiceTest.java b/tests/com/gitblit/tests/UserServiceTest.java index 3dfdf7a..b1f0247 100644 --- a/tests/com/gitblit/tests/UserServiceTest.java +++ b/tests/com/gitblit/tests/UserServiceTest.java @@ -15,44 +15,61 @@ */ package com.gitblit.tests; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import java.io.File; import java.io.IOException; -import junit.framework.TestCase; +import org.junit.Test; import com.gitblit.ConfigUserService; import com.gitblit.FileUserService; import com.gitblit.IUserService; +import com.gitblit.models.TeamModel; import com.gitblit.models.UserModel; -public class UserServiceTest extends TestCase { +public class UserServiceTest { + @Test public void testFileUserService() throws IOException { File file = new File("us-test.properties"); file.delete(); - test(new FileUserService(file)); + IUserService service = new FileUserService(file); + testUsers(service); + testTeams(service); file.delete(); } + @Test public void testConfigUserService() throws IOException { File file = new File("us-test.conf"); file.delete(); - test(new ConfigUserService(file)); + IUserService service = new ConfigUserService(file); + testUsers(service); + testTeams(service); file.delete(); } - protected void test(IUserService service) { + protected void testUsers(IUserService service) { UserModel admin = service.getUserModel("admin"); assertTrue(admin == null); - // add admin + // add admin and admins team + TeamModel admins = new TeamModel("admins"); + admins.mailingLists.add("admins@localhost.com"); + admin = new UserModel("admin"); admin.password = "password"; admin.canAdmin = true; admin.excludeFromFederation = true; + admin.teams.add(admins); + service.updateUserModel(admin); admin = null; + admins = null; // add new user UserModel newUser = new UserModel("test"); @@ -97,4 +114,117 @@ testUser = service.getUserModel("test"); assertTrue(testUser.hasRepository("newrepo1")); } + + protected void testTeams(IUserService service) { + + // confirm we have 1 team (admins) + assertEquals(1, service.getAllTeamNames().size()); + assertEquals("admins", service.getAllTeamNames().get(0)); + + // remove newrepo1 from test user + // now test user has no repositories + UserModel user = service.getUserModel("test"); + user.repositories.clear(); + service.updateUserModel(user); + user = service.getUserModel("test"); + assertEquals(0, user.repositories.size()); + assertFalse(user.canAccessRepository("newrepo1")); + assertFalse(user.canAccessRepository("NEWREPO1")); + + // create test team and add test user and newrepo1 + TeamModel team = new TeamModel("testteam"); + team.addUser("test"); + team.addRepository("newrepo1"); + service.updateTeamModel(team); + + // confirm 1 user and 1 repo + team = service.getTeamModel("testteam"); + assertEquals(1, team.repositories.size()); + assertEquals(1, team.users.size()); + + // confirm team membership + user = service.getUserModel("test"); + assertEquals(0, user.repositories.size()); + assertEquals(1, user.teams.size()); + + // confirm team access + assertTrue(team.hasRepository("newrepo1")); + assertTrue(user.hasTeamAccess("newrepo1")); + assertTrue(team.hasRepository("NEWREPO1")); + assertTrue(user.hasTeamAccess("NEWREPO1")); + + // rename the team and add new repository + team.addRepository("newrepo2"); + team.name = "testteam2"; + service.updateTeamModel("testteam", team); + + team = service.getTeamModel("testteam2"); + user = service.getUserModel("test"); + + // confirm user and team can access newrepo2 + assertEquals(2, team.repositories.size()); + assertTrue(team.hasRepository("newrepo2")); + assertTrue(user.hasTeamAccess("newrepo2")); + assertTrue(team.hasRepository("NEWREPO2")); + assertTrue(user.hasTeamAccess("NEWREPO2")); + + // delete testteam2 + service.deleteTeam("testteam2"); + team = service.getTeamModel("testteam2"); + user = service.getUserModel("test"); + + // confirm team does not exist and user can not access newrepo1 and 2 + assertEquals(null, team); + assertFalse(user.canAccessRepository("newrepo1")); + assertFalse(user.canAccessRepository("newrepo2")); + + // create new team and add it to user + // this tests the inverse team creation/team addition + team = new TeamModel("testteam"); + team.addRepository("NEWREPO1"); + team.addRepository("NEWREPO2"); + user.teams.add(team); + service.updateUserModel(user); + + // confirm the inverted team addition + user = service.getUserModel("test"); + team = service.getTeamModel("testteam"); + assertTrue(user.hasTeamAccess("newrepo1")); + assertTrue(user.hasTeamAccess("newrepo2")); + assertTrue(team.hasUser("test")); + + // drop testteam from user and add nextteam to user + team = new TeamModel("nextteam"); + team.addRepository("NEWREPO1"); + team.addRepository("NEWREPO2"); + user.teams.clear(); + user.teams.add(team); + service.updateUserModel(user); + + // confirm implicit drop + user = service.getUserModel("test"); + team = service.getTeamModel("testteam"); + assertTrue(user.hasTeamAccess("newrepo1")); + assertTrue(user.hasTeamAccess("newrepo2")); + assertFalse(team.hasUser("test")); + team = service.getTeamModel("nextteam"); + assertTrue(team.hasUser("test")); + + // delete the user and confirm team no longer has user + service.deleteUser("test"); + team = service.getTeamModel("testteam"); + assertFalse(team.hasUser("test")); + + // delete both teams + service.deleteTeam("testteam"); + service.deleteTeam("nextteam"); + + // assert we still have the admins team + assertEquals(1, service.getAllTeamNames().size()); + assertEquals("admins", service.getAllTeamNames().get(0)); + + team = service.getTeamModel("admins"); + assertEquals(1, team.mailingLists.size()); + assertTrue(team.mailingLists.contains("admins@localhost.com")); + } } \ No newline at end of file -- Gitblit v1.9.1