Compare commits
16
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
544febfc41
|
||
|
|
4262776004
|
||
|
|
f47d0f7870
|
||
|
|
4d743f2c4d | ||
|
|
a230b6f58e
|
||
|
|
9cc69d807a
|
||
|
|
12d0c09f9f
|
||
|
|
0bf2da23bb | ||
|
|
8ced11cc1d | ||
|
|
9d98f41311
|
||
|
|
49d2ea433e
|
||
|
|
67bc2d11ec
|
||
|
|
f9b832045d
|
||
|
|
8b5b29999e | ||
|
|
9442df6684 | ||
|
|
bad4c66ce0 |
No files matched your search
@@ -1,12 +1,12 @@
|
||||
version: 2.1
|
||||
setup: true
|
||||
orbs:
|
||||
qqq-orb: kingsrook/qqq-orb@0.7.16
|
||||
qqq-orb: kingsrook/qqq-orb@0.8
|
||||
workflows:
|
||||
setup:
|
||||
jobs:
|
||||
- qqq-orb/generate_pipeline:
|
||||
orb_version: 0.7.16
|
||||
orb_version: '0.8'
|
||||
filters:
|
||||
branches:
|
||||
ignore: automation/qbit-rc-pending
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
name: build
|
||||
on:
|
||||
push:
|
||||
jobs:
|
||||
maven:
|
||||
uses: self:KofTwentyTwo/ci-workflows/.gitea/workflows/maven.yaml@v1
|
||||
secrets: inherit
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
profile: qbit
|
||||
orb_version: 0.7.16
|
||||
orb_version: '0.8'
|
||||
default_branch: main
|
||||
java_version: '21'
|
||||
browsers: true
|
||||
|
||||
@@ -24,7 +24,7 @@ This QBit provides a declarative workflow engine. Define states and transitions,
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- QQQ application (v0.35.0+)
|
||||
- QQQ application (v4.1.0+)
|
||||
- Database backend configured
|
||||
|
||||
### Installation
|
||||
|
||||
@@ -23,7 +23,8 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<properties>
|
||||
<revision>0.4.0</revision>
|
||||
<revision>0.5.0-SNAPSHOT</revision>
|
||||
<qqq.version>4.1.0-RC.21</qqq.version>
|
||||
</properties>
|
||||
|
||||
<parent>
|
||||
@@ -69,6 +70,19 @@
|
||||
</scm>
|
||||
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<!-- Published QQQ 4.1 core (minimum QQQ 4.1), imported ahead of the parent's BOM. -->
|
||||
<dependency>
|
||||
<groupId>com.kingsrook.qqq</groupId>
|
||||
<artifactId>qqq-bom-pom</artifactId>
|
||||
<version>${qqq.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.kingsrook.qqq</groupId>
|
||||
@@ -86,8 +100,10 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.kingsrook.qqq</groupId>
|
||||
<!-- 0.27.0-RC.1 references com.kingsrook.qqq.backend.javalin.QJavalinMetaData, which QQQ 4.x moved to com.kingsrook.qqq.middleware.javalin
|
||||
(NoClassDefFoundError when the form adjusters register). 0.42.0-RC.2 is the published line for 4.x; its public API is a superset. -->
|
||||
<artifactId>qqq-frontend-material-dashboard</artifactId>
|
||||
<version>0.27.0-RC.1</version>
|
||||
<version>0.42.0-RC.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
||||
+2
-1
@@ -39,6 +39,7 @@ import com.kingsrook.qbits.workflows.model.Workflow;
|
||||
import com.kingsrook.qbits.workflows.model.WorkflowRevision;
|
||||
import com.kingsrook.qbits.workflows.model.WorkflowStep;
|
||||
import com.kingsrook.qqq.api.actions.GetTableApiFieldsAction;
|
||||
import com.kingsrook.qqq.api.model.actions.GetTableApiFieldsInput;
|
||||
import com.kingsrook.qqq.api.utils.ApiQueryFilterUtils;
|
||||
import com.kingsrook.qqq.backend.core.actions.tables.GetAction;
|
||||
import com.kingsrook.qqq.backend.core.context.QContext;
|
||||
@@ -254,7 +255,7 @@ public class InputRecordFilterStep extends WorkflowStepType implements WorkflowS
|
||||
String apiName = workflowRevision.getValueString("apiName");
|
||||
String apiVersion = workflowRevision.getValueString("apiVersion");
|
||||
String tableName = workflow.getValueString("tableName");
|
||||
Map<String, QFieldMetaData> tableApiFields = GetTableApiFieldsAction.getTableApiFieldMap(new GetTableApiFieldsAction.ApiNameVersionAndTableName(apiName, apiVersion, tableName));
|
||||
Map<String, QFieldMetaData> tableApiFields = GetTableApiFieldsAction.getTableApiFieldMap(new GetTableApiFieldsInput().withApiName(apiName).withVersion(apiVersion).withTableName(tableName));
|
||||
ArrayList<String> badRequestMessages = new ArrayList<>();
|
||||
ApiQueryFilterUtils.manageCriteriaFields(filter, tableApiFields, badRequestMessages, apiName, apiVersion, new QueryInput(tableName).withFilter(filter));
|
||||
errors.addAll(badRequestMessages);
|
||||
|
||||
+2
-1
@@ -31,6 +31,7 @@ import com.kingsrook.qbits.workflows.execution.WorkflowExecutionContext;
|
||||
import com.kingsrook.qbits.workflows.model.Workflow;
|
||||
import com.kingsrook.qbits.workflows.model.WorkflowRevision;
|
||||
import com.kingsrook.qqq.api.actions.GetTableApiFieldsAction;
|
||||
import com.kingsrook.qqq.api.model.actions.GetTableApiFieldsInput;
|
||||
import com.kingsrook.qqq.api.utils.ApiQueryFilterUtils;
|
||||
import com.kingsrook.qqq.backend.core.actions.tables.CountAction;
|
||||
import com.kingsrook.qqq.backend.core.actions.tables.DeleteAction;
|
||||
@@ -179,7 +180,7 @@ public class RecordWorkflowUtils
|
||||
{
|
||||
WorkflowRevision workflowRevision = context.getWorkflowRevision();
|
||||
Workflow workflow = context.getWorkflow();
|
||||
Map<String, QFieldMetaData> tableApiFields = GetTableApiFieldsAction.getTableApiFieldMap(new GetTableApiFieldsAction.ApiNameVersionAndTableName(workflowRevision.getApiName(), workflowRevision.getApiVersion(), workflow.getTableName()));
|
||||
Map<String, QFieldMetaData> tableApiFields = GetTableApiFieldsAction.getTableApiFieldMap(new GetTableApiFieldsInput().withApiName(workflowRevision.getApiName()).withVersion(workflowRevision.getApiVersion()).withTableName(workflow.getTableName()));
|
||||
List<String> badRequestMessages = new ArrayList<>();
|
||||
|
||||
CountInput countInput = new CountInput(context.getWorkflow().getTableName())
|
||||
|
||||
+2
-2
@@ -78,9 +78,9 @@ public class RunRecordWorkflowExtractStep extends ExtractViaQueryStep
|
||||
** Make sure associations are fetched (so api records have children!)
|
||||
*******************************************************************************/
|
||||
@Override
|
||||
protected void customizeInputPreQuery(QueryInput queryInput)
|
||||
protected void customizeInputPreQuery(RunBackendStepInput runBackendStepInput, QueryInput queryInput)
|
||||
{
|
||||
super.customizeInputPreQuery(queryInput);
|
||||
super.customizeInputPreQuery(runBackendStepInput, queryInput);
|
||||
queryInput.setIncludeAssociations(true);
|
||||
}
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@ public class BaseTest
|
||||
// basic definition of an instance //
|
||||
/////////////////////////////////////
|
||||
QInstance qInstance = new QInstance();
|
||||
qInstance.setAuthentication(new QAuthenticationMetaData().withType(QAuthenticationType.FULLY_ANONYMOUS));
|
||||
qInstance.withInstanceDefaultAuthentication(new QAuthenticationMetaData().withType(QAuthenticationType.FULLY_ANONYMOUS));
|
||||
qInstance.addBackend(new RDBMSBackendMetaData()
|
||||
.withName(RDBMS_BACKEND_NAME)
|
||||
.withVendor("h2")
|
||||
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
/*
|
||||
* 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.qbits.workflows.metadata;
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import com.kingsrook.qbits.workflows.BaseTest;
|
||||
import com.kingsrook.qbits.workflows.WorkflowsTestDataSource;
|
||||
import com.kingsrook.qbits.workflows.implementations.recordworkflows.RecordWorkflowsDefinition;
|
||||
import com.kingsrook.qbits.workflows.model.Workflow;
|
||||
import com.kingsrook.qbits.workflows.model.WorkflowTestScenario;
|
||||
import com.kingsrook.qqq.backend.core.actions.processes.RunProcessAction;
|
||||
import com.kingsrook.qqq.backend.core.actions.tables.InsertAction;
|
||||
import com.kingsrook.qqq.backend.core.model.actions.processes.RunProcessInput;
|
||||
import com.kingsrook.qqq.backend.core.model.actions.processes.RunProcessOutput;
|
||||
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
|
||||
import com.kingsrook.qqq.backend.core.utils.JsonUtils;
|
||||
import com.kingsrook.qqq.frontend.materialdashboard.actions.formadjuster.RunFormAdjusterProcess;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** Runs the workflows form adjusters through the current Material Dashboard
|
||||
** form-adjuster process, the same way the UI API's table form-adjuster route
|
||||
** does (path params + multipart-style form params) - not by calling them directly.
|
||||
*******************************************************************************/
|
||||
class WorkflowTestAssertionFormAdjusterTest extends BaseTest
|
||||
{
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
*******************************************************************************/
|
||||
@Test
|
||||
void testVariableNameAdjusterThroughMaterialDashboardProcess() throws Exception
|
||||
{
|
||||
|
||||
Workflow workflow = WorkflowsTestDataSource.insertWorkflowAndInitialRevision(RecordWorkflowsDefinition.WORKFLOW_TYPE, TABLE_NAME_PERSON);
|
||||
Integer scenarioId = new InsertAction().execute(new InsertInput(WorkflowTestScenario.TABLE_NAME).withRecordEntity(
|
||||
new WorkflowTestScenario().withWorkflowId(workflow.getId()).withName("s").withApiName(API_NAME).withApiVersion(V3).withApiJson("{}"))).getRecords().get(0).getValueInteger("id");
|
||||
|
||||
Map<String, Object> output = runAdjuster("WorkflowTestAssertion.variableName", RunFormAdjusterProcess.EVENT_ON_CHANGE,
|
||||
TABLE_NAME_PERSON + ".firstName", Map.of("workflowTestScenarioId", scenarioId));
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> expectedValueField = (Map<String, Object>) ((Map<String, Object>) output.get("updatedFieldMetaData")).get("expectedValue");
|
||||
assertNotNull(expectedValueField);
|
||||
assertTrue(String.valueOf(expectedValueField.get("label")).startsWith("Expected Value ("), "label: " + expectedValueField.get("label"));
|
||||
assertEquals(List.of("expectedValue"), output.get("fieldsToClear"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
**
|
||||
***************************************************************************/
|
||||
private Map<String, Object> runAdjuster(String identifier, String event, String newValue, Map<String, Object> allValues) throws Exception
|
||||
{
|
||||
Map<String, List<String>> formParams = new HashMap<>();
|
||||
formParams.put("event", List.of(event));
|
||||
formParams.put("fieldName", List.of("variableName"));
|
||||
formParams.put("newValue", List.of(newValue));
|
||||
formParams.put("allValues", List.of(JsonUtils.toJson(allValues)));
|
||||
|
||||
RunProcessInput input = new RunProcessInput();
|
||||
input.setProcessName(RunFormAdjusterProcess.NAME);
|
||||
input.setFrontendStepBehavior(RunProcessInput.FrontendStepBehavior.SKIP);
|
||||
input.addValue("pathParams", new HashMap<>(Map.of("identifier", identifier, "event", event)));
|
||||
input.addValue("formParams", (Serializable) formParams);
|
||||
|
||||
RunProcessOutput processOutput = new RunProcessAction().execute(input);
|
||||
if(processOutput.getException().isPresent())
|
||||
{
|
||||
throw (processOutput.getException().get());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> result = JsonUtils.toObject(processOutput.getValueString("responseString"), Map.class);
|
||||
return (result);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user