Skip to content

Commit 89eb5f1

Browse files
committed
SeriesImportServiceImpl.saveParsedData(): add unit tests.
Fix #683 No functional changes.
1 parent 43f4c93 commit 89eb5f1

File tree

3 files changed

+142
-1
lines changed

3 files changed

+142
-1
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ public String getDownloadedContent(Integer requestId) {
147147
return seriesImportDao.findRawContentByRequestId(requestId);
148148
}
149149

150-
// TODO: add unit tests
151150
@Override
152151
@Transactional
153152
public void saveParsedData(Integer requestId, RawParsedDataDto data) {

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

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,15 @@ import org.slf4j.helpers.NOPLogger
2929
import org.springframework.context.ApplicationEventPublisher
3030

3131
import ru.mystamps.web.controller.dto.RequestImportForm
32+
import ru.mystamps.web.controller.event.ParsingFailed
3233
import ru.mystamps.web.Db.SeriesImportRequestStatus
3334
import ru.mystamps.web.dao.dto.ImportRequestDto
3435
import ru.mystamps.web.dao.dto.ParsedDataDto
3536
import ru.mystamps.web.dao.SeriesImportDao
3637
import ru.mystamps.web.dao.dto.ImportSeriesDbDto
38+
import ru.mystamps.web.dao.dto.SaveParsedDataDbDto
3739
import ru.mystamps.web.service.dto.AddSeriesDto
40+
import ru.mystamps.web.service.dto.RawParsedDataDto
3841
import ru.mystamps.web.tests.DateUtils
3942
import ru.mystamps.web.tests.Random
4043

@@ -327,6 +330,135 @@ class SeriesImportServiceImplTest extends Specification {
327330
result == expectedResult
328331
}
329332

333+
//
334+
// Tests for saveParsedData()
335+
//
336+
337+
def 'saveParsedData() should throw exception when request id is null'() {
338+
when:
339+
service.saveParsedData(null, TestObjects.createRawParsedDataDto())
340+
then:
341+
thrown IllegalArgumentException
342+
}
343+
344+
def 'saveParsedData() should throw exception when parsed data is null'() {
345+
when:
346+
service.saveParsedData(Random.id(), null)
347+
then:
348+
thrown IllegalArgumentException
349+
}
350+
351+
@SuppressWarnings(['ClosureAsLastMethodParameter', 'UnnecessaryReturnKeyword'])
352+
def 'saveParsedData() should publish ParsingFailed event when couldn\'t associate extracted data'() {
353+
given:
354+
Integer expectedRequestId = Random.id()
355+
and:
356+
RawParsedDataDto parsedData = new RawParsedDataDto(
357+
Random.categoryName(),
358+
Random.countryName(),
359+
null, /* imageUrl */
360+
Random.issueYear().toString()
361+
)
362+
and:
363+
extractorService.extractCategory(_ as String) >> Collections.emptyList()
364+
extractorService.extractCountry(_ as String) >> Collections.emptyList()
365+
when:
366+
service.saveParsedData(expectedRequestId, parsedData)
367+
then:
368+
1 * eventPublisher.publishEvent({ ParsingFailed event ->
369+
assert event.requestId == expectedRequestId
370+
return true
371+
})
372+
}
373+
374+
@SuppressWarnings(['ClosureAsLastMethodParameter', 'UnnecessaryReturnKeyword'])
375+
def 'saveParsedData() should save parsed data'() {
376+
given:
377+
Integer expectedRequestId = Random.id()
378+
String expectedImageUrl = Random.url()
379+
and:
380+
RawParsedDataDto parsedData = new RawParsedDataDto(
381+
Random.categoryName(),
382+
Random.countryName(),
383+
expectedImageUrl,
384+
Random.issueYear().toString()
385+
)
386+
and:
387+
extractorService.extractCategory(_ as String) >> Collections.emptyList()
388+
extractorService.extractCountry(_ as String) >> Collections.emptyList()
389+
when:
390+
service.saveParsedData(expectedRequestId, parsedData)
391+
then:
392+
1 * seriesImportDao.addParsedContent(
393+
expectedRequestId,
394+
{ SaveParsedDataDbDto saveParsedData ->
395+
assert saveParsedData?.imageUrl == expectedImageUrl
396+
assert DateUtils.roughlyEqual(saveParsedData?.createdAt, new Date())
397+
assert DateUtils.roughlyEqual(saveParsedData?.updatedAt, new Date())
398+
return true
399+
}
400+
)
401+
}
402+
403+
@SuppressWarnings(['ClosureAsLastMethodParameter', 'UnnecessaryReturnKeyword'])
404+
def 'saveParsedData() should pass data to extractor services and save its results'() {
405+
given:
406+
Integer expectedRequestId = Random.id()
407+
String expectedCategoryName = Random.categoryName()
408+
String expectedCountryName = Random.countryName()
409+
Integer expectedReleaseYear = Random.issueYear()
410+
List<Integer> expectedCategoryIds = Random.listOfIntegers()
411+
List<Integer> expectedCountryIds = Random.listOfIntegers()
412+
Integer expectedCategoryId = expectedCategoryIds.get(0)
413+
Integer expectedCountryId = expectedCountryIds.get(0)
414+
and:
415+
RawParsedDataDto parsedData = new RawParsedDataDto(
416+
expectedCategoryName,
417+
expectedCountryName,
418+
Random.url(),
419+
expectedReleaseYear.toString()
420+
)
421+
when:
422+
service.saveParsedData(expectedRequestId, parsedData)
423+
then:
424+
1 * extractorService.extractCategory(expectedCategoryName) >> expectedCategoryIds
425+
and:
426+
1 * extractorService.extractCountry(expectedCountryName) >> expectedCountryIds
427+
and:
428+
1 * extractorService.extractReleaseYear(expectedReleaseYear.toString()) >> expectedReleaseYear
429+
and:
430+
1 * seriesImportDao.addParsedContent(
431+
expectedRequestId,
432+
{ SaveParsedDataDbDto saveParsedData ->
433+
assert saveParsedData?.categoryId == expectedCategoryId
434+
assert saveParsedData?.countryId == expectedCountryId
435+
assert saveParsedData?.releaseYear == expectedReleaseYear
436+
return true
437+
}
438+
)
439+
}
440+
441+
@SuppressWarnings('UnnecessaryReturnKeyword')
442+
def 'saveParsedData() should change request status'() {
443+
given:
444+
Integer expectedRequestId = Random.id()
445+
and:
446+
extractorService.extractCategory(_ as String) >> Collections.emptyList()
447+
extractorService.extractCountry(_ as String) >> Collections.emptyList()
448+
when:
449+
service.saveParsedData(expectedRequestId, TestObjects.createRawParsedDataDto())
450+
then:
451+
1 * seriesImportDao.changeStatus(
452+
expectedRequestId,
453+
{ Date date ->
454+
assert DateUtils.roughlyEqual(date, new Date())
455+
return true
456+
},
457+
SeriesImportRequestStatus.DOWNLOADING_SUCCEEDED,
458+
SeriesImportRequestStatus.PARSING_SUCCEEDED
459+
)
460+
}
461+
330462
//
331463
// Tests for getParsedData()
332464
//

src/test/java/ru/mystamps/web/service/TestObjects.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import ru.mystamps.web.controller.dto.AddSeriesForm;
2626
import ru.mystamps.web.dao.dto.*;
2727
import ru.mystamps.web.service.dto.AddSeriesDto;
28+
import ru.mystamps.web.service.dto.RawParsedDataDto;
2829
import ru.mystamps.web.tests.Random;
2930
import ru.mystamps.web.util.SlugUtils;
3031

@@ -203,6 +204,15 @@ public static ParsedDataDto createParsedDataDto() {
203204
);
204205
}
205206

207+
public static RawParsedDataDto createRawParsedDataDto() {
208+
return new RawParsedDataDto(
209+
Random.categoryName(),
210+
Random.countryName(),
211+
Random.url(),
212+
Random.issueYear().toString()
213+
);
214+
}
215+
206216
public static CategoryDto createCategoryDto() {
207217
String name = Random.categoryName();
208218
String slug = SlugUtils.slugify(name);

0 commit comments

Comments
 (0)