/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.test.bytecode.enhancement.association;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.test.bytecode.enhancement.AbstractEnhancerTestTask;
import org.junit.Assert;
/**
* @author Luis Barreiro
*/
public class ManyToManyAssociationTestTask extends AbstractEnhancerTestTask {
public Class<?>[] getAnnotatedClasses() {
return new Class<?>[] {Group.class, User.class};
}
public void prepare() {
}
public void execute() {
Group group = new Group();
Group anotherGroup = new Group();
User user = new User();
User anotherUser = new User();
user.addGroup( group );
user.addGroup( anotherGroup );
anotherUser.addGroup( group );
Assert.assertTrue( group.getUsers().size() == 2 );
Assert.assertTrue( anotherGroup.getUsers().size() == 1 );
group.setUsers( new HashSet<User>() );
Assert.assertTrue( user.getGroups().size() == 1 );
Assert.assertTrue( anotherUser.getGroups().size() == 0 );
// Test remove
user.addGroup( group );
anotherUser.addGroup( group );
Assert.assertTrue( group.getUsers().size() == 2 );
Assert.assertTrue( anotherGroup.getUsers().size() == 1 );
Set<Group> groups = new HashSet<Group>( user.getGroups() );
groups.remove( group );
user.setGroups( groups );
Assert.assertTrue( group.getUsers().size() == 1 );
Assert.assertTrue( anotherGroup.getUsers().size() == 1 );
groups.remove( anotherGroup );
user.setGroups( groups );
Assert.assertTrue( group.getUsers().size() == 1 );
// This happens (and is expected) because there was no snapshot taken before remove
Assert.assertTrue( anotherGroup.getUsers().size() == 1 );
}
protected void cleanup() {
}
}