diff --git a/ccm-core/findbugs-exclude.xml b/ccm-core/findbugs-exclude.xml
new file mode 100644
index 000000000..9056b7d08
--- /dev/null
+++ b/ccm-core/findbugs-exclude.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-core/pom.xml b/ccm-core/pom.xml
index 3c57f1520..7a6c65041 100644
--- a/ccm-core/pom.xml
+++ b/ccm-core/pom.xml
@@ -341,6 +341,9 @@
org.codehaus.mojo
findbugs-maven-plugin
3.0.1
+
+ findbugs-exclude.xml
+
org.apache.maven.plugins
@@ -370,6 +373,54 @@
/rulesets/java/unnecessary.xml
/rulesets/java/unusedcode.xml
+
+ src/main/java/com/arsdigita
+
+
+ **/AbstractConfig.java
+ **/AbstractParameter.java
+ **/AbstractParameterContext
+ **/Assert.java
+ **/Classes.java
+ **/CCMApplicationContextListener.java
+ **/CCMResourceManager.java
+ **/ClassParameterReader.java
+ **/CompoundParameterReader.java
+ **/ConfigError.java
+ **/ConfigRegistry.java
+ **/Converters.java
+ **/CSVParameterReader.java
+ **/DateFormatter.java
+ **/DataFormatterConfig.java
+ **/DateTimeFormatter
+ **/Document.java
+ **/Element.java
+ **/EmailParameter.java
+ **/EnumerationParameter.java
+ **/ErrorList.java
+ **/ExceptionUnwrapper.java
+ **/Exceptions.java
+ **/FileParameter.java
+ **/FullDateFormatter.java
+ **/IntegerParameter.java
+ **/JavaPropertyReader.java
+ **/JavaPropertyWriter.java
+ **/KernelConfig.java
+ **/LockableImpl.java
+ **/MapParameter.java
+ **/Parameter.java
+ **/ParameterError.java
+ **/ParameterException.java
+ **/RegistryConfig.java
+ **/ResourceParameter.java
+ **/SecurityConfig.java
+ **/SecurityHelper.java
+ **/SingletonParameter.java
+ **/StringParameter.java
+ **/TimeFormatter.java
+ **/UncheckedWrapperException
+ **/XML.java
+
diff --git a/ccm-core/src/main/java/org/libreccm/core/Permission.java b/ccm-core/src/main/java/org/libreccm/core/Permission.java
index feeeecb10..5e44c3ff4 100644
--- a/ccm-core/src/main/java/org/libreccm/core/Permission.java
+++ b/ccm-core/src/main/java/org/libreccm/core/Permission.java
@@ -51,12 +51,26 @@ import javax.xml.bind.annotation.XmlRootElement;
query = "SELECT p FROM Permission p WHERE p.grantee = :subject"),
@NamedQuery(name = "findPermissionsForUser",
query = "SELECT p FROM Permission p "
- + "WHERE p.grantee = :user "
- + " OR p.grantee IN (SELECT g "
- + " FROM Group g JOIN g.members m"
- + " WHERE m.user = :user)"),
+ + "WHERE p.grantee = :user "
+ + " OR p.grantee IN (SELECT g "
+ + " FROM Group g JOIN g.members m"
+ + " WHERE m.user = :user)"),
@NamedQuery(name = "findPermissionsForCcmObject",
- query = "SELECT p FROM Permission p WHERE p.object = :object")
+ query = "SELECT p FROM Permission p WHERE p.object = :object"),
+ @NamedQuery(name = "findPermissionsByUserObjectAndPrivilege",
+ query = "SELECT p FROM Permission p "
+ + "WHERE (p.grantee = :user"
+ + " OR p.grantee IN (SELECT g "
+ + " FROM Group g JOIN g.members m"
+ + " WHERE m.user = :user))"
+ + " AND p.grantedPrivilege = :privilege"
+ + " AND p.object = :object"),
+ @NamedQuery(name = "findPermissionsBySubjectObjectAndPrivilege",
+ query = "SELECT p FROM Permission p "
+ + "WHERE p.grantee = :subject"
+ + " AND p.grantedPrivilege = :privilege"
+ + " AND p.object = :object")
+
})
//Can't reduce complexity yet
@SuppressWarnings({"PMD.CyclomaticComplexity",
@@ -164,7 +178,7 @@ public class Permission implements Serializable {
public int hashCode() {
int hash = 3;
hash
- = 31 * hash + (int) (permissionId ^ (permissionId >>> 32));
+ = 31 * hash + (int) (permissionId ^ (permissionId >>> 32));
hash = 31 * hash + Objects.hashCode(grantee);
hash = 31 * hash + Objects.hashCode(grantedPrivilege);
hash = 31 * hash + Objects.hashCode(object);
@@ -221,14 +235,14 @@ public class Permission implements Serializable {
@Override
public String toString() {
return String.format("%s{ "
- + "permissionId = %d, "
- + "grantee = %s, "
- + "grantedPrivilege = %s, "
- + "object = %s, "
- + "creationUser = %s,"
- + "creationDate = %tF %Jens Pelzetter
*/
@RequestScoped
public class PermissionRepository
- extends AbstractEntityRepository {
+ extends AbstractEntityRepository {
@Inject
- private EntityManager entityManager;
+ private transient EntityManager entityManager;
+ /**
+ * {@inheritDoc}
+ *
+ * @return {@inheritDoc}
+ */
@Override
public Class getEntityClass() {
return Permission.class;
}
+ /**
+ * {@inheritDoc }
+ *
+ * @param entity {@inheritDoc }
+ * @return {@inheritDoc }
+ */
@Override
public boolean isNew(final Permission entity) {
if (entity == null) {
- throw new UnsupportedOperationException(
- "Entity to save can't be null");
+ throw new IllegalArgumentException("Entity to save can't be null");
}
return entity.getPermissionId() == 0;
}
+ /**
+ * Finds all permissions granted to a specific subject (either a user or
+ * group).
+ *
+ * Please note that this method does not find permissions
+ * granted to a user by the groups a user is member of. To get these
+ * permissions also use the
+ * {@link #findPermissionsForUser(org.libreccm.core.User)} method instead.
+ *
+ * @param subject The subject.
+ * @return All permissions granted to the provided subject.
+ */
public List findPermissionsForSubject(final Subject subject) {
if (subject == null) {
throw new IllegalArgumentException(
- "Illegal value 'null' provided for parameter subject.");
+ "Illegal value 'null' provided for parameter subject.");
}
final TypedQuery query = entityManager.createNamedQuery(
- "findPermissionsForSubject", Permission.class);
+ "findPermissionsForSubject", Permission.class);
query.setParameter("subject", subject);
return query.getResultList();
}
+ /**
+ * Finds a permissions granted to a user and to the groups the user is
+ * member of.
+ *
+ * If you only need the permissions assigned to the user itself use the
+ * {@link #findPermissionsForSubject(org.libreccm.core.Subject)} method.
+ *
+ * @param user The user.
+ * @return All permissions granted to the user or the groups the user is
+ * member of.
+ */
public List findPermissionsForUser(final User user) {
if (user == null) {
throw new IllegalArgumentException(
- "Illegal value 'null' provided for parameter user");
+ "Illegal value 'null' provided for parameter user");
}
final TypedQuery query = entityManager.createNamedQuery(
- "findPermissionsForUser", Permission.class);
+ "findPermissionsForUser", Permission.class);
query.setParameter("user", user);
-
+
return query.getResultList();
}
+ /**
+ * Finds all permissions granted on a object.
+ *
+ * @param object The object.
+ * @return All permissions granted on the object.
+ */
public List findPermissionsForCcmObject(final CcmObject object) {
if (object == null) {
throw new IllegalArgumentException(
- "Illegal value 'null' provided for parameter object.");
+ "Illegal value 'null' provided for parameter object.");
}
final TypedQuery query = entityManager.createNamedQuery(
- "findPermissionsForCcmObject", Permission.class);
+ "findPermissionsForCcmObject", Permission.class);
query.setParameter("object", object);
return query.getResultList();
}
+// public List findPermissionForUserPrivilegeAndObject(
+// final User user,
+// final Privilege privilege,
+// final CcmObject object) {
+// if (user == null) {
+// throw new IllegalArgumentException(
+// "Illegal value 'null' provided for parameter user");
+// }
+//
+// if (privilege == null) {
+// throw new IllegalArgumentException(
+// "Illegal value 'null' provided for parameter privilege");
+// }
+//
+// final TypedQuery query = entityManager.createNamedQuery(
+// "findPermissionsForUserPrivilegeAndObject", Permission.class);
+//
+// }
}
diff --git a/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java b/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java
index b93488033..bed9f9e55 100644
--- a/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java
+++ b/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java
@@ -54,6 +54,9 @@ public class DatasetsTest extends DatasetsVerifier {
"/datasets/org/libreccm/core/GroupRepositoryTest/after-delete.json",
"/datasets/org/libreccm/core/GroupRepositoryTest/after-save-changed.json",
"/datasets/org/libreccm/core/GroupRepositoryTest/after-save-new.json",
+ "/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json",
+ "/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json",
+ "/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json",
"/datasets/org/libreccm/core/PermissionRepositoryTest/data.json",
"/datasets/org/libreccm/core/RoleRepositoryTest/data.json",
"/datasets/org/libreccm/core/RoleRepositoryTest/after-delete.json",
diff --git a/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java b/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java
index 48a1ea654..b4467bdf8 100644
--- a/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java
+++ b/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java
@@ -51,6 +51,10 @@ import java.util.List;
import java.util.Set;
import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import org.jboss.arquillian.container.test.api.ShouldThrowException;
+import org.jboss.arquillian.persistence.ShouldMatchDataSet;
/**
*
@@ -74,6 +78,9 @@ public class PermissionRepositoryTest {
@Inject
private transient CcmObjectRepository ccmObjectRepository;
+ @Inject
+ private transient EntityManager entityManager;
+
public PermissionRepositoryTest() {
}
@@ -96,10 +103,10 @@ public class PermissionRepositoryTest {
@Deployment
public static WebArchive createDeployment() {
final PomEquippedResolveStage pom = Maven
- .resolver()
- .loadPomFromFile("pom.xml");
+ .resolver()
+ .loadPomFromFile("pom.xml");
final PomEquippedResolveStage dependencies = pom.
- importCompileAndRuntimeDependencies();
+ importCompileAndRuntimeDependencies();
final File[] libs = dependencies.resolve().withTransitivity().asFile();
for (File lib : libs) {
@@ -108,31 +115,31 @@ public class PermissionRepositoryTest {
}
return ShrinkWrap
- .create(WebArchive.class,
- "LibreCCM-org.libreccm.core.UserRepositoryTest.war")
- .addPackage(User.class.getPackage())
- .addPackage(org.libreccm.web.Application.class.getPackage())
- .addPackage(org.libreccm.categorization.Category.class.
- getPackage())
- .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()).
- addPackage(org.libreccm.jpa.EntityManagerProducer.class
- .getPackage())
- .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class
- .getPackage())
- .addPackage(org.libreccm.testutils.EqualsVerifier.class.
- getPackage())
- .addPackage(org.libreccm.tests.categories.IntegrationTest.class
- .getPackage())
- .addAsLibraries(libs)
- .addAsResource("test-persistence.xml",
- "META-INF/persistence.xml")
- .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml")
- .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml");
+ .create(WebArchive.class,
+ "LibreCCM-org.libreccm.core.UserRepositoryTest.war")
+ .addPackage(User.class.getPackage())
+ .addPackage(org.libreccm.web.Application.class.getPackage())
+ .addPackage(org.libreccm.categorization.Category.class.
+ getPackage())
+ .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()).
+ addPackage(org.libreccm.jpa.EntityManagerProducer.class
+ .getPackage())
+ .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class
+ .getPackage())
+ .addPackage(org.libreccm.testutils.EqualsVerifier.class.
+ getPackage())
+ .addPackage(org.libreccm.tests.categories.IntegrationTest.class
+ .getPackage())
+ .addAsLibraries(libs)
+ .addAsResource("test-persistence.xml",
+ "META-INF/persistence.xml")
+ .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml")
+ .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml");
}
@Test
@UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@InSequence(10)
public void findPermissionsForSubject() {
final User jdoe = userRepository.findByScreenName("jdoe");
@@ -148,7 +155,7 @@ public class PermissionRepositoryTest {
assertThat(authors, is(not(nullValue())));
final List permissionsJdoe = permissionRepository
- .findPermissionsForSubject(jdoe);
+ .findPermissionsForSubject(jdoe);
assertThat(permissionsJdoe.size(), is(1));
assertThat(permissionsJdoe.get(0).getObject().getDisplayName(),
is(equalTo("Test Object 2")));
@@ -156,18 +163,18 @@ public class PermissionRepositoryTest {
is(equalTo("read")));
final List permissionsMmuster = permissionRepository
- .findPermissionsForSubject(mmuster);
+ .findPermissionsForSubject(mmuster);
assertThat(permissionsMmuster.size(), is(0));
final List permissionsAdmins = permissionRepository
- .findPermissionsForSubject(admins);
+ .findPermissionsForSubject(admins);
assertThat(permissionsAdmins.size(), is(1));
assertThat(permissionsAdmins.get(0).getObject(), is(nullValue()));
assertThat(permissionsAdmins.get(0).getGrantedPrivilege().getPrivilege(),
is("admin"));
final List permissionsUsers = permissionRepository
- .findPermissionsForSubject(users);
+ .findPermissionsForSubject(users);
assertThat(permissionsUsers.size(), is(1));
assertThat(permissionsUsers.get(0).getObject().getDisplayName(),
is(equalTo("Test Object 1")));
@@ -175,7 +182,7 @@ public class PermissionRepositoryTest {
is(equalTo("read")));
final List permissionsAuthors = permissionRepository
- .findPermissionsForSubject(authors);
+ .findPermissionsForSubject(authors);
assertThat(permissionsAuthors.size(), is(2));
assertThat(permissionsAuthors.get(0).getObject().getDisplayName(),
is(equalTo("Test Object 1")));
@@ -183,16 +190,25 @@ public class PermissionRepositoryTest {
is(equalTo("Test Object 1")));
final Set privileges = new HashSet<>();
privileges.add(permissionsAuthors.get(0).getGrantedPrivilege()
- .getPrivilege());
+ .getPrivilege());
privileges.add(permissionsAuthors.get(1).getGrantedPrivilege()
- .getPrivilege());
+ .getPrivilege());
assertThat(privileges, hasItem("read"));
assertThat(privileges, hasItem("write"));
}
+ @Test(expected = IllegalArgumentException.class)
+ @UsingDataSet(
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ @ShouldThrowException(IllegalArgumentException.class)
+ @InSequence(11)
+ public void findPermissionsForNullSubject() {
+ permissionRepository.findPermissionsForSubject(null);
+ }
+
@Test
@UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@InSequence(20)
public void findPermissionsForUser() {
final User jdoe = userRepository.findByScreenName("jdoe");
@@ -201,7 +217,7 @@ public class PermissionRepositoryTest {
assertThat(mmuster, is(not(nullValue())));
final List jdoePermissions = permissionRepository
- .findPermissionsForUser(jdoe);
+ .findPermissionsForUser(jdoe);
assertThat(jdoePermissions.size(), is(4));
jdoePermissions.sort(new Comparator() {
@@ -209,19 +225,20 @@ public class PermissionRepositoryTest {
public int compare(final Permission permission1,
final Permission permission2) {
int result = permission1.getGrantedPrivilege().getPrivilege()
- .compareToIgnoreCase(permission2.getGrantedPrivilege()
- .getPrivilege());
+ .compareToIgnoreCase(permission2.getGrantedPrivilege()
+ .getPrivilege());
if (result == 0) {
result = permission1.getObject().getDisplayName().compareTo(
- permission2.getObject().getDisplayName());
+ permission2.getObject().getDisplayName());
} else {
return result;
}
if (result == 0) {
return permission1.getGrantee().getClass().getName()
- .compareTo(permission2.getGrantee().getClass().getName());
+ .compareTo(permission2.getGrantee().getClass().
+ getName());
} else {
return result;
}
@@ -248,17 +265,26 @@ public class PermissionRepositoryTest {
is(equalTo("Test Object 1")));
final List mmusterPermissions = permissionRepository
- .findPermissionsForUser(mmuster);
+ .findPermissionsForUser(mmuster);
assertThat(mmusterPermissions.size(), is(1));
assertThat(mmusterPermissions.get(0).getGrantedPrivilege()
- .getPrivilege(),
+ .getPrivilege(),
is(equalTo("admin")));
assertThat(mmusterPermissions.get(0).getObject(), is(nullValue()));
}
+ @Test(expected = IllegalArgumentException.class)
+ @UsingDataSet(
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ @ShouldThrowException(IllegalArgumentException.class)
+ @InSequence(21)
+ public void findPermissionsForNullUser() {
+ permissionRepository.findPermissionsForUser(null);
+ }
+
@Test
@UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@InSequence(30)
public void findPermissionsForCcmObject() {
final CcmObject object1 = ccmObjectRepository.findById(-10L);
@@ -266,7 +292,7 @@ public class PermissionRepositoryTest {
final CcmObject object3 = ccmObjectRepository.findById(-30L);
final List object1Permissions = permissionRepository
- .findPermissionsForCcmObject(object1);
+ .findPermissionsForCcmObject(object1);
assertThat(object1Permissions.size(), is(3));
object1Permissions.sort(new Comparator() {
@@ -279,21 +305,21 @@ public class PermissionRepositoryTest {
});
assertThat(object1Permissions.get(0).getGrantedPrivilege()
- .getPrivilege(),
+ .getPrivilege(),
is(equalTo("read")));
assertThat(object1Permissions.get(0).getGrantee(),
is(instanceOf(Group.class)));
assertThat(((Group) object1Permissions.get(0).getGrantee()).getName(),
is(equalTo("authors")));
assertThat(object1Permissions.get(1).getGrantedPrivilege()
- .getPrivilege(),
+ .getPrivilege(),
is(equalTo("write")));
assertThat(object1Permissions.get(1).getGrantee(),
is(instanceOf(Group.class)));
assertThat(((Group) object1Permissions.get(1).getGrantee()).getName(),
is(equalTo("authors")));
assertThat(object1Permissions.get(2).getGrantedPrivilege()
- .getPrivilege(),
+ .getPrivilege(),
is(equalTo("read")));
assertThat(object1Permissions.get(2).getGrantee(),
is(instanceOf(Group.class)));
@@ -301,20 +327,115 @@ public class PermissionRepositoryTest {
is(equalTo("users")));
final List object2Permissions = permissionRepository
- .findPermissionsForCcmObject(object2);
+ .findPermissionsForCcmObject(object2);
assertThat(object2Permissions.size(), is(1));
assertThat(object2Permissions.get(0).getGrantedPrivilege()
- .getPrivilege(),
+ .getPrivilege(),
is(equalTo("read")));
assertThat(object2Permissions.get(0).getGrantee(),
is(instanceOf(User.class)));
assertThat(((User) object2Permissions.get(0).getGrantee())
- .getScreenName(),
+ .getScreenName(),
is(equalTo("jdoe")));
final List object3Permissions = permissionRepository
- .findPermissionsForCcmObject(object3);
+ .findPermissionsForCcmObject(object3);
assertThat(object3Permissions, is(empty()));
}
+ @Test(expected = IllegalArgumentException.class)
+ @UsingDataSet(
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ @ShouldThrowException(IllegalArgumentException.class)
+ @InSequence(31)
+ public void findPermissionsForNullObject() {
+ permissionRepository.findPermissionsForCcmObject(null);
+ }
+
+ @Test
+ @UsingDataSet(
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ @ShouldMatchDataSet(value = "datasets/org/libreccm/core/"
+ + "PermissionRepositoryTest/after-save-new.json",
+ excludeColumns = {"permission_id"})
+ @InSequence(40)
+ public void saveNewPermission() {
+ final User mmuster = userRepository.findByScreenName("mmuster");
+
+ final TypedQuery query1 = entityManager.createQuery(
+ "SELECT p FROM Privilege p WHERE p.privilege = 'read'",
+ Privilege.class);
+ final TypedQuery query2 = entityManager.createQuery(
+ "SELECT p FROM Privilege p WHERE p.privilege = 'write'",
+ Privilege.class);
+
+ final CcmObject object = ccmObjectRepository.findById(-40L);
+
+ final Privilege read = query1.getSingleResult();
+ final Privilege write = query2.getSingleResult();
+
+ assertThat(mmuster, is(not(nullValue())));
+ assertThat(read, is(not(nullValue())));
+ assertThat(write, is(not(nullValue())));
+ assertThat(object, is(not(nullValue())));
+
+ final Permission permission1 = new Permission();
+ permission1.setGrantee(mmuster);
+ permission1.setGrantedPrivilege(read);
+ permission1.setObject(object);
+
+ final Permission permission2 = new Permission();
+ permission2.setGrantee(mmuster);
+ permission2.setGrantedPrivilege(write);
+ permission2.setObject(object);
+
+ permissionRepository.save(permission1);
+ permissionRepository.save(permission2);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ @ShouldThrowException(IllegalArgumentException.class)
+ @InSequence(41)
+ public void saveNullPermission() {
+ permissionRepository.save(null);
+ }
+
+ @Test
+ @UsingDataSet(
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ @ShouldMatchDataSet(value = "datasets/org/libreccm/core/"
+ + "PermissionRepositoryTest/after-save-changed.json",
+ excludeColumns = {"permission_id"})
+ @InSequence(50)
+ public void saveChangedPermission() {
+ final Permission permission = entityManager.find(Permission.class, -40L);
+ final Group users = groupRepository.findByGroupName("users");
+
+ assertThat(permission, is(not(nullValue())));
+ assertThat(users, is(not(nullValue())));
+
+ permission.setGrantee(users);
+
+ permissionRepository.save(permission);
+ }
+
+ @Test
+ @UsingDataSet(
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ @ShouldMatchDataSet(value = "datasets/org/libreccm/core/"
+ + "PermissionRepositoryTest/after-delete.json",
+ excludeColumns = {"permission_id"})
+ @InSequence(60)
+ public void deletePermission() {
+ final Permission permission = entityManager.find(Permission.class, -35L);
+
+ permissionRepository.delete(permission);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ @ShouldThrowException(IllegalArgumentException.class)
+ @InSequence(61)
+ public void deleteNullPermission() {
+ permissionRepository.delete(null);
+ }
}
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json
new file mode 100644
index 000000000..f7a7c3969
--- /dev/null
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json
@@ -0,0 +1,158 @@
+{
+ "subjects":
+ [
+ {
+ "subject_id": -10
+ },
+ {
+ "subject_id": -20
+ },
+ {
+ "subject_id": -30
+ },
+ {
+ "subject_id": -40
+ },
+ {
+ "subject_id": -50
+ }
+ ],
+ "ccm_users":
+ [
+ {
+ "banned": false,
+ "hash_algorithm": "SHA-512",
+ "family_name": "Doe",
+ "given_name": "John",
+ "password": "C+o2w6mp+eLrbluMEgKMVSdP50A9BMethXN8R3yihtkbzt7WfWsde2nmq/t5gq6im3J8i3jw4Y3YrKHou8JQ2A==",
+ "password_reset_required": false,
+ "salt": "Fu8FPgqAal4GZp1hDjkOB+t6ITRCcO7HBoN5Xqf29UnVj5NUdUFZRTyKYMBEx6JmZGmHcMDG9OGVCKcEM9oyScSRreJs4B51wM44NM6KeRwbCf+VhBn14DkBrl40ygraNf+AJacKpMyCpFI0O/Am7mMDWL4flskBsylkxaQn3vKfzgN5MVG2szW//I6Q6YEH9AuL8LauS6fKaVynMzzu3xzD8Hjqvvlnzym898eom2lqScPfg5g4e8Ww13HCHAYe6twupAW/BjUNax5HSioEisZN/P1UGrde8uFEj+hbbavrWYZuilPuEu25+/98jyXx6542agqrWN8j0SFYcIyOgA==",
+ "screen_name": "jdoe",
+ "subject_id": -10
+ },
+ {
+ "banned": false,
+ "hash_algorithm": "SHA-512",
+ "family_name": "Mustermann",
+ "given_name": "Max",
+ "password": "1c9626af429a6291766d15cbfb38689bd8d49450520765973de70aecaf644b7d4fda711266ba9ec8fb6df30c8ab391d40330829aa85adf371bcde6b4c9bc01e6",
+ "password_reset_required": false,
+ "salt": "fjiajhigafgapoa",
+ "screen_name": "mmuster",
+ "subject_id": -50
+ }
+ ],
+ "ccm_groups":
+ [
+ {
+ "name": "admins",
+ "subject_id": -20
+ },
+ {
+ "name": "users",
+ "subject_id": -30
+ },
+ {
+ "name": "authors",
+ "subject_id": -40
+ }
+ ],
+ "user_email_addresses":
+ [
+ {
+ "user_id": -10,
+ "email_address": "john.doe@example.com",
+ "bouncing": false,
+ "verified": true
+ },
+ {
+ "user_id": -50,
+ "email_address": "max.mustermann@example.com",
+ "bouncing": false,
+ "verified": true
+ }
+ ],
+ "group_memberships":
+ [
+ {
+ "membership_id": -10,
+ "group_subject_id": -30,
+ "user_subject_id": -10
+ },
+ {
+ "membership_id": -20,
+ "group_subject_id": -40,
+ "user_subject_id": -10
+ },
+ {
+ "membership_id": -30,
+ "group_subject_id": -20,
+ "user_subject_id": -50
+ }
+ ],
+ "ccm_privileges":
+ [
+ {
+ "privilege_id": -10,
+ "privilege": "admin"
+ },
+ {
+ "privilege_id": -20,
+ "privilege": "read"
+ },
+ {
+ "privilege_id": -30,
+ "privilege": "write"
+ }
+ ],
+ "ccm_objects":
+ [
+ {
+ "object_id": -10,
+ "display_name": "Test Object 1"
+ },
+ {
+ "object_id": -20,
+ "display_name": "Test Object 2"
+ },
+ {
+ "object_id": -30,
+ "display_name": "Test Object 3"
+ },
+ {
+ "object_id": -40,
+ "display_name": "Test Object 4"
+ }
+ ],
+ "permissions":
+ [
+ {
+ "permission_id": -10,
+ "creation_date": "2015-07-29 14:32:46",
+ "granted_privilege_id": -10,
+ "grantee_id": -20
+ },
+ {
+ "permission_id": -20,
+ "creation_date": "2015-07-29 14:34:30",
+ "granted_privilege_id": -20,
+ "grantee_id": -30,
+ "object_id": -10
+ },
+ {
+ "permission_id": -30,
+ "creation_date": "2015-07-29 14:36:05",
+ "granted_privilege_id": -30,
+ "grantee_id": -40,
+ "object_id": -10
+ },
+ {
+ "permission_id": -40,
+ "creation_date": "2015-07-29 14:37:22",
+ "granted_privilege_id": -20,
+ "grantee_id": -10,
+ "object_id": -20
+ }
+ ]
+
+}
\ No newline at end of file
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json
new file mode 100644
index 000000000..938d78e6e
--- /dev/null
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json
@@ -0,0 +1,165 @@
+{
+ "subjects":
+ [
+ {
+ "subject_id": -10
+ },
+ {
+ "subject_id": -20
+ },
+ {
+ "subject_id": -30
+ },
+ {
+ "subject_id": -40
+ },
+ {
+ "subject_id": -50
+ }
+ ],
+ "ccm_users":
+ [
+ {
+ "banned": false,
+ "hash_algorithm": "SHA-512",
+ "family_name": "Doe",
+ "given_name": "John",
+ "password": "C+o2w6mp+eLrbluMEgKMVSdP50A9BMethXN8R3yihtkbzt7WfWsde2nmq/t5gq6im3J8i3jw4Y3YrKHou8JQ2A==",
+ "password_reset_required": false,
+ "salt": "Fu8FPgqAal4GZp1hDjkOB+t6ITRCcO7HBoN5Xqf29UnVj5NUdUFZRTyKYMBEx6JmZGmHcMDG9OGVCKcEM9oyScSRreJs4B51wM44NM6KeRwbCf+VhBn14DkBrl40ygraNf+AJacKpMyCpFI0O/Am7mMDWL4flskBsylkxaQn3vKfzgN5MVG2szW//I6Q6YEH9AuL8LauS6fKaVynMzzu3xzD8Hjqvvlnzym898eom2lqScPfg5g4e8Ww13HCHAYe6twupAW/BjUNax5HSioEisZN/P1UGrde8uFEj+hbbavrWYZuilPuEu25+/98jyXx6542agqrWN8j0SFYcIyOgA==",
+ "screen_name": "jdoe",
+ "subject_id": -10
+ },
+ {
+ "banned": false,
+ "hash_algorithm": "SHA-512",
+ "family_name": "Mustermann",
+ "given_name": "Max",
+ "password": "1c9626af429a6291766d15cbfb38689bd8d49450520765973de70aecaf644b7d4fda711266ba9ec8fb6df30c8ab391d40330829aa85adf371bcde6b4c9bc01e6",
+ "password_reset_required": false,
+ "salt": "fjiajhigafgapoa",
+ "screen_name": "mmuster",
+ "subject_id": -50
+ }
+ ],
+ "ccm_groups":
+ [
+ {
+ "name": "admins",
+ "subject_id": -20
+ },
+ {
+ "name": "users",
+ "subject_id": -30
+ },
+ {
+ "name": "authors",
+ "subject_id": -40
+ }
+ ],
+ "user_email_addresses":
+ [
+ {
+ "user_id": -10,
+ "email_address": "john.doe@example.com",
+ "bouncing": false,
+ "verified": true
+ },
+ {
+ "user_id": -50,
+ "email_address": "max.mustermann@example.com",
+ "bouncing": false,
+ "verified": true
+ }
+ ],
+ "group_memberships":
+ [
+ {
+ "membership_id": -10,
+ "group_subject_id": -30,
+ "user_subject_id": -10
+ },
+ {
+ "membership_id": -20,
+ "group_subject_id": -40,
+ "user_subject_id": -10
+ },
+ {
+ "membership_id": -30,
+ "group_subject_id": -20,
+ "user_subject_id": -50
+ }
+ ],
+ "ccm_privileges":
+ [
+ {
+ "privilege_id": -10,
+ "privilege": "admin"
+ },
+ {
+ "privilege_id": -20,
+ "privilege": "read"
+ },
+ {
+ "privilege_id": -30,
+ "privilege": "write"
+ }
+ ],
+ "ccm_objects":
+ [
+ {
+ "object_id": -10,
+ "display_name": "Test Object 1"
+ },
+ {
+ "object_id": -20,
+ "display_name": "Test Object 2"
+ },
+ {
+ "object_id": -30,
+ "display_name": "Test Object 3"
+ },
+ {
+ "object_id": -40,
+ "display_name": "Test Object 4"
+ }
+ ],
+ "permissions":
+ [
+ {
+ "permission_id": -10,
+ "creation_date": "2015-07-29 14:32:46",
+ "granted_privilege_id": -10,
+ "grantee_id": -20
+ },
+ {
+ "permission_id": -20,
+ "creation_date": "2015-07-29 14:34:30",
+ "granted_privilege_id": -20,
+ "grantee_id": -30,
+ "object_id": -10
+ },
+ {
+ "permission_id": -30,
+ "creation_date": "2015-07-29 14:36:05",
+ "granted_privilege_id": -30,
+ "grantee_id": -40,
+ "object_id": -10
+ },
+ {
+ "permission_id": -35,
+ "creation_date": "2015-07-29 14:57:55",
+ "granted_privilege_id": -20,
+ "grantee_id": -40,
+ "object_id": -10
+ },
+ {
+ "permission_id": -40,
+ "creation_date": "2015-07-29 14:37:22",
+ "granted_privilege_id": -20,
+ "grantee_id": -30,
+ "object_id": -20
+ }
+ ]
+
+}
\ No newline at end of file
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json
new file mode 100644
index 000000000..cb9927517
--- /dev/null
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json
@@ -0,0 +1,177 @@
+{
+ "subjects":
+ [
+ {
+ "subject_id": -10
+ },
+ {
+ "subject_id": -20
+ },
+ {
+ "subject_id": -30
+ },
+ {
+ "subject_id": -40
+ },
+ {
+ "subject_id": -50
+ }
+ ],
+ "ccm_users":
+ [
+ {
+ "banned": false,
+ "hash_algorithm": "SHA-512",
+ "family_name": "Doe",
+ "given_name": "John",
+ "password": "C+o2w6mp+eLrbluMEgKMVSdP50A9BMethXN8R3yihtkbzt7WfWsde2nmq/t5gq6im3J8i3jw4Y3YrKHou8JQ2A==",
+ "password_reset_required": false,
+ "salt": "Fu8FPgqAal4GZp1hDjkOB+t6ITRCcO7HBoN5Xqf29UnVj5NUdUFZRTyKYMBEx6JmZGmHcMDG9OGVCKcEM9oyScSRreJs4B51wM44NM6KeRwbCf+VhBn14DkBrl40ygraNf+AJacKpMyCpFI0O/Am7mMDWL4flskBsylkxaQn3vKfzgN5MVG2szW//I6Q6YEH9AuL8LauS6fKaVynMzzu3xzD8Hjqvvlnzym898eom2lqScPfg5g4e8Ww13HCHAYe6twupAW/BjUNax5HSioEisZN/P1UGrde8uFEj+hbbavrWYZuilPuEu25+/98jyXx6542agqrWN8j0SFYcIyOgA==",
+ "screen_name": "jdoe",
+ "subject_id": -10
+ },
+ {
+ "banned": false,
+ "hash_algorithm": "SHA-512",
+ "family_name": "Mustermann",
+ "given_name": "Max",
+ "password": "1c9626af429a6291766d15cbfb38689bd8d49450520765973de70aecaf644b7d4fda711266ba9ec8fb6df30c8ab391d40330829aa85adf371bcde6b4c9bc01e6",
+ "password_reset_required": false,
+ "salt": "fjiajhigafgapoa",
+ "screen_name": "mmuster",
+ "subject_id": -50
+ }
+ ],
+ "ccm_groups":
+ [
+ {
+ "name": "admins",
+ "subject_id": -20
+ },
+ {
+ "name": "users",
+ "subject_id": -30
+ },
+ {
+ "name": "authors",
+ "subject_id": -40
+ }
+ ],
+ "user_email_addresses":
+ [
+ {
+ "user_id": -10,
+ "email_address": "john.doe@example.com",
+ "bouncing": false,
+ "verified": true
+ },
+ {
+ "user_id": -50,
+ "email_address": "max.mustermann@example.com",
+ "bouncing": false,
+ "verified": true
+ }
+ ],
+ "group_memberships":
+ [
+ {
+ "membership_id": -10,
+ "group_subject_id": -30,
+ "user_subject_id": -10
+ },
+ {
+ "membership_id": -20,
+ "group_subject_id": -40,
+ "user_subject_id": -10
+ },
+ {
+ "membership_id": -30,
+ "group_subject_id": -20,
+ "user_subject_id": -50
+ }
+ ],
+ "ccm_privileges":
+ [
+ {
+ "privilege_id": -10,
+ "privilege": "admin"
+ },
+ {
+ "privilege_id": -20,
+ "privilege": "read"
+ },
+ {
+ "privilege_id": -30,
+ "privilege": "write"
+ }
+ ],
+ "ccm_objects":
+ [
+ {
+ "object_id": -10,
+ "display_name": "Test Object 1"
+ },
+ {
+ "object_id": -20,
+ "display_name": "Test Object 2"
+ },
+ {
+ "object_id": -30,
+ "display_name": "Test Object 3"
+ },
+ {
+ "object_id": -40,
+ "display_name": "Test Object 4"
+ }
+ ],
+ "permissions":
+ [
+ {
+ "permission_id": -10,
+ "creation_date": "2015-07-29 14:32:46",
+ "granted_privilege_id": -10,
+ "grantee_id": -20
+ },
+ {
+ "permission_id": -20,
+ "creation_date": "2015-07-29 14:34:30",
+ "granted_privilege_id": -20,
+ "grantee_id": -30,
+ "object_id": -10
+ },
+ {
+ "permission_id": -30,
+ "creation_date": "2015-07-29 14:36:05",
+ "granted_privilege_id": -30,
+ "grantee_id": -40,
+ "object_id": -10
+ },
+ {
+ "permission_id": -35,
+ "creation_date": "2015-07-29 14:57:55",
+ "granted_privilege_id": -20,
+ "grantee_id": -40,
+ "object_id": -10
+ },
+ {
+ "permission_id": -40,
+ "creation_date": "2015-07-29 14:37:22",
+ "granted_privilege_id": -20,
+ "grantee_id": -10,
+ "object_id": -20
+ },
+ {
+ "permission_id": -50,
+ "granted_privilege_id": -20,
+ "grantee_id": -50,
+ "object_id": -40
+ },
+ {
+ "permission_id": -50,
+ "granted_privilege_id": -30,
+ "grantee_id": -50,
+ "object_id": -40
+ }
+ ]
+
+}
\ No newline at end of file