diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java index d8bb707cb..00a63a90f 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java @@ -1,5 +1,5 @@ /* - * Copyright 2006-2022 the original author or authors. + * Copyright 2006-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -320,6 +320,9 @@ public class SimpleJobRepository implements JobRepository { public void deleteJobExecution(JobExecution jobExecution) { this.ecDao.deleteExecutionContext(jobExecution); this.jobExecutionDao.deleteJobExecutionParameters(jobExecution); + for (StepExecution stepExecution : jobExecution.getStepExecutions()) { + deleteStepExecution(stepExecution); + } this.jobExecutionDao.deleteJobExecution(jobExecution); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java index 10ca56f3e..da5967961 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2006-2022 the original author or authors. + * Copyright 2006-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -51,9 +51,9 @@ import org.springframework.batch.core.repository.dao.StepExecutionDao; import org.springframework.batch.core.step.StepSupport; /** - * Test SimpleJobRepository. The majority of test cases are tested using EasyMock, - * however, there were some issues with using it for the stepExecutionDao when testing - * finding or creating steps, so an actual mock class had to be written. + * Test SimpleJobRepository. The majority of test cases are tested using Mockito, however, + * there were some issues with using it for the stepExecutionDao when testing finding or + * creating steps, so an actual mock class had to be written. * * @author Lucas Ward * @author Will Schipp @@ -345,4 +345,25 @@ class SimpleJobRepositoryTests { assertEquals(this.jobInstance, jobInstance); } + @Test + void testDeleteJobExecution() { + // given + StepExecution stepExecution1 = mock(StepExecution.class); + StepExecution stepExecution2 = mock(StepExecution.class); + JobExecution jobExecution = mock(JobExecution.class); + when(jobExecution.getStepExecutions()).thenReturn(Arrays.asList(stepExecution1, stepExecution2)); + + // when + this.jobRepository.deleteJobExecution(jobExecution); + + // then + verify(this.ecDao).deleteExecutionContext(jobExecution); + verify(this.jobExecutionDao).deleteJobExecutionParameters(jobExecution); + verify(this.ecDao).deleteExecutionContext(stepExecution1); + verify(this.stepExecutionDao).deleteStepExecution(stepExecution1); + verify(this.ecDao).deleteExecutionContext(stepExecution2); + verify(this.stepExecutionDao).deleteStepExecution(stepExecution2); + verify(this.jobExecutionDao).deleteJobExecution(jobExecution); + } + } diff --git a/spring-batch-test/src/main/java/org/springframework/batch/test/JobRepositoryTestUtils.java b/spring-batch-test/src/main/java/org/springframework/batch/test/JobRepositoryTestUtils.java index 9aea7ff7b..86391a472 100644 --- a/spring-batch-test/src/main/java/org/springframework/batch/test/JobRepositoryTestUtils.java +++ b/spring-batch-test/src/main/java/org/springframework/batch/test/JobRepositoryTestUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2006-2022 the original author or authors. + * Copyright 2006-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -142,13 +142,10 @@ public class JobRepositoryTestUtils { /** * Remove the {@link JobExecution} and its associated {@link StepExecution} instances - * Ôfrom the standard locations used by Spring Batch. + * from the standard locations used by Spring Batch. * @param jobExecution the {@link JobExecution} to delete */ public void removeJobExecution(JobExecution jobExecution) { - for (StepExecution stepExecution : jobExecution.getStepExecutions()) { - this.jobRepository.deleteStepExecution(stepExecution); - } this.jobRepository.deleteJobExecution(jobExecution); }