From bd09755fc04aca317272ff87124976c0b577ec9f Mon Sep 17 00:00:00 2001 From: Teddy Date: Sun, 28 Jan 2024 19:27:05 +0100 Subject: [PATCH] ISSUE #14851: Error when deleting last test case result (#14868) * fix: error if no testCaseResult exists when updating testSuite summary state * fix: add return statement on resultsummaries update --- .../service/jdbi3/TestCaseRepository.java | 42 ++++++++++++------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestCaseRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestCaseRepository.java index f4d1da3eb00..f9dc9bcaefa 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestCaseRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestCaseRepository.java @@ -401,26 +401,14 @@ public class TestCaseRepository extends EntityRepository { } if (storedResultSummary != null) { + // if the state already exists then we'll remove it before adding the new one resultSummaries.removeIf( summary -> summary.getTestCaseName().equals(resultSummary.getTestCaseName())); } - if (!isDeleted) { - resultSummaries.add(resultSummary); - } else { - // Add the latest state when removing a state - String json = - daoCollection - .dataQualityDataTimeSeriesDao() - .getLatestExtension(testCase.getFullyQualifiedName(), TESTCASE_RESULT_EXTENSION); - TestCaseResult testCaseResult = JsonUtils.readValue(json, TestCaseResult.class); - ResultSummary newResultSummary = - getResultSummary( - testCase, testCaseResult.getTimestamp(), testCaseResult.getTestCaseStatus()); - resultSummaries.add(newResultSummary); - } + updateResultSummaries(testCase, isDeleted, resultSummaries, resultSummary); - // Update test case result summary for the test suite + // Update test case result summary attribute for the test suite testSuite.setTestCaseResultSummary(resultSummaries); daoCollection .testSuiteDAO() @@ -431,6 +419,30 @@ public class TestCaseRepository extends EntityRepository { } } + private void updateResultSummaries( + TestCase testCase, + boolean isDeleted, + List resultSummaries, + ResultSummary resultSummary) { + if (!isDeleted) { + resultSummaries.add(resultSummary); + return; + } + // If the result was deleted, we need to update the summary + // with the latest one from the database (if one exists) + String json = + daoCollection + .dataQualityDataTimeSeriesDao() + .getLatestExtension(testCase.getFullyQualifiedName(), TESTCASE_RESULT_EXTENSION); + if (json != null) { + TestCaseResult testCaseResult = JsonUtils.readValue(json, TestCaseResult.class); + ResultSummary newResultSummary = + getResultSummary( + testCase, testCaseResult.getTimestamp(), testCaseResult.getTestCaseStatus()); + resultSummaries.add(newResultSummary); + } + } + private ResultSummary findMatchingResultSummary( List resultSummaries, String testCaseNameToMatch) { return resultSummaries.stream()