From 55e372a70fd57c1579c1ae3424eab23771627082 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 13 Jun 2025 20:07:48 -0500 Subject: [PATCH] Increase rdbms assessor coverage; decrease its usage of stdout --- .../assessment/QInstanceAssessor.java | 20 +++++--- .../metadata/RDBMSBackendAssessorTest.java | 49 +++++++++++++++++-- 2 files changed, 58 insertions(+), 11 deletions(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/assessment/QInstanceAssessor.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/assessment/QInstanceAssessor.java index 08b25dfa..b1b9b2f3 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/assessment/QInstanceAssessor.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/assessment/QInstanceAssessor.java @@ -77,22 +77,24 @@ public class QInstanceAssessor ** *******************************************************************************/ @SuppressWarnings("checkstyle:AvoidEscapedUnicodeCharacters") - public void printSummary() + public String getSummary() { + StringBuilder rs = new StringBuilder(); + /////////////////////////// // print header & errors // /////////////////////////// if(CollectionUtils.nullSafeIsEmpty(errors)) { - System.out.println("Assessment passed with no errors! \uD83D\uDE0E"); + rs.append("Assessment passed with no errors! \uD83D\uDE0E\n"); } else { - System.out.println("Assessment found the following " + StringUtils.plural(errors, "error", "errors") + ": \uD83D\uDE32"); + rs.append("Assessment found the following ").append(StringUtils.plural(errors, "error", "errors")).append(": \uD83D\uDE32\n"); for(String error : errors) { - System.out.println(" - " + error); + rs.append(" - ").append(error).append("\n"); } } @@ -101,11 +103,11 @@ public class QInstanceAssessor ///////////////////////////////////// if(CollectionUtils.nullSafeHasContents(warnings)) { - System.out.println("\nAssessment found the following " + StringUtils.plural(warnings, "warning", "warnings") + ": \uD83E\uDD28"); + rs.append("\nAssessment found the following ").append(StringUtils.plural(warnings, "warning", "warnings")).append(": \uD83E\uDD28\n"); for(String warning : warnings) { - System.out.println(" - " + warning); + rs.append(" - ").append(warning).append("\n"); } } @@ -114,13 +116,15 @@ public class QInstanceAssessor ////////////////////////////////////////// if(CollectionUtils.nullSafeHasContents(suggestions)) { - System.out.println("\nThe following " + StringUtils.plural(suggestions, "fix is", "fixes are") + " suggested: \uD83E\uDD13"); + rs.append("\nThe following ").append(StringUtils.plural(suggestions, "fix is", "fixes are")).append(" suggested: \uD83E\uDD13\n"); for(String suggestion : suggestions) { - System.out.println("\n" + suggestion + "\n"); + rs.append("\n").append(suggestion).append("\n\n"); } } + + return (rs.toString()); } diff --git a/qqq-backend-module-rdbms/src/test/java/com/kingsrook/qqq/backend/module/rdbms/model/metadata/RDBMSBackendAssessorTest.java b/qqq-backend-module-rdbms/src/test/java/com/kingsrook/qqq/backend/module/rdbms/model/metadata/RDBMSBackendAssessorTest.java index 75afb935..a8774814 100644 --- a/qqq-backend-module-rdbms/src/test/java/com/kingsrook/qqq/backend/module/rdbms/model/metadata/RDBMSBackendAssessorTest.java +++ b/qqq-backend-module-rdbms/src/test/java/com/kingsrook/qqq/backend/module/rdbms/model/metadata/RDBMSBackendAssessorTest.java @@ -22,10 +22,17 @@ package com.kingsrook.qqq.backend.module.rdbms.model.metadata; +import java.sql.Connection; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.instances.assessment.QInstanceAssessor; +import com.kingsrook.qqq.backend.core.logging.QLogger; +import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType; +import com.kingsrook.qqq.backend.core.model.metadata.tables.UniqueKey; import com.kingsrook.qqq.backend.module.rdbms.BaseTest; import com.kingsrook.qqq.backend.module.rdbms.TestUtils; +import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager; +import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -36,6 +43,9 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; *******************************************************************************/ class RDBMSBackendAssessorTest extends BaseTest { + private static final QLogger LOG = QLogger.getLogger(RDBMSBackendAssessorTest.class); + + /******************************************************************************* ** @@ -46,7 +56,7 @@ class RDBMSBackendAssessorTest extends BaseTest TestUtils.primeTestDatabase("prime-test-database.sql"); QInstanceAssessor assessor = new QInstanceAssessor(QContext.getQInstance()); assessor.assess(); - assessor.printSummary(); + System.out.println(assessor.getSummary()); assertEquals(0, assessor.getErrors().size()); assertEquals(0, assessor.getWarnings().size()); assertEquals(0, assessor.getExitCode()); @@ -58,7 +68,40 @@ class RDBMSBackendAssessorTest extends BaseTest ** *******************************************************************************/ @Test - void testIssues() throws Exception + void testTableIssues() throws Exception + { + /////////////////////////////////////////////////////////////////////////////// + // start from primed database, but make a few alters to it and the meta-data // + /////////////////////////////////////////////////////////////////////////////// + TestUtils.primeTestDatabase("prime-test-database.sql"); + ConnectionManager connectionManager = new ConnectionManager(); + try(Connection connection = connectionManager.getConnection(TestUtils.defineBackend())) + { + QueryManager.executeUpdate(connection, "ALTER TABLE person ADD COLUMN suffix VARCHAR(20)"); + QueryManager.executeUpdate(connection, "ALTER TABLE person ADD UNIQUE u_name (first_name, last_name)"); + } + + QContext.getQInstance().getTable(TestUtils.TABLE_NAME_PERSON) + .withField(new QFieldMetaData("middleName", QFieldType.STRING)) + .withUniqueKey(new UniqueKey("firstName", "middleName", "lastName")); + + /////////////////////////// + // un-prime the database // + /////////////////////////// + QInstanceAssessor assessor = new QInstanceAssessor(QContext.getQInstance()); + assessor.assess(); + LOG.info(assessor.getSummary()); + assertNotEquals(0, assessor.getErrors().size()); + assertNotEquals(0, assessor.getExitCode()); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testTotalFailure() throws Exception { /////////////////////////// // un-prime the database // @@ -66,7 +109,7 @@ class RDBMSBackendAssessorTest extends BaseTest TestUtils.primeTestDatabase("drop-test-database.sql"); QInstanceAssessor assessor = new QInstanceAssessor(QContext.getQInstance()); assessor.assess(); - assessor.printSummary(); + System.out.println(assessor.getSummary()); assertNotEquals(0, assessor.getErrors().size()); assertNotEquals(0, assessor.getExitCode()); }