diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/savedviews/QuerySavedViewProcess.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/savedviews/QuerySavedViewProcess.java index f4f57516..4ac4038a 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/savedviews/QuerySavedViewProcess.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/savedviews/QuerySavedViewProcess.java @@ -29,6 +29,7 @@ import com.kingsrook.qqq.backend.core.actions.processes.BackendStep; import com.kingsrook.qqq.backend.core.actions.tables.GetAction; import com.kingsrook.qqq.backend.core.actions.tables.QueryAction; import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.exceptions.QNotFoundException; import com.kingsrook.qqq.backend.core.logging.QLogger; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput; @@ -44,6 +45,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; import com.kingsrook.qqq.backend.core.model.metadata.processes.QBackendStepMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData; import com.kingsrook.qqq.backend.core.model.savedviews.SavedView; +import static com.kingsrook.qqq.backend.core.logging.LogUtils.logPair; /******************************************************************************* @@ -78,10 +80,10 @@ public class QuerySavedViewProcess implements BackendStep public void run(RunBackendStepInput runBackendStepInput, RunBackendStepOutput runBackendStepOutput) throws QException { ActionHelper.validateSession(runBackendStepInput); + Integer savedViewId = runBackendStepInput.getValueInteger("id"); try { - Integer savedViewId = runBackendStepInput.getValueInteger("id"); if(savedViewId != null) { GetInput input = new GetInput(); @@ -89,6 +91,11 @@ public class QuerySavedViewProcess implements BackendStep input.setPrimaryKey(savedViewId); GetOutput output = new GetAction().execute(input); + if(output.getRecord() == null) + { + throw (new QNotFoundException("The requested view was not found.")); + } + runBackendStepOutput.addRecord(output.getRecord()); runBackendStepOutput.addValue("savedView", output.getRecord()); runBackendStepOutput.addValue("savedViewList", (Serializable) List.of(output.getRecord())); @@ -108,6 +115,11 @@ public class QuerySavedViewProcess implements BackendStep runBackendStepOutput.addValue("savedViewList", (Serializable) output.getRecords()); } } + catch(QNotFoundException qnfe) + { + LOG.info("View not found", logPair("savedViewId", savedViewId)); + throw (qnfe); + } catch(Exception e) { LOG.warn("Error querying for saved views", e); diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/savedviews/SavedViewProcessTests.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/savedviews/SavedViewProcessTests.java index f4474bef..304dc425 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/savedviews/SavedViewProcessTests.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/savedviews/SavedViewProcessTests.java @@ -82,7 +82,7 @@ class SavedViewProcessTests extends BaseTest runProcessInput.addValue("tableName", tableName); runProcessInput.addValue("viewJson", JsonUtils.toJson(new QQueryFilter(new QFilterCriteria("id", QCriteriaOperator.EQUALS, 47)))); RunProcessOutput runProcessOutput = new RunProcessAction().execute(runProcessInput); - List savedViewList = (List) runProcessOutput.getValues().get("savedViewList"); + List savedViewList = (List) runProcessOutput.getValues().get("savedViewList"); assertEquals(1, savedViewList.size()); savedViewId = savedViewList.get(0).getValueInteger("id"); assertNotNull(savedViewId); @@ -103,7 +103,7 @@ class SavedViewProcessTests extends BaseTest runProcessInput.setProcessName(QuerySavedViewProcess.getProcessMetaData().getName()); runProcessInput.addValue("tableName", tableName); RunProcessOutput runProcessOutput = new RunProcessAction().execute(runProcessInput); - List savedViewList = (List) runProcessOutput.getValues().get("savedViewList"); + List savedViewList = (List) runProcessOutput.getValues().get("savedViewList"); assertEquals(1, savedViewList.size()); assertEquals(1, savedViewList.get(0).getValueInteger("id")); assertEquals("My View", savedViewList.get(0).getValueString("label")); @@ -120,7 +120,7 @@ class SavedViewProcessTests extends BaseTest runProcessInput.addValue("tableName", tableName); runProcessInput.addValue("viewJson", JsonUtils.toJson(new QQueryFilter(new QFilterCriteria("id", QCriteriaOperator.EQUALS, 47)))); RunProcessOutput runProcessOutput = new RunProcessAction().execute(runProcessInput); - List savedViewList = (List) runProcessOutput.getValues().get("savedViewList"); + List savedViewList = (List) runProcessOutput.getValues().get("savedViewList"); assertEquals(1, savedViewList.size()); assertEquals(1, savedViewList.get(0).getValueInteger("id")); assertEquals("My Updated View", savedViewList.get(0).getValueString("label")); @@ -151,7 +151,7 @@ class SavedViewProcessTests extends BaseTest runProcessInput.addValue("label", "My Updated View"); runProcessInput.addValue("tableName", tableName); runProcessInput.addValue("viewJson", JsonUtils.toJson(new QQueryFilter(new QFilterCriteria("id", QCriteriaOperator.EQUALS, 47)))); - + ////////////////////////////////////////// // should throw a "duplicate" exception // ////////////////////////////////////////// @@ -183,7 +183,64 @@ class SavedViewProcessTests extends BaseTest RunProcessOutput runProcessOutput = new RunProcessAction().execute(runProcessInput); assertEquals(0, ((List) runProcessOutput.getValues().get("savedViewList")).size()); } + } + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testNotFoundThrowsProperly() throws QException + { + QInstance qInstance = QContext.getQInstance(); + new SavedViewsMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, null); + String tableName = TestUtils.TABLE_NAME_PERSON_MEMORY; + + { + //////////////////////////////////////////////////////// + // get one by id when it doesn't exist - should throw // + //////////////////////////////////////////////////////// + RunProcessInput runProcessInput = new RunProcessInput(); + runProcessInput.setProcessName(QuerySavedViewProcess.getProcessMetaData().getName()); + runProcessInput.addValue("tableName", tableName); + runProcessInput.addValue("id", -1); + assertThatThrownBy(() -> new RunProcessAction().execute(runProcessInput)) + .hasMessageContaining("view was not found") + .isInstanceOf(QUserFacingException.class); + } + + Integer savedViewId; + { + ////////////////////// + // store a new view // + ////////////////////// + RunProcessInput runProcessInput = new RunProcessInput(); + runProcessInput.setProcessName(StoreSavedViewProcess.getProcessMetaData().getName()); + runProcessInput.addValue("label", "My View"); + runProcessInput.addValue("tableName", tableName); + runProcessInput.addValue("viewJson", JsonUtils.toJson(new QQueryFilter(new QFilterCriteria("id", QCriteriaOperator.EQUALS, 47)))); + RunProcessOutput runProcessOutput = new RunProcessAction().execute(runProcessInput); + List savedViewList = (List) runProcessOutput.getValues().get("savedViewList"); + assertEquals(1, savedViewList.size()); + savedViewId = savedViewList.get(0).getValueInteger("id"); + assertNotNull(savedViewId); + } + + { + //////////////////////////////////////// + // get now with valid id, should work // + //////////////////////////////////////// + RunProcessInput runProcessInput = new RunProcessInput(); + runProcessInput.setProcessName(QuerySavedViewProcess.getProcessMetaData().getName()); + runProcessInput.addValue("tableName", tableName); + runProcessInput.addValue("id", savedViewId); + RunProcessOutput runProcessOutput = new RunProcessAction().execute(runProcessInput); + List savedViewList = (List) runProcessOutput.getValues().get("savedViewList"); + assertEquals(1, savedViewList.size()); + assertEquals(1, savedViewList.get(0).getValueInteger("id")); + assertEquals("My View", savedViewList.get(0).getValueString("label")); + } } } \ No newline at end of file