package de.flower.common.validation.unique.impl;
import de.flower.common.validation.unique.Unique;
import org.testng.annotations.Test;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import java.util.Arrays;
import java.util.List;
import static org.testng.Assert.*;
/**
* Class tests all sorts of @Unique usages and missusages.
*/
@SuppressWarnings("UnusedAssignment")
public class UniqueDefFactoryTest {
private final IColumnResolver columnResolver = new MockColumnResolver();
private final List<String> expectedAttributes = Arrays.asList("name", "email");
@Test
public void testParseTableUniqueConstraint() {
@Table(uniqueConstraints = { @UniqueConstraint(name = "c1", columnNames = { "name", "email" }) })
@Unique(name = "c1", clazz = TestEntity.class, groups = { Void.class })
final class TestEntity {
}
final Unique constraint = TestEntity.class.getAnnotation(Unique.class);
final UniqueDef uniqueDef = UniqueDefFactory.parseConstraint(constraint, columnResolver);
assertEquals("c1", uniqueDef.getName());
assertEquals(expectedAttributes, uniqueDef.getAttributeNames());
}
@Test
public void testParseConstraintWithAttributeNames() {
@Unique(name = "c1", attributeNames = { "name", "email" }, clazz = TestEntity.class, groups = { Void.class })
final class TestEntity {
}
final Unique constraint = TestEntity.class.getAnnotation(Unique.class);
final UniqueDef uniqueDef = UniqueDefFactory.parseConstraint(constraint, columnResolver);
assertEquals("c1", uniqueDef.getName());
assertEquals(expectedAttributes, uniqueDef.getAttributeNames());
}
@Test
public void testParseConstraintWithoutName() {
@Unique(attributeNames = { "name", "email" }, clazz = TestEntity.class, groups = { Void.class })
final class TestEntity {
}
final Unique constraint = TestEntity.class.getAnnotation(Unique.class);
final UniqueDef uniqueDef = UniqueDefFactory.parseConstraint(constraint, columnResolver);
assertEquals("uc_name_email", uniqueDef.getName());
assertEquals(expectedAttributes, uniqueDef.getAttributeNames());
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testCheckMissingArguments() {
@Unique(clazz = TestEntity.class, groups = { Void.class })
final class TestEntity {
}
final Unique constraint = TestEntity.class.getAnnotation(Unique.class);
final UniqueDef uniqueDef = UniqueDefFactory.parseConstraint(constraint, columnResolver);
}
@Test(expectedExceptions = IllegalStateException.class)
public void testCheckUnknownConstraint() {
@Unique(name = "unknownConstraint", clazz = TestEntity.class, groups = { Void.class })
final class TestEntity {
}
final Unique constraint = TestEntity.class.getAnnotation(Unique.class);
final UniqueDef uniqueDef = UniqueDefFactory.parseConstraint(constraint, columnResolver);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testCheckMissingGroup() {
@Unique(attributeNames = { "name" }, clazz = TestEntity.class)
final class TestEntity {
}
final Unique constraint = TestEntity.class.getAnnotation(Unique.class);
final UniqueDef uniqueDef = UniqueDefFactory.parseConstraint(constraint, columnResolver);
}
private static class MockColumnResolver implements IColumnResolver {
@Override
public String[] mapColumns2Attributes(final Class<?> entityClass, final String[] columnNames) {
return columnNames;
}
}
}