Increase rdbms assessor coverage; decrease its usage of stdout

This commit is contained in:
2025-06-13 20:07:48 -05:00
parent 7b190d810a
commit 55e372a70f
2 changed files with 58 additions and 11 deletions

View File

@ -77,22 +77,24 @@ public class QInstanceAssessor
** **
*******************************************************************************/ *******************************************************************************/
@SuppressWarnings("checkstyle:AvoidEscapedUnicodeCharacters") @SuppressWarnings("checkstyle:AvoidEscapedUnicodeCharacters")
public void printSummary() public String getSummary()
{ {
StringBuilder rs = new StringBuilder();
/////////////////////////// ///////////////////////////
// print header & errors // // print header & errors //
/////////////////////////// ///////////////////////////
if(CollectionUtils.nullSafeIsEmpty(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 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) 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)) 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) 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)) 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) for(String suggestion : suggestions)
{ {
System.out.println("\n" + suggestion + "\n"); rs.append("\n").append(suggestion).append("\n\n");
} }
} }
return (rs.toString());
} }

View File

@ -22,10 +22,17 @@
package com.kingsrook.qqq.backend.module.rdbms.model.metadata; 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.context.QContext;
import com.kingsrook.qqq.backend.core.instances.assessment.QInstanceAssessor; 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.BaseTest;
import com.kingsrook.qqq.backend.module.rdbms.TestUtils; 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 org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals;
@ -36,6 +43,9 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals;
*******************************************************************************/ *******************************************************************************/
class RDBMSBackendAssessorTest extends BaseTest 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"); TestUtils.primeTestDatabase("prime-test-database.sql");
QInstanceAssessor assessor = new QInstanceAssessor(QContext.getQInstance()); QInstanceAssessor assessor = new QInstanceAssessor(QContext.getQInstance());
assessor.assess(); assessor.assess();
assessor.printSummary(); System.out.println(assessor.getSummary());
assertEquals(0, assessor.getErrors().size()); assertEquals(0, assessor.getErrors().size());
assertEquals(0, assessor.getWarnings().size()); assertEquals(0, assessor.getWarnings().size());
assertEquals(0, assessor.getExitCode()); assertEquals(0, assessor.getExitCode());
@ -58,7 +68,40 @@ class RDBMSBackendAssessorTest extends BaseTest
** **
*******************************************************************************/ *******************************************************************************/
@Test @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 // // un-prime the database //
@ -66,7 +109,7 @@ class RDBMSBackendAssessorTest extends BaseTest
TestUtils.primeTestDatabase("drop-test-database.sql"); TestUtils.primeTestDatabase("drop-test-database.sql");
QInstanceAssessor assessor = new QInstanceAssessor(QContext.getQInstance()); QInstanceAssessor assessor = new QInstanceAssessor(QContext.getQInstance());
assessor.assess(); assessor.assess();
assessor.printSummary(); System.out.println(assessor.getSummary());
assertNotEquals(0, assessor.getErrors().size()); assertNotEquals(0, assessor.getErrors().size());
assertNotEquals(0, assessor.getExitCode()); assertNotEquals(0, assessor.getExitCode());
} }