Skip to content

Commit 8508318

Browse files
committed
SeriesService.add(): remove uploaded file when exception occurs.
Addressed to #301
1 parent a0d6c1b commit 8508318

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

src/main/java/ru/mystamps/web/service/SeriesServiceImpl.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,15 @@ public Integer add(AddSeriesDto dto, Integer userId, boolean userCanAddComments)
152152
}
153153

154154
ImageInfoDto imageInfo = imageService.save(dto.getImage());
155-
imageService.addToSeries(id, imageInfo.getId());
155+
Integer imageId = imageInfo.getId();
156+
157+
try {
158+
imageService.addToSeries(id, imageId);
159+
160+
} catch (RuntimeException ex) { // NOPMD: AvoidCatchingGenericException
161+
imageService.removeIfPossible(imageInfo);
162+
throw ex;
163+
}
156164

157165
LOG.info("Series #{} has been created ({})", id, series);
158166

src/test/groovy/ru/mystamps/web/service/SeriesServiceImplTest.groovy

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,25 @@ class SeriesServiceImplTest extends Specification {
523523
})
524524
}
525525

526+
@SuppressWarnings(['ClosureAsLastMethodParameter', 'UnnecessaryReturnKeyword'])
527+
def "add() should remove image when exception occurs"() {
528+
given:
529+
ImageInfoDto expectedImageInfo = new ImageInfoDto(654, 'JPEG')
530+
and:
531+
imageService.addToSeries(_ as Integer, _ as Integer) >> { throw new IllegalStateException() }
532+
when:
533+
service.add(form, userId, false)
534+
then:
535+
imageService.save(_) >> expectedImageInfo
536+
and:
537+
1 * imageService.removeIfPossible({ ImageInfoDto imageInfo ->
538+
assert imageInfo == expectedImageInfo
539+
return true
540+
})
541+
and:
542+
thrown IllegalStateException
543+
}
544+
526545
//
527546
// Tests for addImageToSeries()
528547
//

0 commit comments

Comments
 (0)