From 634abe38224e5c6a005f02cd49580cc834a794db Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Thu, 23 Jan 2025 09:51:29 -0600 Subject: [PATCH] Checkpoint on loaders tests --- ...taDataProducerBasedQQQApplicationTest.java | 3 + ...taDataProducerBasedQQQApplicationTest.java | 66 +++++++++ .../loaders/AbstractMetaDataLoaderTest.java | 136 ++++++++++++++++++ .../loaders/QTableMetaDataLoaderTest.java | 16 +++ .../GenericMetaDataLoaderTest.java | 3 +- .../TestProcessMetaDataProducer.java | 47 ++++++ 6 files changed, 270 insertions(+), 1 deletion(-) create mode 100644 qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/MetaDataProducerBasedQQQApplicationTest.java create mode 100644 qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/AbstractMetaDataLoaderTest.java create mode 100644 qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/producers/subpackage/TestProcessMetaDataProducer.java diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/AbstractMetaDataProducerBasedQQQApplicationTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/AbstractMetaDataProducerBasedQQQApplicationTest.java index d5321bcc..c854eed1 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/AbstractMetaDataProducerBasedQQQApplicationTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/AbstractMetaDataProducerBasedQQQApplicationTest.java @@ -43,6 +43,9 @@ class AbstractMetaDataProducerBasedQQQApplicationTest extends BaseTest { QInstance qInstance = new TestApplication().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()); } diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/MetaDataProducerBasedQQQApplicationTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/MetaDataProducerBasedQQQApplicationTest.java new file mode 100644 index 00000000..2a22b7e2 --- /dev/null +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/MetaDataProducerBasedQQQApplicationTest.java @@ -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 . + */ + +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()); + } + +} \ No newline at end of file diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/AbstractMetaDataLoaderTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/AbstractMetaDataLoaderTest.java new file mode 100644 index 00000000..fb45da10 --- /dev/null +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/AbstractMetaDataLoaderTest.java @@ -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 . + */ + +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 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 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()); + } + +} \ No newline at end of file diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/QTableMetaDataLoaderTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/QTableMetaDataLoaderTest.java index 7c6aa370..cef4d89b 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/QTableMetaDataLoaderTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/QTableMetaDataLoaderTest.java @@ -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.tables.Capability; 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.YamlUtils; import org.apache.commons.io.IOUtils; @@ -108,6 +109,16 @@ class QTableMetaDataLoaderTest extends BaseTest ## todo auditRules ## todo backendDetails ## todo automationDetails + sections: + - name: identity + label: Identity + icon: + name: badge + tier: T1 + fieldNames: + - id + - firstName + - lastName customizers: postQueryRecord: name: com.kingsrook.SomePostQuery @@ -147,6 +158,11 @@ class QTableMetaDataLoaderTest extends BaseTest assertEquals("com.kingsrook.SomeChecker", table.getPermissionRules().getCustomPermissionChecker().getName()); 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("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()); diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/implementations/GenericMetaDataLoaderTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/implementations/GenericMetaDataLoaderTest.java index a42bf886..19721921 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/implementations/GenericMetaDataLoaderTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/loaders/implementations/GenericMetaDataLoaderTest.java @@ -24,6 +24,7 @@ package com.kingsrook.qqq.backend.core.instances.loaders.implementations; import java.nio.charset.StandardCharsets; 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.model.metadata.QBackendMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; @@ -74,7 +75,7 @@ class GenericMetaDataLoaderTest extends BaseTest @Test 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", "/"))); } } \ No newline at end of file diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/producers/subpackage/TestProcessMetaDataProducer.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/producers/subpackage/TestProcessMetaDataProducer.java new file mode 100644 index 00000000..5f7e6289 --- /dev/null +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/producers/subpackage/TestProcessMetaDataProducer.java @@ -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 . + */ + +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 +{ + + /*************************************************************************** + ** + ***************************************************************************/ + @Override + public QProcessMetaData produce(QInstance qInstance) throws QException + { + return new QProcessMetaData().withName("fromProducer"); + } + +}