From 474d51fbaeb548b545cc01c0378c780a90110e74 Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Mon, 29 Apr 2019 09:29:04 +0200 Subject: [PATCH] refactoring of AccessMappingsUnitTestBase overloading -> method refs in ctor --- .../dto/AccessMappingsUnitTestBase.java | 52 ++++++++++--------- .../service/dto/AssetDTOUnitTest.java | 16 +++--- .../service/dto/ShareDTOUnitTest.java | 14 ++--- 3 files changed, 43 insertions(+), 39 deletions(-) diff --git a/src/test/java/org/hostsharing/hsadminng/service/dto/AccessMappingsUnitTestBase.java b/src/test/java/org/hostsharing/hsadminng/service/dto/AccessMappingsUnitTestBase.java index bcc0b169..3992ea27 100644 --- a/src/test/java/org/hostsharing/hsadminng/service/dto/AccessMappingsUnitTestBase.java +++ b/src/test/java/org/hostsharing/hsadminng/service/dto/AccessMappingsUnitTestBase.java @@ -11,6 +11,7 @@ import java.lang.reflect.Modifier; import java.util.HashSet; import java.util.Objects; import java.util.Set; +import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; @@ -25,9 +26,19 @@ import static org.junit.Assert.fail; */ public abstract class AccessMappingsUnitTestBase { + private final Class dtoClass; + private final BiFunction createSampleDTO; + private final BiFunction createRandomDTO; + + public AccessMappingsUnitTestBase(Class dtoClass, final BiFunction createSampleDTO, final BiFunction createRandomDTO) { + this.dtoClass = dtoClass; + this.createSampleDTO = createSampleDTO; + this.createRandomDTO = createRandomDTO; + } + @Test public void shouldConvertToString() { - final D sampleDto = createSampleDto(1234L); + final D sampleDto = createSampleDTO.apply(1234L, 77L); final String dtoAsString = dtoToString(sampleDto); assertThat(sampleDto.toString()).isEqualTo(dtoAsString); } @@ -35,16 +46,16 @@ public abstract class AccessMappingsUnitTestBase { @Test @SuppressWarnings("all") public void shouldImplementEqualsJustUsingClassAndId() { - final D dto = createSampleDto(1234L); + final D dto = createSampleDTO.apply(1234L, 77L); assertThat(dto.equals(dto)).isTrue(); - final D dtoWithSameId = createRandomDto(1234L); + final D dtoWithSameId = createSampleDTO.apply(1234L, 77L); assertThat(dto.equals(dtoWithSameId)).isTrue(); - final D dtoWithAnotherId = createRandomDto(RandomUtils.nextLong(2000, 9999)); + final D dtoWithAnotherId = createSampleDTO.apply(RandomUtils.nextLong(2000, 9999), 77L); assertThat(dtoWithAnotherId.equals(dtoWithSameId)).isFalse(); - final D dtoWithoutId = createRandomDto(null); + final D dtoWithoutId = createSampleDTO.apply(null, RandomUtils.nextLong()); assertThat(dto.equals(dtoWithoutId)).isFalse(); assertThat(dtoWithoutId.equals(dto)).isFalse(); @@ -55,16 +66,16 @@ public abstract class AccessMappingsUnitTestBase { @Test public void shouldImplementHashCodeJustUsingClassAndId() { final long randomId = RandomUtils.nextLong(); - final D dto = createSampleDto(randomId); + final D dto = createSampleDTO.apply(randomId, RandomUtils.nextLong()); assertThat(dto.hashCode()).isEqualTo(Objects.hashCode(randomId)); - final D dtoWithoutId = createRandomDto(null); + final D dtoWithoutId = createSampleDTO.apply(null, RandomUtils.nextLong()); assertThat(dtoWithoutId.hashCode()).isEqualTo(Objects.hashCode(null)); } @Test public void shouldImplementAccessMappings() { - assertThat(getDtoClass().getInterfaces()).as("must implement " + AccessMappings.class).contains(AccessMappings.class); + assertThat(dtoClass.getInterfaces()).as("must implement " + AccessMappings.class).contains(AccessMappings.class); } @Test @@ -79,10 +90,6 @@ public abstract class AccessMappingsUnitTestBase { // --- only test fixture below --- - protected abstract D createSampleDto(final Long id); - - protected abstract D createRandomDto(final Long id); - protected AccessRightsMatcher initAccessFor(final Class dtoClass, final Role role) { return new AccessRightsMatcher(dtoClass, role, AccessFor::init); } @@ -195,24 +202,19 @@ public abstract class AccessMappingsUnitTestBase { } private void shouldImplementJsonComponent(final Class expectedSuperclass) { - final Class dtoClass = getDtoClass(); - for (Class declaredClass: dtoClass.getDeclaredClasses()) { - if (expectedSuperclass.isAssignableFrom(declaredClass) ) { - assertThat( declaredClass.isAnnotationPresent(JsonComponent.class) ) + for (Class declaredClass : dtoClass.getDeclaredClasses()) { + if (expectedSuperclass.isAssignableFrom(declaredClass)) { + assertThat(declaredClass.isAnnotationPresent(JsonComponent.class)) .as(declaredClass + " requires @" + JsonComponent.class.getSimpleName()).isTrue(); - assertThat( ReflectionUtil.determineGenericClassParameter(declaredClass, expectedSuperclass, 0)) + assertThat(ReflectionUtil.determineGenericClassParameter(declaredClass, expectedSuperclass, 0)) .as(declaredClass + " must resolve generic parameter of " + expectedSuperclass + " to type of DTO").isEqualTo(dtoClass); - assertThat(Modifier.isPublic(declaredClass.getModifiers()) ).as(declaredClass + " must be public").isTrue(); - assertThat(Modifier.isStatic(declaredClass.getModifiers()) ).as(declaredClass + " must be static").isTrue(); - assertThat(Modifier.isFinal(declaredClass.getModifiers()) ).as(declaredClass + " must not be final").isFalse(); - assertThat(Modifier.isAbstract(declaredClass.getModifiers()) ).as(declaredClass + " must not be abstract").isFalse(); + assertThat(Modifier.isPublic(declaredClass.getModifiers())).as(declaredClass + " must be public").isTrue(); + assertThat(Modifier.isStatic(declaredClass.getModifiers())).as(declaredClass + " must be static").isTrue(); + assertThat(Modifier.isFinal(declaredClass.getModifiers())).as(declaredClass + " must not be final").isFalse(); + assertThat(Modifier.isAbstract(declaredClass.getModifiers())).as(declaredClass + " must not be abstract").isFalse(); return; } } fail("no " + expectedSuperclass + " defined for " + dtoClass); } - - private Class getDtoClass() { - return ReflectionUtil.determineGenericClassParameter(this.getClass(), AccessMappingsUnitTestBase.class, 0); - } } diff --git a/src/test/java/org/hostsharing/hsadminng/service/dto/AssetDTOUnitTest.java b/src/test/java/org/hostsharing/hsadminng/service/dto/AssetDTOUnitTest.java index 31d7912a..5ccea384 100644 --- a/src/test/java/org/hostsharing/hsadminng/service/dto/AssetDTOUnitTest.java +++ b/src/test/java/org/hostsharing/hsadminng/service/dto/AssetDTOUnitTest.java @@ -12,6 +12,10 @@ import java.time.LocalDate; public class AssetDTOUnitTest extends AccessMappingsUnitTestBase { + public AssetDTOUnitTest() { + super(AssetDTO.class, AssetDTOUnitTest::createSampleDTO, AssetDTOUnitTest::createRandomDTO); + } + @Test public void shouldHaveProperAccessForAdmin() { initAccessFor(AssetDTO.class, Role.ADMIN).shouldBeExactlyFor( @@ -44,24 +48,20 @@ public class AssetDTOUnitTest extends AccessMappingsUnitTestBase { // --- only test fixture below --- - @Override - public AssetDTO createSampleDto(final Long id) { + public static AssetDTO createSampleDTO(final Long id, final Long parentId) { final AssetDTO dto = new AssetDTO(); dto.setId(id); dto.setDocumentDate(LocalDate.parse("2000-12-07")); dto.setAmount(new BigDecimal("512.01")); dto.setAction(AssetAction.PAYMENT); dto.setRemark("Some Remark"); - dto.setRemark(null); dto.setValueDate(LocalDate.parse("2000-12-18")); - dto.setMembershipId(888L); - dto.setMembershipId(null); + dto.setMembershipId(parentId); dto.setMembershipDisplayLabel("Some Membership"); return dto; } - @Override - public AssetDTO createRandomDto(final Long id) { + public static AssetDTO createRandomDTO(final Long id, final Long parentId) { final AssetDTO dto = new AssetDTO(); dto.setId(id); final LocalDate randomDate = LocalDate.parse("2000-12-07").plusDays(RandomUtils.nextInt(1, 999)); @@ -70,7 +70,7 @@ public class AssetDTOUnitTest extends AccessMappingsUnitTestBase { dto.setAction(RandomUtil.generateEnumValue(AssetAction.class)); dto.setRemark(RandomStringUtils.randomAlphanumeric(20)); dto.setValueDate(randomDate.plusDays(RandomUtils.nextInt(1, 99))); - dto.setMembershipId(RandomUtils.nextLong()); + dto.setMembershipId(parentId); dto.setMembershipDisplayLabel("The Membership #" + dto.getMembershipId()); return dto; } diff --git a/src/test/java/org/hostsharing/hsadminng/service/dto/ShareDTOUnitTest.java b/src/test/java/org/hostsharing/hsadminng/service/dto/ShareDTOUnitTest.java index 73a442ae..91fb8a77 100644 --- a/src/test/java/org/hostsharing/hsadminng/service/dto/ShareDTOUnitTest.java +++ b/src/test/java/org/hostsharing/hsadminng/service/dto/ShareDTOUnitTest.java @@ -11,6 +11,10 @@ import java.time.LocalDate; public class ShareDTOUnitTest extends AccessMappingsUnitTestBase { + public ShareDTOUnitTest() { + super(ShareDTO.class, ShareDTOUnitTest::createSampleDTO, ShareDTOUnitTest::createRandomDTO); + } + @Test public void shouldHaveProperAccessForAdmin() { initAccessFor(ShareDTO.class, Role.ADMIN).shouldBeExactlyFor( @@ -43,11 +47,10 @@ public class ShareDTOUnitTest extends AccessMappingsUnitTestBase { // --- only test fixture below --- - @Override - public ShareDTO createSampleDto(final Long id) { + public static ShareDTO createSampleDTO(final Long id, final Long parentId) { final ShareDTO dto = new ShareDTO(); dto.setId(id); - dto.setMembershipId(888L); + dto.setMembershipId(parentId); dto.setAction(ShareAction.SUBSCRIPTION); dto.setQuantity(3); dto.setDocumentDate(LocalDate.parse("2019-04-22")); @@ -57,11 +60,10 @@ public class ShareDTOUnitTest extends AccessMappingsUnitTestBase { return dto; } - @Override - public ShareDTO createRandomDto(final Long id) { + public static ShareDTO createRandomDTO(final Long id, final Long parentId) { final ShareDTO dto = new ShareDTO(); dto.setId(id); - dto.setMembershipId(RandomUtils.nextLong()); + dto.setMembershipId(parentId); dto.setAction(RandomUtil.generateEnumValue(ShareAction.class)); dto.setQuantity(RandomUtils.nextInt()); final LocalDate randomDate = LocalDate.parse("2000-12-07").plusDays(RandomUtils.nextInt(1, 999));