protected List queryForPropertyHasChangedWithDeleted( Class<?> clazz, Object id, String... propertyNames) { AuditQuery query = createForRevisionsQuery( clazz, id, true ); addHasChangedProperties( query, propertyNames ); return query.getResultList(); }
@Test public void testQueryWithDeleted() { // Selecting all entities, also the deleted ones List entities = getAuditReader().createQuery().forRevisionsOfEntity( PrimitiveTestEntity.class, true, true ) .getResultList(); assert entities.size() == 3; assert entities.get( 0 ).equals( new PrimitiveTestEntity( id1, 10, 0 ) ); assert entities.get( 1 ).equals( new PrimitiveTestEntity( id1, 20, 0 ) ); assert entities.get( 2 ).equals( new PrimitiveTestEntity( id1, 0, 0 ) ); } }
@Test public void testRevisionsPropertyEqQuery() { List revs_id1 = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .add( AuditEntity.id().eq( id1 ) ) .getResultList(); Assert.assertEquals( 2, revs_id1.size() ); Assert.assertEquals( new StrIntTestEntity( "a", 10, id1 ), ((Object[]) revs_id1.get( 0 ))[0] ); Assert.assertEquals( new StrIntTestEntity( "a", 10, id1 ), ((Object[]) revs_id1.get( 1 ))[0] ); }
@Test public void testEmptyRevisionOfEntityQuery() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .getResultList(); assert result.size() == 7; }
@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 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 @TestForIssue( jiraKey = "HHH-7555" ) public void testFindRevisionEntitiesWithoutDeletions() { List<?> revisionInfos = getAuditReader().createQuery() .forRevisionsOfEntity( AuditedTestEntity.class, false ) .getResultList(); assertEquals( 2, revisionInfos.size() ); revisionInfos.forEach( e -> assertTyping( SequenceIdRevisionEntity.class, e ) ); }
@Test public void testPolymorphicQuery() { ParentEntity parentVer1 = new ParentEntity( id1, "x" ); assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() .equals( parentVer1 ); assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ) .getResultList().size() == 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 testAuditQueryUsingEmbeddableEquals() { final NameInfo nameInfo = new NameInfo( "John", "Doe" ); final AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision( Person.class, 1 ); query.add( AuditEntity.property( "nameInfo" ).eq( nameInfo ) ); List<?> results = query.getResultList(); assertEquals( 1, results.size() ); final Person person = (Person) results.get( 0 ); assertEquals( nameInfo, person.getNameInfo() ); }
@Test public void shouldFailWhenQueryOnManyToOne() { //when PlainEntity plainEntity = (PlainEntity) getAuditReader().createQuery() .forEntitiesAtRevision( PlainEntity.class, 1 ) .add( AuditEntity.relatedId( "component_manyToOneEntity" ).eq( getManyToOneEntity().getId() ) ) .getResultList().get( 0 ); //then Assert.assertEquals( getManyToOneEntity(), plainEntity.getComponent().getManyToOneEntity() ); }
@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 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 testCompany3EmployeeIn() { AuditQuery auditQuery = getAuditReader().createQuery().forRevisionsOfEntity( Employee.class, true, true ); auditQuery.add( AuditEntity.relatedId( "company" ).in( new Integer[]{ company3Id } ) ); final List<Employee> results = auditQuery.getResultList(); assertEquals( 1, results.size() ); final Employee employee = makeEmployee( employee4Id, "Employee4", company3Id, "COMPANY3" ); assertEquals( results, TestTools.makeList( employee ) ); }
@Test public void testEntityRevisionsWithChangesQueryNoDeletions() { List results = getAuditReader().createQuery() .forRevisionsOfEntityWithChanges( Simple.class, false ) .add( AuditEntity.id().eq( simpleId ) ) .getResultList(); compareResults( getExpectedResults( false ), results ); }
@Test public void testModifiedFlagChangesForProjectType() { final List results = getAuditReader().createQuery() .forRevisionsOfEntity( Project.class, false, true ) .add( AuditEntity.property( "type" ).hasChanged() ) .addProjection( AuditEntity.revisionNumber() ) .addOrder( AuditEntity.revisionNumber().asc() ) .getResultList(); assertEquals( Arrays.asList( 1 ), results ); }
@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 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 testRevisionsGtWithPropertyQuery() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionNumber() ) .add( AuditEntity.revisionNumber().gt( 1 ) ) .add( AuditEntity.property( "number" ).lt( 10 ) ) .getResultList(); Assert.assertEquals( TestTools.makeSet( 3, 4 ), new HashSet<>( result ) ); }
@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() ); }