mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
Checkpoint on loaders tests
This commit is contained in:
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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());
|
||||||
|
@ -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", "/")));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user