package nl.minicom.gitolite.manager.models;
import java.util.Collection;
import java.util.Iterator;
import nl.jqno.equalsverifier.EqualsVerifier;
import nl.jqno.equalsverifier.Warning;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.Sets;
public class RepositoryTest {
private static final String REPOSITORY_NAME = "test-repo";
private Config config;
private User user1;
private User user2;
@Before
public void setUp() {
config = new Config(new Recorder());
user1 = new User("test-user-1", new Recorder());
user2 = new User("test-user-2", new Recorder());
}
@Test
public void testConstructorWithValidInputs() {
Repository repository = config.createRepository(REPOSITORY_NAME);
Assert.assertEquals(REPOSITORY_NAME, repository.getName());
}
@Test(expected = NullPointerException.class)
public void testConstructorWithNullAsName() {
new Repository(null, new Recorder());
}
@Test(expected = NullPointerException.class)
public void testConstructorWithNullAsRecorder() {
new Repository(REPOSITORY_NAME, null);
}
@Test(expected = IllegalArgumentException.class)
public void testConstructorWithEmptyName() {
new Repository("", new Recorder());
}
@Test
public void testThatNewRepositoryHasNoPermissions() {
Repository repository = new Repository(REPOSITORY_NAME, new Recorder());
Assert.assertEquals(0, repository.getPermissions().size());
}
@Test
public void testAddingUserWithReadOnlyPermission() {
Repository repository = new Repository(REPOSITORY_NAME, new Recorder());
repository.setPermission(user1, Permission.READ_ONLY);
Assert.assertEquals(Sets.newHashSet(Permission.READ_ONLY), repository.getPermissions().keySet());
Collection<Identifiable> entitiesWithReadOnlyPermission = repository.getPermissions().get(Permission.READ_ONLY);
Assert.assertEquals(Sets.newHashSet(user1), Sets.newHashSet(entitiesWithReadOnlyPermission));
}
@Test
public void testAddingTwoUsersWithReadOnlyPermission() {
Repository repository = new Repository(REPOSITORY_NAME, new Recorder());
repository.setPermission(user2, Permission.READ_ONLY);
repository.setPermission(user1, Permission.READ_ONLY);
Assert.assertEquals(Sets.newHashSet(Permission.READ_ONLY), repository.getPermissions().keySet());
Iterator<Identifiable> iter = repository.getPermissions().get(Permission.READ_ONLY).iterator();
Assert.assertEquals(user1, iter.next());
Assert.assertEquals(user2, iter.next());
}
@Test
public void testAddingTwoUsersWithDifferentPermission() {
Repository repository = new Repository(REPOSITORY_NAME, new Recorder());
repository.setPermission(user1, Permission.READ_ONLY);
repository.setPermission(user2, Permission.ALL);
Iterator<Permission> iter = repository.getPermissions().keySet().iterator();
Assert.assertEquals(Permission.ALL, iter.next());
Assert.assertEquals(Permission.READ_ONLY, iter.next());
}
@Test(expected = NullPointerException.class)
public void testThatSettingPermissionWhenUserIsNullExceptionIsThrown() {
User user = null;
Repository repository = new Repository(REPOSITORY_NAME, new Recorder());
repository.setPermission(user, Permission.ALL);
}
@Test(expected = NullPointerException.class)
public void testThatSettingPermissionWhenGroupIsNullExceptionIsThrown() {
Group group = null;
Repository repository = new Repository(REPOSITORY_NAME, new Recorder());
repository.setPermission(group, Permission.ALL);
}
@Test(expected = NullPointerException.class)
public void testThatSettingPermissionWhenPermissionIsNullExceptionIsThrown() {
Repository repository = new Repository(REPOSITORY_NAME, new Recorder());
repository.setPermission(user1, null);
}
@Test
public void testEqualsMethod() {
EqualsVerifier.forClass(Repository.class).suppress(Warning.STRICT_INHERITANCE).verify();
}
}