@@ -29,12 +29,15 @@ import org.slf4j.helpers.NOPLogger
2929import org.springframework.context.ApplicationEventPublisher
3030
3131import ru.mystamps.web.controller.dto.RequestImportForm
32+ import ru.mystamps.web.controller.event.ParsingFailed
3233import ru.mystamps.web.Db.SeriesImportRequestStatus
3334import ru.mystamps.web.dao.dto.ImportRequestDto
3435import ru.mystamps.web.dao.dto.ParsedDataDto
3536import ru.mystamps.web.dao.SeriesImportDao
3637import ru.mystamps.web.dao.dto.ImportSeriesDbDto
38+ import ru.mystamps.web.dao.dto.SaveParsedDataDbDto
3739import ru.mystamps.web.service.dto.AddSeriesDto
40+ import ru.mystamps.web.service.dto.RawParsedDataDto
3841import ru.mystamps.web.tests.DateUtils
3942import 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 //
0 commit comments