package fr.openwide.core.test.jpa.more.business; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import fr.openwide.core.jpa.exception.SecurityServiceException; import fr.openwide.core.jpa.exception.ServiceException; import fr.openwide.core.jpa.more.business.generic.model.GenericListItem; import fr.openwide.core.test.jpa.more.business.audit.model.MockAudit; import fr.openwide.core.test.jpa.more.business.audit.model.MockAuditAction; import fr.openwide.core.test.jpa.more.business.audit.model.MockAuditActionEnum; import fr.openwide.core.test.jpa.more.business.audit.model.MockAuditFeature; import fr.openwide.core.test.jpa.more.business.audit.model.MockAuditFeatureEnum; import fr.openwide.core.test.jpa.more.business.audit.service.IMockAuditService; import fr.openwide.core.test.jpa.more.business.entity.model.TestEntity; public class TestAuditService extends AbstractJpaMoreTestCase { @Autowired protected IMockAuditService auditService; @Override protected void cleanAll() throws ServiceException, SecurityServiceException { cleanEntities(auditService); cleanFeaturesAndActions(); super.cleanAll(); } private void cleanFeaturesAndActions() throws ServiceException, SecurityServiceException { for (GenericListItem<?> genericListItem : genericListItemService.list(MockAuditFeature.class)) { genericListItemService.delete(genericListItem); } for (GenericListItem<?> genericListItem : genericListItemService.list(MockAuditAction.class)) { genericListItemService.delete(genericListItem); } } @Override public void init() throws ServiceException, SecurityServiceException { super.init(); initFeaturesAndActions(); } private void initFeaturesAndActions() { for (MockAuditFeatureEnum auditFeatureEnum : MockAuditFeatureEnum.values()) { MockAuditFeature auditFeature = new MockAuditFeature(auditFeatureEnum.name(), auditFeatureEnum, 1); genericListItemService.create(auditFeature); } for (MockAuditActionEnum auditActionEnum : MockAuditActionEnum.values()) { MockAuditAction auditAction = new MockAuditAction(auditActionEnum.name(), auditActionEnum, 1); genericListItemService.create(auditAction); } } @Test public void testCreate() throws ServiceException, SecurityServiceException { TestEntity subject = new TestEntity("Mr. Franck Black"); testEntityService.create(subject); TestEntity context = new TestEntity("context"); testEntityService.create(context); TestEntity object = new TestEntity("object"); testEntityService.create(object); TestEntity secondaryObject = new TestEntity("secondaryObject"); testEntityService.create(secondaryObject); MockAuditFeature feature = auditService .getAuditFeatureByEnum(MockAuditFeatureEnum.TEST_FEATURE_1); MockAuditAction action = auditService .getAuditActionByEnum(MockAuditActionEnum.TEST_ACTION_1); MockAudit audit = new MockAudit("service", "method", context, subject, feature, action, "message", object, secondaryObject); auditService.create(audit); List<MockAudit> audits = auditService.list(); Assert.assertNotNull(audit.getId()); Assert.assertEquals(audit.getService(), "service"); Assert.assertEquals(audit.getMethod(), "method"); Assert.assertEquals(1, audits.size()); Assert.assertTrue(audits.contains(audit)); Assert.assertEquals(feature, audit.getFeature()); Assert.assertEquals(action, audit.getAction()); Assert.assertEquals(context.getId(), audit.getContextId()); Assert.assertEquals(context.getLabel(), audit.getContextDisplayName()); Assert.assertEquals(TestEntity.class.getName(), audit.getContextClass()); Assert.assertEquals(subject.getId(), audit.getSubjectId()); Assert.assertEquals(subject.getLabel(), audit.getSubjectDisplayName()); Assert.assertEquals(TestEntity.class.getName(), audit.getSubjectClass()); Assert.assertEquals(object.getId(), audit.getObjectId()); Assert.assertEquals(object.getLabel(), audit.getObjectDisplayName()); Assert.assertEquals(TestEntity.class.getName(), audit.getObjectClass()); Assert.assertEquals(secondaryObject.getId(), audit.getSecondaryObjectId()); Assert.assertEquals(secondaryObject.getLabel(), audit.getSecondaryObjectDisplayName()); Assert.assertEquals(TestEntity.class.getName(), audit.getSecondaryObjectClass()); } @Test public void testGetters() throws ServiceException, SecurityServiceException { TestEntity subject = new TestEntity("Mr. Franck Black"); testEntityService.create(subject); TestEntity context = new TestEntity("context"); testEntityService.create(context); TestEntity object = new TestEntity("object"); testEntityService.create(object); TestEntity secondaryObject = new TestEntity("secondaryObject"); testEntityService.create(secondaryObject); MockAudit audit = new MockAudit( "service", "method", context, subject, auditService .getAuditFeatureByEnum(MockAuditFeatureEnum.TEST_FEATURE_1), auditService .getAuditActionByEnum(MockAuditActionEnum.TEST_ACTION_1), "message", object, secondaryObject); Assert.assertEquals(auditService.getContextEntity(audit), context); Assert.assertEquals(auditService.getSubjectEntity(audit), subject); Assert.assertEquals(auditService.getObjectEntity(audit), object); Assert.assertEquals(auditService.getSecondaryObjectEntity(audit), secondaryObject); Assert.assertEquals(auditService.getContextDisplayName(audit), context.getDisplayName()); Assert.assertEquals(auditService.getSubjectDisplayName(audit), subject.getDisplayName()); Assert.assertEquals(auditService.getObjectDisplayName(audit), object.getDisplayName()); Assert.assertEquals(auditService.getSecondaryObjectDisplayName(audit), secondaryObject.getDisplayName()); testEntityService.delete(context); testEntityService.delete(subject); testEntityService.delete(object); testEntityService.delete(secondaryObject); Assert.assertEquals(auditService.getContextDisplayName(audit), context.getDisplayName()); Assert.assertEquals(auditService.getSubjectDisplayName(audit), subject.getDisplayName()); Assert.assertEquals(auditService.getObjectDisplayName(audit), object.getDisplayName()); Assert.assertEquals(auditService.getSecondaryObjectDisplayName(audit), secondaryObject.getDisplayName()); } @Test public void testFilters() throws ServiceException, SecurityServiceException { TestEntity subject1 = new TestEntity("subject1"); testEntityService.create(subject1); TestEntity subject2 = new TestEntity("subject2"); testEntityService.create(subject2); TestEntity subject3 = new TestEntity("subject3"); testEntityService.create(subject3); TestEntity context1 = new TestEntity("context1"); testEntityService.create(context1); TestEntity context2 = new TestEntity("context2"); testEntityService.create(context2); TestEntity object1 = new TestEntity("object1"); testEntityService.create(object1); TestEntity object2 = new TestEntity("object2"); testEntityService.create(object2); TestEntity secondaryObject = new TestEntity("secondaryObject"); testEntityService.create(secondaryObject); MockAudit audit1 = new MockAudit( "service", "method", context2, subject1, auditService.getAuditFeatureByEnum(MockAuditFeatureEnum.TEST_FEATURE_1), auditService.getAuditActionByEnum(MockAuditActionEnum.TEST_ACTION_1), "message", object1, null ); MockAudit audit2 = new MockAudit( "service", "method", context2, subject1, auditService.getAuditFeatureByEnum(MockAuditFeatureEnum.TEST_FEATURE_1), auditService.getAuditActionByEnum(MockAuditActionEnum.TEST_ACTION_1), "message", object1, null ); MockAudit audit3 = new MockAudit( "service", "method", context1, subject3, auditService.getAuditFeatureByEnum(MockAuditFeatureEnum.TEST_FEATURE_2), auditService.getAuditActionByEnum(MockAuditActionEnum.TEST_ACTION_2), "message", object1, secondaryObject ); MockAudit audit4 = new MockAudit( "service", "method", context1, subject2, auditService.getAuditFeatureByEnum(MockAuditFeatureEnum.TEST_FEATURE_3), auditService.getAuditActionByEnum(MockAuditActionEnum.TEST_ACTION_3), "message", object2, null ); Calendar calendar = GregorianCalendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, -1); audit1.setDate(calendar.getTime()); calendar.add(Calendar.DAY_OF_YEAR, -1); audit2.setDate(calendar.getTime()); calendar.add(Calendar.DAY_OF_YEAR, -1); audit3.setDate(calendar.getTime()); calendar.add(Calendar.DAY_OF_YEAR, -1); audit4.setDate(calendar.getTime()); auditService.create(audit1); auditService.create(audit2); auditService.create(audit3); auditService.create(audit4); List<MockAudit> audits; audits = auditService.listBySubject(subject1); Assert.assertEquals(2, audits.size()); Assert.assertTrue(audits.contains(audit1)); Assert.assertTrue(audits.contains(audit2)); audits = auditService.listByContextOrObject(context1); Assert.assertEquals(2, audits.size()); Assert.assertTrue(audits.contains(audit3)); Assert.assertTrue(audits.contains(audit4)); audits = auditService.listByContextOrObject(object2); Assert.assertEquals(1, audits.size()); Assert.assertTrue(audits.contains(audit4)); audits = auditService.listByContextOrObject(secondaryObject); Assert.assertEquals(0, audits.size()); audits = auditService.listToDelete(3); Assert.assertEquals(2, audits.size()); Assert.assertTrue(audits.contains(audit3)); Assert.assertTrue(audits.contains(audit4)); } }