private void addHasNotChangedProperties( AuditQuery query, String[] propertyNames) { for ( String propertyName : propertyNames ) { query.add( AuditEntity.property( propertyName ).hasNotChanged() ); } }
@Test public void testRevisionOrderQuery() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionNumber() ) .add( AuditEntity.id().eq( id1 ) ) .addOrder( AuditEntity.revisionNumber().desc() ) .getResultList(); Assert.assertEquals( Arrays.asList( 4, 3, 2, 1 ), result ); }
@Test public void testRevisionsLeWithPropertyQuery() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionNumber() ) .add( AuditEntity.revisionNumber().le( 3 ) ) .add( AuditEntity.property( "str1" ).eq( "a" ) ) .getResultList(); Assert.assertEquals( Arrays.asList( 1 ), result ); }
@Test public void testModifiedFlagChangesForProjectName() { final List results = getAuditReader().createQuery() .forRevisionsOfEntity( Project.class, false, true ) .add( AuditEntity.property( "name" ).hasChanged() ) .addProjection( AuditEntity.revisionNumber() ) .addOrder( AuditEntity.revisionNumber().asc() ) .getResultList(); assertEquals( Arrays.asList( 1, 2, 3, 4, 5, 6 ), results ); }
@Test public void testRevisionsOfEntityWithoutDelete() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, false ) .add( AuditEntity.id().eq( id2 ) ) .getResultList(); assert result.size() == 1; assert ((Object[]) result.get( 0 ))[0].equals( new StrIntTestEntity( "b", 11, id2 ) ); assert ((SequenceIdRevisionEntity) ((Object[]) result.get( 0 ))[1]).getId() == 1; assert ((Object[]) result.get( 0 ))[2].equals( RevisionType.ADD ); } }
@Test public void testMaximizeRevision() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionNumber() ) .add( AuditEntity.revisionNumber().maximize() .add( AuditEntity.property( "number" ).eq( 10 ) ) ) .getResultList(); assert Arrays.asList( 2 ).equals( result ); }
@Test public void testRevisionsLtQuery() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionNumber().distinct() ) .add( AuditEntity.revisionNumber().lt( 3 ) ) .addOrder( AuditEntity.revisionNumber().asc() ) .getResultList(); Assert.assertEquals( Arrays.asList( 1, 2 ), result ); }
@Test public void testHasChangedHasNotChangedCriteria() throws Exception { List list = getAuditReader().createQuery().forRevisionsOfEntity( AuditedTestEntity.class, true, true ) .add( AuditEntity.property( "str1" ).hasChanged() ).getResultList(); assertEquals( 2, list.size() ); assertEquals( "str1", ((AuditedTestEntity) list.get( 0 )).getStr1() ); assertEquals( "str2", ((AuditedTestEntity) list.get( 1 )).getStr1() ); list = getAuditReader().createQuery().forRevisionsOfEntity( AuditedTestEntity.class, true, true ) .add( AuditEntity.property( "str1" ).hasNotChanged() ).getResultList(); assertTrue( list.isEmpty() ); }
@Test public void testRevisionCountQuery() { // The query shouldn't be ordered as always, otherwise - we get an exception. Object result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionNumber().count() ) .add( AuditEntity.id().eq( id1 ) ) .getSingleResult(); Assert.assertEquals( Long.valueOf( 4 ), result ); }
@Test public void testSelectEntitiesQuery() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, true, false ) .add( AuditEntity.id().eq( id1 ) ) .getResultList(); assert result.size() == 2; assert result.get( 0 ).equals( new StrIntTestEntity( "a", 10, id1 ) ); assert result.get( 1 ).equals( new StrIntTestEntity( "aBc", 10, id1 ) ); }
@Test @TestForIssue(jiraKey = "HHH-8036") public void testEntityIdProjection() { Integer maxId = (Integer) getAuditReader().createQuery().forRevisionsOfEntity( IntTestEntity.class, true, true ) .addProjection( AuditEntity.id().max() ) .add( AuditEntity.revisionNumber().gt( 2 ) ) .getSingleResult(); Assert.assertEquals( Integer.valueOf( 2 ), maxId ); }
@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 testRevisionTypes() { @SuppressWarnings({"unchecked"}) List<Object[]> results = getAuditReader().createQuery() .forRevisionsOfEntity( StrTestEntity.class, false, true ) .add( AuditEntity.id().eq( id ) ) .getResultList(); assertEquals( results.get( 0 )[2], RevisionType.ADD ); assertEquals( results.get( 1 )[2], RevisionType.MOD ); } }
@Test public void testReferencePropertyIsNotNullQuery() { CollectionRefIngEntity ver = (CollectionRefIngEntity) getAuditReader().createQuery() .forEntitiesAtRevision( CollectionRefIngEntity.class, 3 ) .add( AuditEntity.property( "reference" ).isNotNull() ) .getSingleResult(); assert ver.getId().equals( idReferenceToParentNotNull ); } }
@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 public void testAuditQueryUsingEmbeddableNotEquals() { final NameInfo nameInfo = new NameInfo( "Jane", "Doe" ); final AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision( Person.class, 1 ); query.add( AuditEntity.property( "nameInfo" ).ne( nameInfo ) ); assertEquals( 0, query.getResultList().size() ); }
@Test public void testAuditQueryUsingEmbeddableNonEqualityCheck() { try { final NameInfo nameInfo = new NameInfo( "John", "Doe" ); final AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision( Person.class, 1 ); query.add( AuditEntity.property( "nameInfo" ).le( nameInfo ) ); } catch ( Exception ex ) { assertTyping( AuditException.class, ex ); } } }
@Test @TestForIssue(jiraKey = "HHH-8495") public void testIlikeWithMatchMode() { StrIntTestEntity site1 = new StrIntTestEntity( "aBc", 10, id1 ); StrIntTestEntity result = (StrIntTestEntity) getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) .add( AuditEntity.property( "str1" ).ilike( "BC", MatchMode.ANYWHERE ) ) .getSingleResult(); Assert.assertEquals( site1, result ); }
@Test @TestForIssue(jiraKey = "HHH-8567") public void testIdPropertyRestriction() { StrIntTestEntity ver2 = (StrIntTestEntity) getAuditReader().createQuery() .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) .add( AuditEntity.property( "id" ).eq( id2 ) ) .getSingleResult(); Assert.assertEquals( new StrIntTestEntity( "a", 20, id2 ), ver2 ); }
@Test public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsOneToOne() { List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) .add( disjunction() .add( property( "name" ).like( "b1" ) ) .add( property( "name" ).like( "b2" ) ) ) .traverseRelation( "relationToD", JoinType.INNER ) .add( property( "foo" ).like( "bar" ) ) .getResultList(); assertEquals( 2, results.size() ); }