/** * Create restrictions, projections and specify order for the revision type, corresponding to an * audited entity. */ public static AuditProperty<RevisionType> revisionType() { return revisionType( null ); }
@Test public void testSelectRevisionTypeQuery() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionType() ) .add( AuditEntity.id().eq( id1 ) ) .addOrder( AuditEntity.revisionNumber().asc() ) .getResultList(); assert result.size() == 3; assert result.get( 0 ).equals( RevisionType.ADD ); assert result.get( 1 ).equals( RevisionType.MOD ); assert result.get( 2 ).equals( RevisionType.DEL ); }
@Test public void testRevisionTypeEqQuery() { // The query shouldn't be ordered as always, otherwise - we get an exception. List results = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) .add( AuditEntity.id().eq( id1 ) ) .add( AuditEntity.revisionType().eq( RevisionType.MOD ) ) .getResultList(); Assert.assertEquals( 3, results.size() ); Assert.assertEquals( new StrIntTestEntity( "d", 10, id1 ), results.get( 0 ) ); Assert.assertEquals( new StrIntTestEntity( "d", 1, id1 ), results.get( 1 ) ); Assert.assertEquals( new StrIntTestEntity( "d", 5, id1 ), results.get( 2 ) ); }
@Test public void testRevisionTypeNeQuery() { // The query shouldn't be ordered as always, otherwise - we get an exception. List results = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) .add( AuditEntity.id().eq( id1 ) ) .add( AuditEntity.revisionType().ne( RevisionType.MOD ) ) .getResultList(); Assert.assertEquals( 1, results.size() ); Assert.assertEquals( new StrIntTestEntity( "a", 10, id1 ), results.get( 0 ) ); } }
@Test public void testElementCollection() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( StringSetEntity.class, false, true ) .add( AuditEntity.id().eq( stringSetId ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 12, getRevisionNumber( objArray[1] ) ); StringSetEntity stringSetEntity = (StringSetEntity) objArray[0]; Assert.assertEquals( TestTools.makeSet( "string 1", "string 2" ), stringSetEntity.getStrings() ); }
@Test @SuppressWarnings("unchecked") public void testSelectDeletedEntitiesBook1() { List<Book> books = (List<Book>) getAuditReader().createQuery() .forRevisionsOfEntity( Book.class, true, true ) .add( AuditEntity.id().eq( bookId1 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); assertTrue( !books.isEmpty() ); final Book book = books.get( 0 ); assertNotNull( book.getId() ); assertNotNull( book.getId().getAuthor() ); assertEquals( authorId, book.getId().getAuthor().getId() ); }
@Test @SuppressWarnings("unchecked") public void testSelectDeletedEntitiesBook2() { List<Book> books = (List<Book>) getAuditReader().createQuery() .forRevisionsOfEntity( Book.class, true, true ) .add( AuditEntity.id().eq( bookId2 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); assertTrue( !books.isEmpty() ); final Book book = books.get( 0 ); assertNotNull( book.getId() ); assertNotNull( book.getId().getAuthor() ); assertEquals( authorId, book.getId().getAuthor().getId() ); }
@Test public void testUnversionedRelation() { List queryResult = getAuditReader().createQuery() .forRevisionsOfEntity( M2MIndexedListTargetNotAuditedEntity.class, false, true ) .add( AuditEntity.id().eq( 1 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 14, getRevisionNumber( objArray[1] ) ); M2MIndexedListTargetNotAuditedEntity relationNotAuditedEntity = (M2MIndexedListTargetNotAuditedEntity) objArray[0]; Assert.assertTrue( TestTools.checkCollection( relationNotAuditedEntity.getReferences(), unversionedEntity1, unversionedEntity2 ) ); }
@Test public void testTernaryMap() { final TernaryMapEntity ternaryMap = new TernaryMapEntity(); ternaryMap.setId( ternaryMapId ); ternaryMap.getMap().put( intEntity1, stringEntity1 ); ternaryMap.getMap().put( new IntTestPrivSeqEntity( 2, intEntity2.getId() ) , new StrTestPrivSeqEntity( "Value 2", stringEntity2.getId() ) ); TernaryMapEntity entity = getAuditReader().find( TernaryMapEntity.class, ternaryMapId, 15 ); Assert.assertEquals( ternaryMap.getMap(), entity.getMap() ); ternaryMap.getMap().clear(); ternaryMap.getMap().put( intEntity1, stringEntity1 ); ternaryMap.getMap().put( intEntity2, stringEntity2 ); entity = getAuditReader().find( TernaryMapEntity.class, ternaryMapId, 16 ); Assert.assertEquals( ternaryMap.getMap(), entity.getMap() ); List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( TernaryMapEntity.class, false, true ) .add( AuditEntity.id().eq( ternaryMapId ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 17, getRevisionNumber( objArray[1] ) ); entity = (TernaryMapEntity) objArray[0]; Assert.assertEquals( ternaryMap.getMap(), entity.getMap() ); }
@Test public void testReferencedOneToManySameRevision() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefIngEntity.class, false, true ) .add( AuditEntity.id().eq( 2 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 2, getRevisionNumber( objArray[1] ) ); SetRefIngEntity refIngEntity = (SetRefIngEntity) objArray[0]; Assert.assertEquals( "Example Data 1", refIngEntity.getData() ); Hibernate.initialize( refIngEntity.getReference() ); Assert.assertEquals( "Demo Data 1", refIngEntity.getReference().getData() ); }
@Test public void testReferencedOneToManyDifferentRevisions() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefIngEntity.class, false, true ) .add( AuditEntity.id().eq( 4 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 4, getRevisionNumber( objArray[1] ) ); SetRefIngEntity refIngEntity = (SetRefIngEntity) objArray[0]; Assert.assertEquals( "Example Data 2", refIngEntity.getData() ); Hibernate.initialize( refIngEntity.getReference() ); Assert.assertEquals( "Demo Data 2", refIngEntity.getReference().getData() ); }
@Test public void testOwningManyToManySameRevision() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwnedEntity.class, false, true ) .add( AuditEntity.id().eq( 6 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 7, getRevisionNumber( objArray[1] ) ); SetOwnedEntity setOwnedEntity = (SetOwnedEntity) objArray[0]; Assert.assertEquals( "Example Data 1", setOwnedEntity.getData() ); Hibernate.initialize( setOwnedEntity.getReferencing() ); Assert.assertEquals( TestTools.makeSet( new SetOwningEntity( 5, "Demo Data 1" ) ), setOwnedEntity.getReferencing() ); }
@Test public void testOwnedManyToManyDifferentRevisions() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwningEntity.class, false, true ) .add( AuditEntity.id().eq( 7 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 9, getRevisionNumber( objArray[1] ) ); SetOwningEntity setOwningEntity = (SetOwningEntity) objArray[0]; Assert.assertEquals( "Demo Data 2", setOwningEntity.getData() ); Hibernate.initialize( setOwningEntity.getReferences() ); Assert.assertEquals( TestTools.makeSet( new SetOwnedEntity( 8, "Example Data 2" ) ), setOwningEntity.getReferences() ); }
@Test public void testOwnedManyToManySameRevision() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwningEntity.class, false, true ) .add( AuditEntity.id().eq( 5 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 7, getRevisionNumber( objArray[1] ) ); SetOwningEntity setOwningEntity = (SetOwningEntity) objArray[0]; Assert.assertEquals( "Demo Data 1", setOwningEntity.getData() ); Hibernate.initialize( setOwningEntity.getReferences() ); Assert.assertEquals( TestTools.makeSet( new SetOwnedEntity( 6, "Example Data 1" ) ), setOwningEntity.getReferences() ); }
@Test public void testReferringOneToManySameRevision() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefEdEntity.class, false, true ) .add( AuditEntity.id().eq( 1 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 2, getRevisionNumber( objArray[1] ) ); SetRefEdEntity refEdEntity = (SetRefEdEntity) objArray[0]; Assert.assertEquals( "Demo Data 1", refEdEntity.getData() ); Hibernate.initialize( refEdEntity.getReffering() ); Assert.assertEquals( TestTools.makeSet( new SetRefIngEntity( 2, "Example Data 1" ) ), refEdEntity.getReffering() ); }
@Test public void testEntitiesAddedAtRevision() { StrIntTestEntity site1 = new StrIntTestEntity( "a", 10, id1 ); StrIntTestEntity site2 = new StrIntTestEntity( "a", 10, id2 ); StrIntTestEntity site3 = new StrIntTestEntity( "b", 5, id3 ); List result = getAuditReader().createQuery().forEntitiesModifiedAtRevision( StrIntTestEntity.class, StrIntTestEntity.class.getName(), 1 ).getResultList(); RevisionType revisionType = (RevisionType) getAuditReader().createQuery().forEntitiesModifiedAtRevision( StrIntTestEntity.class, 1 ) .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) .getSingleResult(); Assert.assertTrue( TestTools.checkCollection( result, site1, site2, site3 ) ); Assert.assertEquals( revisionType, RevisionType.ADD ); }
@Test public void testEntitiesRemovedAtRevision() { StrIntTestEntity site1 = new StrIntTestEntity( null, null, id1 ); List result = getAuditReader().createQuery() .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 4 ) .getResultList(); RevisionType revisionType = (RevisionType) getAuditReader().createQuery().forEntitiesModifiedAtRevision( StrIntTestEntity.class, 4 ) .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) .getSingleResult(); Assert.assertTrue( TestTools.checkCollection( result, site1 ) ); Assert.assertEquals( revisionType, RevisionType.DEL ); }
@Test public void testEntitiesChangedAtRevision() { StrIntTestEntity site1 = new StrIntTestEntity( "aBc", 10, id1 ); StrIntTestEntity site2 = new StrIntTestEntity( "a", 20, id2 ); List result = getAuditReader().createQuery() .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 2 ) .getResultList(); RevisionType revisionType = (RevisionType) getAuditReader().createQuery().forEntitiesModifiedAtRevision( StrIntTestEntity.class, 2 ) .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) .getSingleResult(); Assert.assertTrue( TestTools.checkCollection( result, site1, site2 ) ); Assert.assertEquals( revisionType, RevisionType.MOD ); }
@Test public void testOneToManyCollectionSemantics() { final CollectionRefEdEntity edVer1 = new CollectionRefEdEntity( 1, "data_ed_1" ); final CollectionRefIngEntity ingVer1 = new CollectionRefIngEntity( 2, "data_ing_1" ); final CollectionRefIngEntity ingVer2 = new CollectionRefIngEntity( 2, "modified data_ing_1" ); CollectionRefEdEntity entity = getAuditReader().find( CollectionRefEdEntity.class, 1, 18 ); Assert.assertEquals( edVer1, entity ); Assert.assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer1 ) ); entity = getAuditReader().find( CollectionRefEdEntity.class, 1, 19 ); Assert.assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer2 ) ); List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( CollectionRefEdEntity.class, false, true ) .add( AuditEntity.id().eq( 1 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 20, getRevisionNumber( objArray[1] ) ); entity = (CollectionRefEdEntity) objArray[0]; Assert.assertEquals( "data_ed_1", entity.getData() ); Assert.assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer2 ) ); }
@Test public void testManyToManyCollectionSemantics() { final ListOwnedEntity edVer1 = new ListOwnedEntity( 1, "data_ed_1" ); final ListOwningEntity ingVer1 = new ListOwningEntity( 2, "data_ing_1" ); final ListOwningEntity ingVer2 = new ListOwningEntity( 2, "modified data_ing_1" ); ListOwnedEntity entity = getAuditReader().find( ListOwnedEntity.class, 1, 21 ); Assert.assertEquals( edVer1, entity ); Assert.assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer1 ) ); entity = getAuditReader().find( ListOwnedEntity.class, 1, 22 ); Assert.assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer2 ) ); List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( ListOwnedEntity.class, false, true ) .add( AuditEntity.id().eq( 1 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 23, getRevisionNumber( objArray[1] ) ); entity = (ListOwnedEntity) objArray[0]; Assert.assertEquals( "data_ed_1", entity.getData() ); Assert.assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer2 ) ); }