From 35d6e231571e9c1b0004f37f934e9964d30c50a8 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 8 Mar 2024 09:56:25 -0600 Subject: [PATCH] CE-847 - Fix to not duplicate output records (wasn't duplicating the work, just the result screen in UI), with test to assert it. --- ...adRecordAutomationStatusesProcessStep.java | 16 ++++--- ...cordAutomationStatusesProcessStepTest.java | 44 +++++++++++++++++++ 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/automation/HealBadRecordAutomationStatusesProcessStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/automation/HealBadRecordAutomationStatusesProcessStep.java index f9f43010..84b3ab31 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/automation/HealBadRecordAutomationStatusesProcessStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/automation/HealBadRecordAutomationStatusesProcessStep.java @@ -291,12 +291,18 @@ public class HealBadRecordAutomationStatusesProcessStep implements BackendStep, new UpdateAction().execute(new UpdateInput(tableName).withRecords(recordsToUpdate).withOmitTriggeringAutomations(true)); } - for(Map.Entry entry : countByStatus.entrySet()) + /////////////////////////////////////////////////// + // on the review step, add records to the output // + /////////////////////////////////////////////////// + if(isReview) { - runBackendStepOutput.addRecord(new QRecord() - .withValue("tableName", QContext.getQInstance().getTable(tableName).getLabel()) - .withValue("badStatus", entry.getKey()) - .withValue("count", entry.getValue())); + for(Map.Entry entry : countByStatus.entrySet()) + { + runBackendStepOutput.addRecord(new QRecord() + .withValue("tableName", QContext.getQInstance().getTable(tableName).getLabel()) + .withValue("badStatus", entry.getKey()) + .withValue("count", entry.getValue())); + } } return (recordsToUpdate.size()); diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/automation/HealBadRecordAutomationStatusesProcessStepTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/automation/HealBadRecordAutomationStatusesProcessStepTest.java index caf74762..5214c5c7 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/automation/HealBadRecordAutomationStatusesProcessStepTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/automation/HealBadRecordAutomationStatusesProcessStepTest.java @@ -29,13 +29,20 @@ import java.util.Map; import com.kingsrook.qqq.backend.core.BaseTest; import com.kingsrook.qqq.backend.core.actions.automation.AutomationStatus; import com.kingsrook.qqq.backend.core.actions.automation.RecordAutomationStatusUpdater; +import com.kingsrook.qqq.backend.core.actions.processes.QProcessCallbackFactory; +import com.kingsrook.qqq.backend.core.actions.processes.RunProcessAction; import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; import com.kingsrook.qqq.backend.core.actions.tables.QueryAction; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput; +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.model.actions.tables.query.QCriteriaOperator; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterCriteria; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryInput; import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; @@ -74,6 +81,43 @@ class HealBadRecordAutomationStatusesProcessStepTest extends BaseTest + /******************************************************************************* + ** at one point, when the review step go added, we were double-adding records + ** to the output/result screen. This test verifies, if we run the full process + ** that that doesn't happen. + *******************************************************************************/ + @Test + void testTwoFailedUpdatesFullProcess() throws QException + { + QContext.getQInstance().addProcess(new HealBadRecordAutomationStatusesProcessStep().produce(QContext.getQInstance())); + + new InsertAction().execute(new InsertInput(tableName).withRecords(List.of(new QRecord(), new QRecord()))); + List records = queryAllRecords(); + RecordAutomationStatusUpdater.setAutomationStatusInRecordsAndUpdate(QContext.getQInstance().getTable(tableName), records, AutomationStatus.FAILED_UPDATE_AUTOMATIONS, null); + + assertThat(queryAllRecords()).allMatch(r -> AutomationStatus.FAILED_UPDATE_AUTOMATIONS.getId().equals(getAutomationStatus(r))); + + RunProcessInput input = new RunProcessInput(); + input.setProcessName(HealBadRecordAutomationStatusesProcessStep.NAME); + input.setCallback(QProcessCallbackFactory.forFilter(new QQueryFilter(new QFilterCriteria("id", QCriteriaOperator.IN, records.stream().map(r -> r.getValue("id")).toList())))); + RunProcessAction runProcessAction = new RunProcessAction(); + RunProcessOutput runProcessOutput = runProcessAction.execute(input); + + input.setStartAfterStep(runProcessOutput.getProcessState().getNextStepName().get()); + runProcessOutput = runProcessAction.execute(input); + + input.setStartAfterStep(runProcessOutput.getProcessState().getNextStepName().get()); + runProcessOutput = runProcessAction.execute(input); + + List outputRecords = runProcessOutput.getProcessState().getRecords(); + assertEquals(1, outputRecords.size()); + assertEquals(2, outputRecords.get(0).getValueInteger("count")); + + assertThat(queryAllRecords()).allMatch(r -> AutomationStatus.PENDING_UPDATE_AUTOMATIONS.getId().equals(getAutomationStatus(r))); + } + + + /******************************************************************************* ** *******************************************************************************/