From 6bb3731868d8acc13ccfa47870a63656807b33a8 Mon Sep 17 00:00:00 2001 From: jez04 <david.jezek@vsb.cz> Date: Wed, 19 Mar 2025 10:17:40 +0000 Subject: [PATCH] fix: update old text --- .../structure/test/ClassStructureTest.java | 201 +++++++++++++----- 1 file changed, 146 insertions(+), 55 deletions(-) diff --git a/src/test/java/jez04/structure/test/ClassStructureTest.java b/src/test/java/jez04/structure/test/ClassStructureTest.java index e13f549..21c3023 100644 --- a/src/test/java/jez04/structure/test/ClassStructureTest.java +++ b/src/test/java/jez04/structure/test/ClassStructureTest.java @@ -2,85 +2,176 @@ package jez04.structure.test; import static org.hamcrest.MatcherAssert.assertThat; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.net.URISyntaxException; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; import java.util.Objects; -import java.util.stream.Stream; +import java.util.regex.Pattern; import org.hamcrest.Matchers; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; +import org.junit.jupiter.api.TestMethodOrder; -import cz.vsb.fei.kelvin.unittest.SrcContains; +import cz.vsb.fei.kelvin.unittest.ProjectContains; import cz.vsb.fei.kelvin.unittest.StructureHelper; import cz.vsb.fei.kelvin.unittest.TextFileContains; import cz.vsb.fei.kelvin.unittest.XmlFileContains; +import lab.data.Level; +import lab.data.Score; +import lab.storage.JpaConnector; class ClassStructureTest { StructureHelper helper = StructureHelper.getInstance(ClassStructureTest.class); - - @Test - void lombokAsDependencyTest() throws URISyntaxException { - XmlFileContains xmlFileContains = new XmlFileContains("pom.xml", "/project/dependencies/dependency/artifactId[text() = 'lombok']"); - Path root = TextFileContains.getProjectRoot(getClass()); - assertThat(root, xmlFileContains); - } @Test - void lombokAsAnnotationProcessorTest() throws URISyntaxException { - assertThat(TextFileContains.getProjectRoot(getClass()), new XmlFileContains("pom.xml", "/project/build/plugins/plugin/artifactId[text() = 'maven-compiler-plugin']")); - assertThat(TextFileContains.getProjectRoot(getClass()), new XmlFileContains("pom.xml", "/project/build/plugins/plugin/configuration/annotationProcessorPaths/path/artifactId[text() = 'lombok']")); + void jakartaAndHibernateAsDependencyTest() throws URISyntaxException { + assertThat(TextFileContains.getProjectRoot(getClass()), new XmlFileContains("pom.xml", + "/project/dependencies/dependency/artifactId[text() = 'jakarta.persistence-api']")); + assertThat(TextFileContains.getProjectRoot(getClass()), new XmlFileContains("pom.xml", + "/project/dependencies/dependency/artifactId[text() = 'hibernate-core']")); } @Test - void moduleInfoTest() throws URISyntaxException { - assertThat(TextFileContains.getProjectRoot(getClass()), new TextFileContains("module-info.java", "lombok;")); + void jakartaInModulInfoTest() throws URISyntaxException { + assertThat(TextFileContains.getProjectRoot(getClass()), + new TextFileContains("module-info.java", "jakarta.persistence;")); + assertThat(TextFileContains.getProjectRoot(getClass()), + new TextFileContains("module-info.java", "opens\\slab.data;")); } - @CsvSource({ - "Config,@Getter,1", - "Config,@.*Builder,1", - "Config,@.*Default,3" - }) - @ParameterizedTest(name = "useLombokTest in {1} annotation {2}") - void useLombokConfigTest(String className, String text, int count) throws URISyntaxException, ClassNotFoundException { - Class<?> config = helper.getClass(className); - assertThat(config, new SrcContains(text).count(count)); + @Test + void pesistenceXmlTest() throws URISyntaxException { + ProjectContains projectContains = new ProjectContains("persistence.xml"); + assertThat(TextFileContains.getProjectRoot(getClass()), projectContains); + assertThat(projectContains.getFoundFiles(), Matchers.not(Matchers.hasSize(0))); + Path persistenceXml = projectContains.getFoundFiles().getFirst(); + assertThat(persistenceXml.toAbsolutePath().toString(), + Matchers.endsWith(Paths.get("resources", "META-INF", "persistence.xml").toString())); } - @CsvSource({ - "Score,@Setter,1", - "Score,@Getter,1", - "Score,@AllArgsConstructor,1", - "Score,@EqualsAndHashCode,1", - "Score,@ToString,1" - }) - @ParameterizedTest(name = "useLombokTest in {1} annotation {2}") - void useLombokOrDataTest(String className, String text, int count) throws URISyntaxException, ClassNotFoundException { - Class<?> config = helper.getClass(className); - assertThat(config, Matchers.anyOf(new SrcContains(text).count(count), - new SrcContains("@Data").count(1))); - } - @Test - void recordTest() throws URISyntaxException { - - long recordCount = Stream.concat( - helper.getAllNonInnerClasses().stream(), - helper.getAllInnerClasses().stream()) - .filter(className -> !className.startsWith("javafx")).map(className -> { - try { - return helper.getClassDirectly(className); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - return null; - } - }).filter(Objects::nonNull).filter(clazz -> clazz.isRecord()).count(); - assertThat(recordCount, Matchers.greaterThanOrEqualTo(1L)); - + void useEnumeratedTest() throws URISyntaxException { + assertThat(TextFileContains.getProjectRoot(getClass()), + new TextFileContains("Score.java", "@Enumerated\\(\\s*EnumType.STRING\\s*\\)")); } - + @TestMethodOrder(OrderAnnotation.class) + @Nested + class JpaConnectorTests { + + private Score template = new Score(null, "Tester", 100, Level.EASY); + private JpaConnector connector; + + @BeforeEach + void init() { + connector = new JpaConnector(); + } + + @AfterEach + void cleanUp() { + connector.stop(); + } + + boolean same(Score s1, Score s2) { + return s1.getLevel() == s2.getLevel() && s1.getPoints() == s2.getPoints() + && Objects.equals(s1.getName(), s2.getName()); + } + + @Test + @Order(100) + void jpaScoreInsertTest() { + Score savedScore = connector.save(template); + assertThat(savedScore.getId(), Matchers.notNullValue()); + } + + @Test + @Order(200) + void jpaScoreReadTest() { + List<Score> savedScores = connector.getAll().stream().filter(s -> same(s, template)).toList(); + assertThat(savedScores, Matchers.not(Matchers.hasSize(0))); + } + + @Test + @Order(250) + void jpaReadSortedTest() { + for (int i = 0; i < 20; i++) { + connector.save(template.toBuilder().points(i).build()); + } + List<Score> result = connector.getFirstTen(); + assertThat(result, Matchers.hasSize(10)); + for (int i = 0; i < result.size()-1; i++) { + assertThat(result.get(i).getPoints(), Matchers.greaterThanOrEqualTo(result.get(i+1).getPoints())); + } + } + + @Test + @Order(300) + void jpaScoreModifyTest() { + List<Score> savedScores = connector.getAll().stream().filter(s -> same(s, template)).toList(); + List<Long> savedIds = savedScores.stream().map(Score::getId).toList(); + assertThat(savedScores, Matchers.not(Matchers.hasSize(0))); + for (Score score : savedScores) { + score.setLevel(Level.HARD); + connector.save(score); + } + List<Score> modifiedScores = connector.getAll().stream().filter(s -> savedIds.contains(s.getId())).toList(); + assertThat(modifiedScores, Matchers.not(Matchers.hasSize(0))); + List<Score> originalDataScores = connector.getAll().stream().filter(s -> same(s, template)).toList(); + assertThat(originalDataScores, Matchers.hasSize(0)); + } + + @Test + @Order(400) + void jpaScoreDeleteTest() { + template.setLevel(Level.HARD); + List<Score> savedScores = connector.getAll().stream().filter(s -> same(s, template)).toList(); + List<Long> savedIds = savedScores.stream().map(Score::getId).toList(); + assertThat(savedScores, Matchers.not(Matchers.hasSize(0))); + connector.delete(savedScores); + List<Score> modifiedScores = connector.getAll().stream().filter(s -> savedIds.contains(s.getId())).toList(); + assertThat(modifiedScores, Matchers.hasSize(0)); + List<Score> originalDataScores = connector.getAll().stream().filter(s -> same(s, template)).toList(); + assertThat(originalDataScores, Matchers.hasSize(0)); + } + + @Test + @Order(400) + void jpaMergeTest() { + connector.save(template); + connector.find(template.getId()); + Score copy = template.toBuilder().points(500).build(); + Score result = connector.save(copy); + assertThat(result, Matchers.not(Matchers.sameInstance(copy))); + } + + @Test + @Order(500) + void jpamodifyNoPersistNoMergeTest() throws URISyntaxException, IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, SecurityException { + template.setName("aaa"); + connector.save(template); + connector.modifyNoPersistOrMerge(template.getId(), score -> score.setName("ok")); + Object em = connector.getEntityManager(); + em.getClass().getMethod("clear").invoke(em); + + assertThat(connector.find(template.getId()).getName(), Matchers.equalTo("ok")); + TextFileContains textFileContains = new TextFileContains("JpaConnector.java", + "void\\s+modifyNoPersistOrMerge[\\s\\S]*}").multiline(true); + assertThat(TextFileContains.getProjectRoot(ClassStructureTest.class), textFileContains); + Path score = textFileContains.getFoundFiles().getFirst(); + String src = Files.readString(score); + String method = Pattern.compile("void\\s+modifyNoPersistOrMerge[\\s\\S]*}").matcher(src).results().findFirst().get().group(); + assertThat(method, Matchers.not(Matchers.containsString("persist"))); + assertThat(method, Matchers.not(Matchers.containsString("merge"))); + } + } } -- GitLab