/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* 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.ogm.test.persister;
import static org.fest.assertions.Assertions.assertThat;
import org.hibernate.ogm.backendtck.associations.collection.manytomany.AccountOwner;
import org.hibernate.ogm.backendtck.associations.collection.manytomany.BankAccount;
import org.hibernate.ogm.backendtck.associations.collection.types.Address;
import org.hibernate.ogm.backendtck.associations.collection.types.PhoneNumber;
import org.hibernate.ogm.backendtck.associations.collection.types.Race;
import org.hibernate.ogm.backendtck.associations.collection.types.Runner;
import org.hibernate.ogm.backendtck.associations.collection.types.User;
import org.hibernate.ogm.backendtck.associations.manytoone.SalesForce;
import org.hibernate.ogm.backendtck.associations.manytoone.SalesGuy;
import org.hibernate.ogm.backendtck.associations.onetoone.Husband;
import org.hibernate.ogm.backendtck.associations.onetoone.Wife;
import org.hibernate.ogm.backendtck.embeddable.MultiAddressAccount;
import org.hibernate.ogm.model.key.spi.AssociationKeyMetadata;
import org.hibernate.ogm.model.key.spi.AssociationType;
import org.hibernate.ogm.persister.impl.OgmCollectionPersister;
import org.hibernate.ogm.persister.impl.OgmEntityPersister;
import org.hibernate.ogm.utils.OgmTestCase;
import org.junit.Test;
/**
* Tests for obtaining association key metadata.
*
* @author Gunnar Morling
*/
public class AssociationKeyMetadataTest extends OgmTestCase {
@Test
public void testAssociationType() {
AssociationKeyMetadata akm = getCollectionPersister( BankAccount.class.getName() + ".owners" ).getAssociationKeyMetadata();
assertThat( akm.getAssociationType() ).isEqualTo( AssociationType.SET );
akm = getCollectionPersister( MultiAddressAccount.class.getName() + ".addresses" ).getAssociationKeyMetadata();
assertThat( akm.getAssociationType() ).isEqualTo( AssociationType.BAG );
akm = getCollectionPersister( Race.class.getName() + ".runnersByArrival" ).getAssociationKeyMetadata();
assertThat( akm.getAssociationType() ).isEqualTo( AssociationType.LIST );
akm = getCollectionPersister( User.class.getName() + ".addresses" ).getAssociationKeyMetadata();
assertThat( akm.getAssociationType() ).isEqualTo( AssociationType.MAP );
akm = getEntityPersister( Husband.class.getName() ).getInverseOneToOneAssociationKeyMetadata( "wife" );
assertThat( akm.getAssociationType() ).isEqualTo( AssociationType.ONE_TO_ONE );
}
@Test
public void testEntityKeyMetadata() {
AssociationKeyMetadata akm = getCollectionPersister( BankAccount.class.getName() + ".owners" ).getAssociationKeyMetadata();
assertThat( akm.getEntityKeyMetadata().getTable() ).isEqualTo( "BankAccount" );
akm = getCollectionPersister( AccountOwner.class.getName() + ".bankAccounts" ).getAssociationKeyMetadata();
assertThat( akm.getEntityKeyMetadata().getTable() ).isEqualTo( "AccountOwner" );
akm = getCollectionPersister( SalesForce.class.getName() + ".salesGuys" ).getAssociationKeyMetadata();
assertThat( akm.getEntityKeyMetadata().getTable() ).isEqualTo( "SalesForce" );
akm = getEntityPersister( Husband.class.getName() ).getInverseOneToOneAssociationKeyMetadata( "wife" );
assertThat( akm.getEntityKeyMetadata().getTable() ).isEqualTo( "Wife" );
}
private OgmEntityPersister getEntityPersister(String entityName) {
return (OgmEntityPersister) ( getSessionFactory() ).getEntityPersister( entityName );
}
private OgmCollectionPersister getCollectionPersister(String role) {
return (OgmCollectionPersister) ( getSessionFactory() ).getCollectionPersister( role );
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] { BankAccount.class, AccountOwner.class, Husband.class, Wife.class, MultiAddressAccount.class, Address.class, Race.class,
Runner.class, User.class, PhoneNumber.class, SalesForce.class, SalesGuy.class };
}
}