@@ -29,12 +29,15 @@ import org.slf4j.helpers.NOPLogger
29
29
import org.springframework.context.ApplicationEventPublisher
30
30
31
31
import ru.mystamps.web.controller.dto.RequestImportForm
32
+ import ru.mystamps.web.controller.event.ParsingFailed
32
33
import ru.mystamps.web.Db.SeriesImportRequestStatus
33
34
import ru.mystamps.web.dao.dto.ImportRequestDto
34
35
import ru.mystamps.web.dao.dto.ParsedDataDto
35
36
import ru.mystamps.web.dao.SeriesImportDao
36
37
import ru.mystamps.web.dao.dto.ImportSeriesDbDto
38
+ import ru.mystamps.web.dao.dto.SaveParsedDataDbDto
37
39
import ru.mystamps.web.service.dto.AddSeriesDto
40
+ import ru.mystamps.web.service.dto.RawParsedDataDto
38
41
import ru.mystamps.web.tests.DateUtils
39
42
import ru.mystamps.web.tests.Random
40
43
@@ -327,6 +330,135 @@ class SeriesImportServiceImplTest extends Specification {
327
330
result == expectedResult
328
331
}
329
332
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
+
330
462
//
331
463
// Tests for getParsedData()
332
464
//
0 commit comments