Checkpoint on loaders tests

This commit is contained in:
2025-01-23 09:51:29 -06:00
parent 93c7fbca25
commit 634abe3822
6 changed files with 270 additions and 1 deletions

View File

@ -43,6 +43,9 @@ class AbstractMetaDataProducerBasedQQQApplicationTest extends BaseTest
{ {
QInstance qInstance = new TestApplication().defineQInstance(); QInstance qInstance = new TestApplication().defineQInstance();
assertEquals(1, qInstance.getTables().size()); assertEquals(1, qInstance.getTables().size());
assertEquals("fromProducer", qInstance.getTables().get("fromProducer").getName());
assertEquals(1, qInstance.getProcesses().size());
assertEquals("fromProducer", qInstance.getProcesses().get("fromProducer").getName());
} }

View File

@ -0,0 +1,66 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2025. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.kingsrook.qqq.backend.core.instances;
import com.kingsrook.qqq.backend.core.BaseTest;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.instances.producers.TestMetaDataProducer;
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
/*******************************************************************************
** Unit test for MetaDataProducerBasedQQQApplication
*******************************************************************************/
class MetaDataProducerBasedQQQApplicationTest extends BaseTest
{
/*******************************************************************************
**
*******************************************************************************/
@Test
void test() throws QException
{
QInstance qInstance = new MetaDataProducerBasedQQQApplication(getClass().getPackage().getName() + ".producers").defineQInstance();
assertEquals(1, qInstance.getTables().size());
assertEquals("fromProducer", qInstance.getTables().get("fromProducer").getName());
assertEquals(1, qInstance.getProcesses().size());
assertEquals("fromProducer", qInstance.getProcesses().get("fromProducer").getName());
}
/*******************************************************************************
**
*******************************************************************************/
@Test
void testConstructorThatTakeClass() throws QException
{
QInstance qInstance = new MetaDataProducerBasedQQQApplication(TestMetaDataProducer.class).defineQInstance();
assertEquals(1, qInstance.getTables().size());
assertEquals("fromProducer", qInstance.getTables().get("fromProducer").getName());
assertEquals(1, qInstance.getProcesses().size());
assertEquals("fromProducer", qInstance.getProcesses().get("fromProducer").getName());
}
}

View File

@ -0,0 +1,136 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2025. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.kingsrook.qqq.backend.core.instances.loaders;
import java.nio.charset.StandardCharsets;
import com.kingsrook.qqq.backend.core.BaseTest;
import com.kingsrook.qqq.backend.core.instances.loaders.implementations.GenericMetaDataLoader;
import com.kingsrook.qqq.backend.core.instances.loaders.implementations.QTableMetaDataLoader;
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData;
import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
/*******************************************************************************
** Unit test for AbstractMetaDataLoader
*******************************************************************************/
class AbstractMetaDataLoaderTest extends BaseTest
{
/*******************************************************************************
**
*******************************************************************************/
@Test
void testVariousPropertyTypes() throws QMetaDataLoaderException
{
QProcessMetaData process = new GenericMetaDataLoader<>(QProcessMetaData.class).fileToMetaDataObject(new QInstance(), IOUtils.toInputStream("""
class: QProcessMetaData
version: 1
name: myProcess
tableName: someTable
maxInputRecords: 1
isHidden: true
""", StandardCharsets.UTF_8), "myProcess.yaml");
assertEquals("myProcess", process.getName());
assertEquals("someTable", process.getTableName());
assertEquals(1, process.getMaxInputRecords());
assertTrue(process.getIsHidden());
}
/*******************************************************************************
**
*******************************************************************************/
@Test
void testProblems() throws QMetaDataLoaderException
{
{
QTableMetaDataLoader loader = new QTableMetaDataLoader();
loader.fileToMetaDataObject(new QInstance(), IOUtils.toInputStream("""
class: QTableMetaData
version: 1.0
name: myTable
something: foo
isHidden: hi
icon:
name: account_tree
size: big
weight: bold
fields:
id:
type: number
uniqueKeys: sure!
""", StandardCharsets.UTF_8), "myTable.yaml");
for(LoadingProblem problem : loader.getProblems())
{
System.out.println(problem);
}
}
{
GenericMetaDataLoader<QProcessMetaData> loader = new GenericMetaDataLoader<>(QProcessMetaData.class);
loader.fileToMetaDataObject(new QInstance(), IOUtils.toInputStream("""
class: QProcessMetaData
version: 1.0
name: myProcess
maxInputRecords: many
""", StandardCharsets.UTF_8), "myProcess.yaml");
for(LoadingProblem problem : loader.getProblems())
{
System.out.println(problem);
}
}
}
/*******************************************************************************
**
*******************************************************************************/
@Test
void testEnvironmentValues() throws QMetaDataLoaderException
{
System.setProperty("myProcess.tableName", "someTable");
System.setProperty("myProcess.maxInputRecords", "47");
GenericMetaDataLoader<QProcessMetaData> loader = new GenericMetaDataLoader<>(QProcessMetaData.class);
QProcessMetaData processMetaData = loader.fileToMetaDataObject(new QInstance(), IOUtils.toInputStream("""
class: QProcessMetaData
version: 1.0
name: myProcess
tableName: ${prop.myProcess.tableName}
maxInputRecords: ${prop.myProcess.maxInputRecords}
""", StandardCharsets.UTF_8), "myProcess.yaml");
assertEquals("someTable", processMetaData.getTableName());
assertEquals(47, processMetaData.getMaxInputRecords());
}
}

View File

@ -36,6 +36,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.permissions.DenyBehavior;
import com.kingsrook.qqq.backend.core.model.metadata.permissions.PermissionLevel; import com.kingsrook.qqq.backend.core.model.metadata.permissions.PermissionLevel;
import com.kingsrook.qqq.backend.core.model.metadata.tables.Capability; import com.kingsrook.qqq.backend.core.model.metadata.tables.Capability;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.tables.Tier;
import com.kingsrook.qqq.backend.core.utils.TestUtils; import com.kingsrook.qqq.backend.core.utils.TestUtils;
import com.kingsrook.qqq.backend.core.utils.YamlUtils; import com.kingsrook.qqq.backend.core.utils.YamlUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
@ -108,6 +109,16 @@ class QTableMetaDataLoaderTest extends BaseTest
## todo auditRules ## todo auditRules
## todo backendDetails ## todo backendDetails
## todo automationDetails ## todo automationDetails
sections:
- name: identity
label: Identity
icon:
name: badge
tier: T1
fieldNames:
- id
- firstName
- lastName
customizers: customizers:
postQueryRecord: postQueryRecord:
name: com.kingsrook.SomePostQuery name: com.kingsrook.SomePostQuery
@ -147,6 +158,11 @@ class QTableMetaDataLoaderTest extends BaseTest
assertEquals("com.kingsrook.SomeChecker", table.getPermissionRules().getCustomPermissionChecker().getName()); assertEquals("com.kingsrook.SomeChecker", table.getPermissionRules().getCustomPermissionChecker().getName());
assertEquals(QCodeType.JAVA, table.getPermissionRules().getCustomPermissionChecker().getCodeType()); assertEquals(QCodeType.JAVA, table.getPermissionRules().getCustomPermissionChecker().getCodeType());
assertEquals(1, table.getSections().size());
assertEquals("identity", table.getSections().get(0).getName());
assertEquals(Tier.T1, table.getSections().get(0).getTier());
assertEquals(List.of("id", "firstName", "lastName"), table.getSections().get(0).getFieldNames());
assertEquals(2, table.getCustomizers().size()); assertEquals(2, table.getCustomizers().size());
assertEquals("com.kingsrook.SomePostQuery", table.getCustomizers().get(TableCustomizers.POST_QUERY_RECORD.getRole()).getName()); assertEquals("com.kingsrook.SomePostQuery", table.getCustomizers().get(TableCustomizers.POST_QUERY_RECORD.getRole()).getName());
assertEquals("com.kingsrook.SomePreDelete", table.getCustomizers().get(TableCustomizers.PRE_DELETE_RECORD.getRole()).getName()); assertEquals("com.kingsrook.SomePreDelete", table.getCustomizers().get(TableCustomizers.PRE_DELETE_RECORD.getRole()).getName());

View File

@ -24,6 +24,7 @@ package com.kingsrook.qqq.backend.core.instances.loaders.implementations;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import com.kingsrook.qqq.backend.core.BaseTest; import com.kingsrook.qqq.backend.core.BaseTest;
import com.kingsrook.qqq.backend.core.instances.loaders.LoadingContext;
import com.kingsrook.qqq.backend.core.instances.loaders.QMetaDataLoaderException; import com.kingsrook.qqq.backend.core.instances.loaders.QMetaDataLoaderException;
import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
@ -74,7 +75,7 @@ class GenericMetaDataLoaderTest extends BaseTest
@Test @Test
void testNoValueException() void testNoValueException()
{ {
assertThatThrownBy(() -> new GenericMetaDataLoader(QBackendMetaData.class).reflectivelyMapValue(new QInstance(), null, GenericMetaDataLoaderTest.class, "rawValue")); assertThatThrownBy(() -> new GenericMetaDataLoader(QBackendMetaData.class).reflectivelyMapValue(new QInstance(), null, GenericMetaDataLoaderTest.class, "rawValue", new LoadingContext("test.yaml", "/")));
} }
} }

View File

@ -0,0 +1,47 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2024. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.kingsrook.qqq.backend.core.instances.producers.subpackage;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.metadata.MetaDataProducerInterface;
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
/*******************************************************************************
**
*******************************************************************************/
public class TestProcessMetaDataProducer implements MetaDataProducerInterface<QProcessMetaData>
{
/***************************************************************************
**
***************************************************************************/
@Override
public QProcessMetaData produce(QInstance qInstance) throws QException
{
return new QProcessMetaData().withName("fromProducer");
}
}