mirror of
https://github.com/google/nomulus.git
synced 2025-07-10 05:03:24 +02:00
Auto-apply JPA converters for collection type (#469)
* Auto-apply JPA converters for collection type * Extract common logic to a base class * Remove extra lines * Rebase on master
This commit is contained in:
parent
736f788eea
commit
594ce30122
21 changed files with 408 additions and 261 deletions
|
@ -25,13 +25,12 @@ import google.registry.util.CidrAddressBlock;
|
|||
import java.util.List;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import org.hibernate.annotations.Type;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.JUnit4;
|
||||
|
||||
/** Unit tests for {@link CidrAddressBlockListUserType}. */
|
||||
/** Unit tests for {@link CidrAddressBlockListConverter}. */
|
||||
@RunWith(JUnit4.class)
|
||||
public class CidrAddressBlockListUserTypeTest {
|
||||
@Rule
|
||||
|
@ -59,7 +58,6 @@ public class CidrAddressBlockListUserTypeTest {
|
|||
|
||||
@Id String name = "id";
|
||||
|
||||
@Type(type = "google.registry.persistence.CidrAddressBlockListUserType")
|
||||
List<CidrAddressBlock> addresses;
|
||||
|
||||
private TestEntity() {}
|
||||
|
|
|
@ -18,29 +18,27 @@ import static com.google.common.truth.Truth.assertThat;
|
|||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import google.registry.model.eppcommon.StatusValue;
|
||||
import google.registry.persistence.transaction.JpaTestRules;
|
||||
import google.registry.persistence.transaction.JpaTestRules.JpaUnitTestRule;
|
||||
import java.util.Set;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import org.hibernate.annotations.Type;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.JUnit4;
|
||||
|
||||
/** Unit tests for {@link EnumSetUserType}. */
|
||||
/** Unit tests for {@link StatusValueSetConverter}. */
|
||||
@RunWith(JUnit4.class)
|
||||
public class EnumSetUserTypeTest {
|
||||
public class StatusValueSetConverterTest {
|
||||
@Rule
|
||||
public final JpaUnitTestRule jpaRule =
|
||||
new JpaTestRules.Builder().withEntityClass(TestEntity.class).buildUnitTestRule();
|
||||
|
||||
public EnumSetUserTypeTest() {}
|
||||
|
||||
@Test
|
||||
public void testRoundTrip() {
|
||||
Set<TestEnum> enums = ImmutableSet.of(TestEnum.BAR, TestEnum.FOO);
|
||||
Set<StatusValue> enums = ImmutableSet.of(StatusValue.INACTIVE, StatusValue.PENDING_DELETE);
|
||||
TestEntity obj = new TestEntity("foo", enums);
|
||||
|
||||
jpaTm().transact(() -> jpaTm().getEntityManager().persist(obj));
|
||||
|
@ -49,45 +47,15 @@ public class EnumSetUserTypeTest {
|
|||
assertThat(persisted.data).isEqualTo(enums);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNativeQuery_succeeds() {
|
||||
Set<TestEnum> enums = ImmutableSet.of(TestEnum.BAR, TestEnum.FOO);
|
||||
TestEntity obj = new TestEntity("foo", enums);
|
||||
|
||||
jpaTm().transact(() -> jpaTm().getEntityManager().persist(obj));
|
||||
|
||||
assertThat(
|
||||
ImmutableSet.of(
|
||||
getSingleResultFromNativeQuery(
|
||||
"SELECT data[1] FROM \"TestEntity\" WHERE name = 'foo'"),
|
||||
getSingleResultFromNativeQuery(
|
||||
"SELECT data[2] FROM \"TestEntity\" WHERE name = 'foo'")))
|
||||
.containsExactly("BAR", "FOO");
|
||||
}
|
||||
|
||||
private static Object getSingleResultFromNativeQuery(String sql) {
|
||||
return jpaTm()
|
||||
.transact(() -> jpaTm().getEntityManager().createNativeQuery(sql).getSingleResult());
|
||||
}
|
||||
|
||||
enum TestEnum {
|
||||
FOO,
|
||||
BAR,
|
||||
BAZ;
|
||||
|
||||
public static class TestEnumType extends EnumSetUserType<TestEnum> {}
|
||||
}
|
||||
|
||||
@Entity(name = "TestEntity")
|
||||
static class TestEntity {
|
||||
@Id String name;
|
||||
|
||||
@Type(type = "google.registry.persistence.EnumSetUserTypeTest$TestEnum$TestEnumType")
|
||||
Set<TestEnum> data;
|
||||
Set<StatusValue> data;
|
||||
|
||||
TestEntity() {}
|
||||
|
||||
TestEntity(String name, Set<TestEnum> data) {
|
||||
TestEntity(String name, Set<StatusValue> data) {
|
||||
this.name = name;
|
||||
this.data = data;
|
||||
}
|
|
@ -26,15 +26,14 @@ import java.util.List;
|
|||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.NoResultException;
|
||||
import org.hibernate.annotations.Type;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.JUnit4;
|
||||
|
||||
/** Unit tests for {@link StringListUserType}. */
|
||||
/** Unit tests for {@link StringListConverter}. */
|
||||
@RunWith(JUnit4.class)
|
||||
public class StringListUserTypeTest {
|
||||
public class StringListConverterTest {
|
||||
@Rule
|
||||
public final JpaUnitTestRule jpaRule =
|
||||
new JpaTestRules.Builder().withEntityClass(TestEntity.class).buildUnitTestRule();
|
||||
|
@ -123,7 +122,6 @@ public class StringListUserTypeTest {
|
|||
|
||||
@Id String name = "id";
|
||||
|
||||
@Type(type = "google.registry.persistence.StringListUserType")
|
||||
List<String> tlds;
|
||||
|
||||
private TestEntity() {}
|
|
@ -24,15 +24,14 @@ import google.registry.persistence.transaction.JpaTestRules.JpaUnitTestRule;
|
|||
import java.util.Set;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import org.hibernate.annotations.Type;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.JUnit4;
|
||||
|
||||
/** Unit tests for {@link StringSetUserType}. */
|
||||
/** Unit tests for {@link StringSetConverter}. */
|
||||
@RunWith(JUnit4.class)
|
||||
public class StringSetUserTypeTest {
|
||||
public class StringSetConverterTest {
|
||||
@Rule
|
||||
public final JpaUnitTestRule jpaRule =
|
||||
new JpaTestRules.Builder().withEntityClass(TestEntity.class).buildUnitTestRule();
|
||||
|
@ -70,7 +69,6 @@ public class StringSetUserTypeTest {
|
|||
|
||||
@Id String name = "id";
|
||||
|
||||
@Type(type = "google.registry.persistence.StringSetUserType")
|
||||
Set<String> tlds;
|
||||
|
||||
private TestEntity() {}
|
Loading…
Add table
Add a link
Reference in a new issue