From 68cdb660140880ef37af480124bf5ae80a5a9ccd Mon Sep 17 00:00:00 2001 From: Erick Rosdachimo Date: Tue, 3 Mar 2026 17:06:17 -0300 Subject: [PATCH 1/2] refactor: generate study ids using review-specific sequence --- .../study/create/CreateStudyReviewServiceImpl.kt | 2 +- .../kotlin/br/all/domain/services/BibtexConverterService.kt | 2 +- .../kotlin/br/all/domain/services/IdGeneratorService.kt | 6 ++++-- .../kotlin/br/all/domain/services/RisConverterService.kt | 2 +- .../infrastructure/study/StudyReviewIdGeneratorService.kt | 5 +++-- 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/review/src/main/kotlin/br/all/application/study/create/CreateStudyReviewServiceImpl.kt b/review/src/main/kotlin/br/all/application/study/create/CreateStudyReviewServiceImpl.kt index 60efb59c5..e21db6df9 100644 --- a/review/src/main/kotlin/br/all/application/study/create/CreateStudyReviewServiceImpl.kt +++ b/review/src/main/kotlin/br/all/application/study/create/CreateStudyReviewServiceImpl.kt @@ -30,7 +30,7 @@ class CreateStudyReviewServiceImpl( if(presenter.isDone()) return - val studyId = idGenerator.next() + val studyId = idGenerator.next(request.systematicStudyId) val studyReview = StudyReview.fromStudyRequestModel(studyId, request) studyReviewRepository.saveOrUpdate(studyReview.toDto()) diff --git a/review/src/main/kotlin/br/all/domain/services/BibtexConverterService.kt b/review/src/main/kotlin/br/all/domain/services/BibtexConverterService.kt index 99cf0db07..9637bdbeb 100644 --- a/review/src/main/kotlin/br/all/domain/services/BibtexConverterService.kt +++ b/review/src/main/kotlin/br/all/domain/services/BibtexConverterService.kt @@ -34,7 +34,7 @@ class BibtexConverterService(private val studyReviewIdGeneratorService: IdGenera } fun convertToStudyReview(systematicStudyId: SystematicStudyId, searchSessionId: SearchSessionID, study: Study, source: MutableSet): StudyReview { - val studyReviewId = StudyReviewId(studyReviewIdGeneratorService.next()) + val studyReviewId = StudyReviewId(studyReviewIdGeneratorService.next(systematicStudyId.value())) return StudyReview( studyReviewId, systematicStudyId, diff --git a/review/src/main/kotlin/br/all/domain/services/IdGeneratorService.kt b/review/src/main/kotlin/br/all/domain/services/IdGeneratorService.kt index dc415008e..e9e00bd96 100644 --- a/review/src/main/kotlin/br/all/domain/services/IdGeneratorService.kt +++ b/review/src/main/kotlin/br/all/domain/services/IdGeneratorService.kt @@ -1,6 +1,8 @@ package br.all.domain.services +import java.util.UUID + interface IdGeneratorService { - fun next() : Long - fun reset() : Any + fun next(reviewId: UUID) : Long + fun reset(reviewId: UUID) : Any } diff --git a/review/src/main/kotlin/br/all/domain/services/RisConverterService.kt b/review/src/main/kotlin/br/all/domain/services/RisConverterService.kt index dde82d06f..846dbc76c 100644 --- a/review/src/main/kotlin/br/all/domain/services/RisConverterService.kt +++ b/review/src/main/kotlin/br/all/domain/services/RisConverterService.kt @@ -28,7 +28,7 @@ class RisConverterService(private val studyReviewIdGeneratorService: IdGenerator } fun convertToStudyReview(systematicStudyId: SystematicStudyId, searchSessionId: SearchSessionID, study: Study, source: MutableSet): StudyReview { - val studyReviewId = StudyReviewId(studyReviewIdGeneratorService.next()) + val studyReviewId = StudyReviewId(studyReviewIdGeneratorService.next(systematicStudyId.value())) return StudyReview( studyReviewId, diff --git a/review/src/main/kotlin/br/all/infrastructure/study/StudyReviewIdGeneratorService.kt b/review/src/main/kotlin/br/all/infrastructure/study/StudyReviewIdGeneratorService.kt index a81fbd067..015afda4d 100644 --- a/review/src/main/kotlin/br/all/infrastructure/study/StudyReviewIdGeneratorService.kt +++ b/review/src/main/kotlin/br/all/infrastructure/study/StudyReviewIdGeneratorService.kt @@ -3,9 +3,10 @@ package br.all.infrastructure.study import br.all.domain.services.IdGeneratorService import br.all.infrastructure.shared.SequenceGeneratorService import org.springframework.stereotype.Service +import java.util.UUID @Service class StudyReviewIdGeneratorService (private val sequenceGenerator : SequenceGeneratorService): IdGeneratorService { - override fun next() = sequenceGenerator.next(StudyReviewDocument.SEQUENCE_NAME) - override fun reset() = sequenceGenerator.reset(StudyReviewDocument.SEQUENCE_NAME) + override fun next(reviewId: UUID) = sequenceGenerator.next("${StudyReviewDocument.SEQUENCE_NAME}_$reviewId") + override fun reset(reviewId: UUID) = sequenceGenerator.reset("${StudyReviewDocument.SEQUENCE_NAME}_$reviewId") } \ No newline at end of file From 4cb3acda6ebb856d47f160e6f4c2adc5155d0d78 Mon Sep 17 00:00:00 2001 From: Erick Rosdachimo Date: Fri, 6 Mar 2026 16:07:31 -0300 Subject: [PATCH 2/2] test: update tests for review-scoped study ids --- .../all/domain/services/IdGeneratorService.kt | 2 +- .../CreateStudyReviewServiceImplTest.kt | 4 +- .../services/BibtexConverterServiceTest.kt | 64 +++++------ .../services/ConverterFactoryServiceTest.kt | 8 +- .../domain/services/FakeIdGeneratorService.kt | 6 +- .../services/ReviewSimilarityServiceTest.kt | 8 +- .../services/RisConverterServiceTest.kt | 100 +++++++++--------- .../services/ScoreCalculatorServiceTest.kt | 8 +- .../controller/SearchSessionControllerTest.kt | 2 +- .../controller/StudyReviewControllerTest.kt | 69 ++++++------ .../MongoStudyReviewRepositoryTest.kt | 32 +++--- 11 files changed, 152 insertions(+), 151 deletions(-) diff --git a/review/src/main/kotlin/br/all/domain/services/IdGeneratorService.kt b/review/src/main/kotlin/br/all/domain/services/IdGeneratorService.kt index e9e00bd96..22ceb6f83 100644 --- a/review/src/main/kotlin/br/all/domain/services/IdGeneratorService.kt +++ b/review/src/main/kotlin/br/all/domain/services/IdGeneratorService.kt @@ -3,6 +3,6 @@ package br.all.domain.services import java.util.UUID interface IdGeneratorService { - fun next(reviewId: UUID) : Long + fun next(reviewId: UUID): Long fun reset(reviewId: UUID) : Any } diff --git a/review/src/test/kotlin/br/all/application/study/create/CreateStudyReviewServiceImplTest.kt b/review/src/test/kotlin/br/all/application/study/create/CreateStudyReviewServiceImplTest.kt index c4d2934f3..e7c113258 100644 --- a/review/src/test/kotlin/br/all/application/study/create/CreateStudyReviewServiceImplTest.kt +++ b/review/src/test/kotlin/br/all/application/study/create/CreateStudyReviewServiceImplTest.kt @@ -61,12 +61,12 @@ class CreateStudyReviewServiceImplTest { val request = factory.createRequestModel() preconditionCheckerMocking.makeEverythingWork() - every { idGenerator.next() } returns studyReviewId + every { idGenerator.next(factory.systematicStudyId) } returns studyReviewId sut.createFromStudy(presenter, request) verify(exactly = 1) { - idGenerator.next() + idGenerator.next(factory.systematicStudyId) studyReviewRepository.saveOrUpdate(any()) presenter.prepareSuccessView(any()) } diff --git a/review/src/test/kotlin/br/all/domain/services/BibtexConverterServiceTest.kt b/review/src/test/kotlin/br/all/domain/services/BibtexConverterServiceTest.kt index fc802c4c7..552a28282 100644 --- a/review/src/test/kotlin/br/all/domain/services/BibtexConverterServiceTest.kt +++ b/review/src/test/kotlin/br/all/domain/services/BibtexConverterServiceTest.kt @@ -5,7 +5,7 @@ import br.all.domain.model.search.SearchSessionID import br.all.domain.model.study.* import br.all.domain.shared.exception.bibtex.BibtexParseException import org.junit.jupiter.api.* -import java.util.* +import java.util.UUID.randomUUID import kotlin.test.assertEquals import kotlin.test.assertTrue @@ -25,7 +25,7 @@ class BibtexConverterServiceTest { @AfterEach fun teardown() { val fake = idGeneratorService as FakeIdGeneratorService - fake.reset() + fake.reset(randomUUID()) } @Nested @@ -35,8 +35,8 @@ class BibtexConverterServiceTest { fun `Should create a StudyReview list from multiple bibtex entries as input`() { val bibtex = BibtexTestData.testInputs["multiple bibtex entries"]!! val studyReviewList = sut.convertManyToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), bibtex, source = mutableSetOf("Compendex") ) @@ -48,8 +48,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid article"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -83,8 +83,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid inproceedings"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -115,8 +115,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid techreport"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -147,8 +147,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid book"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -177,8 +177,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid proceedings"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -209,8 +209,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid phdthesis"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -239,8 +239,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid mastersthesis"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -269,8 +269,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid inbook"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -301,8 +301,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid booklet"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -331,8 +331,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid manual"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -361,8 +361,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid misc"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -391,8 +391,8 @@ class BibtexConverterServiceTest { val bibtex = BibtexTestData.testInputs["valid unpublished"]!! val study = sut.convert(bibtex) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -424,8 +424,8 @@ class BibtexConverterServiceTest { fun `convertManyToStudyReview should not accept a blank bibtex entry as input`() { assertThrows { sut.convertManyToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), "", source = mutableSetOf("Compendex") ) @@ -451,8 +451,8 @@ class BibtexConverterServiceTest { fun `Should create a StudyReview list from multiple bibtex entries even when there are invalid entries`() { val bibtex = BibtexTestData.testInputs["multiple bibtex entries with some invalid"]!! val studyReviewList = sut.convertManyToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), bibtex, source = mutableSetOf("Compendex") ) diff --git a/review/src/test/kotlin/br/all/domain/services/ConverterFactoryServiceTest.kt b/review/src/test/kotlin/br/all/domain/services/ConverterFactoryServiceTest.kt index 0242ecd11..0f4d44b66 100644 --- a/review/src/test/kotlin/br/all/domain/services/ConverterFactoryServiceTest.kt +++ b/review/src/test/kotlin/br/all/domain/services/ConverterFactoryServiceTest.kt @@ -7,7 +7,7 @@ import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test -import java.util.* +import java.util.UUID.randomUUID import kotlin.test.assertEquals @Tag("IntegrationTest") @@ -32,19 +32,19 @@ class ConverterFactoryServiceTest { @AfterEach fun teardown() { val fake = idGeneratorService as FakeIdGeneratorService - fake.reset() + fake.reset(randomUUID()) } @Test fun `Should return study review successfully`() { val bibtex = BibtexTestData.testInputs["multiple bibtex entries"]!! - val studyReviewList = sut.extractReferences(SystematicStudyId(UUID.randomUUID()), SearchSessionID(UUID.randomUUID()), bibtex, mutableSetOf("example source")) + val studyReviewList = sut.extractReferences(SystematicStudyId(randomUUID()), SearchSessionID(randomUUID()), bibtex, mutableSetOf("example source")) assertEquals(7, studyReviewList.first.size) } @Test fun `Should correctly identify a ris file`(){ val ris = risInput["multiple RIS entries"]!! - val studyReviewList = sut.extractReferences(SystematicStudyId(UUID.randomUUID()), SearchSessionID(UUID.randomUUID()),ris, mutableSetOf("example source")) + val studyReviewList = sut.extractReferences(SystematicStudyId(randomUUID()), SearchSessionID(randomUUID()),ris, mutableSetOf("example source")) assertEquals(3, studyReviewList.first.size) } } \ No newline at end of file diff --git a/review/src/test/kotlin/br/all/domain/services/FakeIdGeneratorService.kt b/review/src/test/kotlin/br/all/domain/services/FakeIdGeneratorService.kt index cf7e10514..e8700e1e4 100644 --- a/review/src/test/kotlin/br/all/domain/services/FakeIdGeneratorService.kt +++ b/review/src/test/kotlin/br/all/domain/services/FakeIdGeneratorService.kt @@ -1,9 +1,9 @@ package br.all.domain.services -import br.all.domain.services.IdGeneratorService +import java.util.UUID object FakeIdGeneratorService : IdGeneratorService { private var currentId = 1L - override fun next() = currentId++ - override fun reset() = run { currentId = 1L } + override fun next(reviewId: UUID) = currentId++ + override fun reset(reviewId: UUID) = run { currentId = 1L } } \ No newline at end of file diff --git a/review/src/test/kotlin/br/all/domain/services/ReviewSimilarityServiceTest.kt b/review/src/test/kotlin/br/all/domain/services/ReviewSimilarityServiceTest.kt index 72993f0fd..e603a5165 100644 --- a/review/src/test/kotlin/br/all/domain/services/ReviewSimilarityServiceTest.kt +++ b/review/src/test/kotlin/br/all/domain/services/ReviewSimilarityServiceTest.kt @@ -9,7 +9,7 @@ import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Tag import org.junit.jupiter.api.assertAll -import java.util.UUID +import java.util.UUID.randomUUID import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFalse @@ -23,8 +23,8 @@ class ReviewSimilarityServiceTest { private lateinit var levenshteinCalculator: LevenshteinSimilarityCalculatorImpl private lateinit var converter: BibtexConverterService private lateinit var idGeneratorService: IdGeneratorService - private val systematicStudyId = SystematicStudyId(UUID.randomUUID()) - private val searchSessionId = SearchSessionID(UUID.randomUUID()) + private val systematicStudyId = SystematicStudyId(randomUUID()) + private val searchSessionId = SearchSessionID(randomUUID()) private val source = mutableSetOf("Test") private val titleThreshold = 0.8 private val abstractThreshold = 0.8 @@ -41,7 +41,7 @@ class ReviewSimilarityServiceTest { @AfterEach fun teardown() { val fake = idGeneratorService as FakeIdGeneratorService - fake.reset() + fake.reset(randomUUID()) } @Test diff --git a/review/src/test/kotlin/br/all/domain/services/RisConverterServiceTest.kt b/review/src/test/kotlin/br/all/domain/services/RisConverterServiceTest.kt index c21ed088f..df383f670 100644 --- a/review/src/test/kotlin/br/all/domain/services/RisConverterServiceTest.kt +++ b/review/src/test/kotlin/br/all/domain/services/RisConverterServiceTest.kt @@ -5,7 +5,7 @@ import br.all.domain.model.search.SearchSessionID import br.all.domain.model.study.* import br.all.domain.services.RisTestData.testInput import org.junit.jupiter.api.* -import java.util.* +import java.util.UUID.randomUUID import kotlin.test.assertEquals import kotlin.test.assertTrue @@ -24,7 +24,7 @@ class RisConverterServiceTest { @AfterEach fun teardown() { val fake = idGeneratorService as FakeIdGeneratorService - fake.reset() + fake.reset(randomUUID()) } @Nested @@ -33,8 +33,8 @@ class RisConverterServiceTest { fun `Should create a StudyReview list from multiple ris entries`() { val ris = testInput["multiple RIS entries"]!! val studyReviewList = sut.convertManyToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), ris, source = mutableSetOf("Compendex") ) @@ -47,8 +47,8 @@ class RisConverterServiceTest { val art = StudyType.valueOf("ARTICLE") val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -60,8 +60,8 @@ class RisConverterServiceTest { val ris = testInput["valid RIS entrie"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -76,8 +76,8 @@ class RisConverterServiceTest { val ris = testInput["T1 test"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -92,8 +92,8 @@ class RisConverterServiceTest { val ris = testInput["valid RIS entrie"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -105,8 +105,8 @@ class RisConverterServiceTest { val ris = testInput["Y1 test"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -118,8 +118,8 @@ class RisConverterServiceTest { val ris = testInput["valid RIS entrie"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -131,8 +131,8 @@ class RisConverterServiceTest { val ris = testInput["multiple A1"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -144,8 +144,8 @@ class RisConverterServiceTest { val ris = testInput["valid RIS entrie"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -157,8 +157,8 @@ class RisConverterServiceTest { val ris = testInput["valid RIS entrie"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -170,8 +170,8 @@ class RisConverterServiceTest { val ris = testInput["valid RIS entrie"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -186,8 +186,8 @@ class RisConverterServiceTest { val ris = testInput["valid RIS entrie"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -203,8 +203,8 @@ class RisConverterServiceTest { fun `Should create a StudyReview list from multiple RIS entries as input`() { val ris = testInput["multiple RIS entries"]!! val (validStudies, invalidEntries) = sut.convertManyToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), ris, source = mutableSetOf("Compendex") ) @@ -217,8 +217,8 @@ class RisConverterServiceTest { val ris = testInput["valid RIS entrie"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -255,8 +255,8 @@ class RisConverterServiceTest { val ris = testInput["valid inproceedings"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -288,8 +288,8 @@ class RisConverterServiceTest { val ris = testInput["valid techreport"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -320,8 +320,8 @@ class RisConverterServiceTest { val ris = testInput["valid book"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -350,8 +350,8 @@ class RisConverterServiceTest { val ris = testInput["valid proceedings"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -383,8 +383,8 @@ class RisConverterServiceTest { val ris = testInput["valid masterthesis"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -413,8 +413,8 @@ class RisConverterServiceTest { val ris = testInput["valid inbook"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -443,8 +443,8 @@ class RisConverterServiceTest { val ris = testInput["valid booklet"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -473,8 +473,8 @@ class RisConverterServiceTest { val ris = testInput["valid misc"]!! val study = sut.convert(ris) val studyReview = sut.convertToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), study, source = mutableSetOf("Compendex") ) @@ -505,8 +505,8 @@ class RisConverterServiceTest { fun `convertManyToStudyReview should not accept a blank ris entry as input`() { assertThrows { sut.convertManyToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), "", source = mutableSetOf("Compendex") ) @@ -552,8 +552,8 @@ class RisConverterServiceTest { fun `should correctly parse entries that are missing non-essential fields`() { val ris = testInput["three error ris"]!! val (validStudies, invalidEntries) = sut.convertManyToStudyReview( - SystematicStudyId(UUID.randomUUID()), - SearchSessionID(UUID.randomUUID()), + SystematicStudyId(randomUUID()), + SearchSessionID(randomUUID()), ris, source = mutableSetOf("Compendex") ) diff --git a/review/src/test/kotlin/br/all/domain/services/ScoreCalculatorServiceTest.kt b/review/src/test/kotlin/br/all/domain/services/ScoreCalculatorServiceTest.kt index 228c2f31d..97c65038f 100644 --- a/review/src/test/kotlin/br/all/domain/services/ScoreCalculatorServiceTest.kt +++ b/review/src/test/kotlin/br/all/domain/services/ScoreCalculatorServiceTest.kt @@ -7,7 +7,7 @@ import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertAll -import java.util.* +import java.util.UUID.randomUUID import kotlin.test.assertEquals @Tag("IntegrationTest") @@ -17,8 +17,8 @@ class ScoreCalculatorServiceTest { private lateinit var sut: ScoreCalculatorService private lateinit var bibtexConverterService: BibtexConverterService private lateinit var idGeneratorService: IdGeneratorService - private val systematicStudyId = SystematicStudyId(UUID.randomUUID()) - private val searchSessionId = SearchSessionID(UUID.randomUUID()) + private val systematicStudyId = SystematicStudyId(randomUUID()) + private val searchSessionId = SearchSessionID(randomUUID()) private val source = mutableSetOf("Test") @BeforeEach @@ -34,7 +34,7 @@ class ScoreCalculatorServiceTest { @AfterEach fun teardown() { val fake = idGeneratorService as FakeIdGeneratorService - fake.reset() + fake.reset(randomUUID()) } @Test diff --git a/web/src/test/kotlin/br/all/search/controller/SearchSessionControllerTest.kt b/web/src/test/kotlin/br/all/search/controller/SearchSessionControllerTest.kt index 1d3fe1a22..815319b16 100644 --- a/web/src/test/kotlin/br/all/search/controller/SearchSessionControllerTest.kt +++ b/web/src/test/kotlin/br/all/search/controller/SearchSessionControllerTest.kt @@ -82,7 +82,7 @@ class SearchSessionControllerTest( protocolRepository.deleteAll() studyReviewRepository.deleteAll() testHelperService.deleteApplicationUser(user.id) - idService.reset() + idService.reset(systematicStudyId) } @Nested diff --git a/web/src/test/kotlin/br/all/study/controller/StudyReviewControllerTest.kt b/web/src/test/kotlin/br/all/study/controller/StudyReviewControllerTest.kt index 33cda86f6..adad010ab 100644 --- a/web/src/test/kotlin/br/all/study/controller/StudyReviewControllerTest.kt +++ b/web/src/test/kotlin/br/all/study/controller/StudyReviewControllerTest.kt @@ -75,12 +75,13 @@ class StudyReviewControllerTest( @BeforeEach fun setUp() { repository.deleteAll() - idService.reset() factory = TestDataFactory() systematicStudyId = factory.systematicStudyId searchSessionId = factory.searchSessionId + idService.reset(systematicStudyId) + user = testHelperService.createApplicationUser() systematicStudyRepository.deleteAll() @@ -218,7 +219,7 @@ class StudyReviewControllerTest( inner class FindTests { @Test fun `should find the study and return 200`() { - val studyReview = factory.reviewDocument(systematicStudyId, idService.next()) + val studyReview = factory.reviewDocument(systematicStudyId, idService.next(systematicStudyId)) repository.insert(studyReview) val studyId = "/${studyReview.id.studyReviewId}" @@ -242,7 +243,7 @@ class StudyReviewControllerTest( @Test fun `should not find if user is unauthorized`(){ - val studyReview = factory.reviewDocument(systematicStudyId, idService.next()) + val studyReview = factory.reviewDocument(systematicStudyId, idService.next(systematicStudyId)) repository.insert(studyReview) testHelperService.testForUnauthorizedUser(mockMvc, @@ -252,7 +253,7 @@ class StudyReviewControllerTest( @Test fun `should not find if user is unauthenticated`(){ - val studyReview = factory.reviewDocument(systematicStudyId, idService.next()) + val studyReview = factory.reviewDocument(systematicStudyId, idService.next(systematicStudyId)) repository.insert(studyReview) testHelperService.testForUnauthenticatedUser(mockMvc, @@ -262,9 +263,9 @@ class StudyReviewControllerTest( @Test fun `should find all studies and return 200`() { - repository.insert(factory.reviewDocument(systematicStudyId, idService.next(), searchSessionId, "study")) - repository.insert(factory.reviewDocument(systematicStudyId, idService.next(), searchSessionId, "study")) - repository.insert(factory.reviewDocument(UUID.randomUUID(), idService.next(), searchSessionId, "study")) + repository.insert(factory.reviewDocument(systematicStudyId, idService.next(systematicStudyId), searchSessionId, "study")) + repository.insert(factory.reviewDocument(systematicStudyId, idService.next(systematicStudyId), searchSessionId, "study")) + repository.insert(factory.reviewDocument(UUID.randomUUID(), idService.next(systematicStudyId), searchSessionId, "study")) mockMvc.perform(get(findUrl()) .with(SecurityMockMvcRequestPostProcessors.user(user)) @@ -292,14 +293,14 @@ class StudyReviewControllerTest( fun `should find all studies by source and return 200`() { repository.insert( factory.reviewDocument( - systematicStudyId, idService.next(), searchSessionId, "study", + systematicStudyId, idService.next(systematicStudyId), searchSessionId, "study", sources = setOf("ACM") ) ) - repository.insert(factory.reviewDocument(systematicStudyId, idService.next(), searchSessionId, "study")) + repository.insert(factory.reviewDocument(systematicStudyId, idService.next(systematicStudyId), searchSessionId, "study")) repository.insert( factory.reviewDocument( - UUID.randomUUID(), idService.next(), searchSessionId, "study", + UUID.randomUUID(), idService.next(systematicStudyId), searchSessionId, "study", sources = setOf("ACM") ) ) @@ -315,9 +316,9 @@ class StudyReviewControllerTest( @Test fun `should find all studies by session and return 200`() { - repository.insert(factory.reviewDocument(systematicStudyId, idService.next(), searchSessionId)) - repository.insert(factory.reviewDocument(systematicStudyId, idService.next(), UUID.randomUUID())) - repository.insert(factory.reviewDocument(UUID.randomUUID(), idService.next(), UUID.randomUUID())) + repository.insert(factory.reviewDocument(systematicStudyId, idService.next(systematicStudyId), searchSessionId)) + repository.insert(factory.reviewDocument(systematicStudyId, idService.next(systematicStudyId), UUID.randomUUID())) + repository.insert(factory.reviewDocument(UUID.randomUUID(), idService.next(systematicStudyId), UUID.randomUUID())) mockMvc.perform(get(findBySessionUrl(searchSessionId.toString())) .with(SecurityMockMvcRequestPostProcessors.user(user)) @@ -330,9 +331,9 @@ class StudyReviewControllerTest( @Test fun `should find all studies by author and return 200`() { - repository.insert(factory.reviewDocument(systematicStudyId, idService.next(), searchSessionId)) - repository.insert(factory.reviewDocument(systematicStudyId, idService.next(), UUID.randomUUID(), authors = "Test")) - repository.insert(factory.reviewDocument(UUID.randomUUID(), idService.next(), UUID.randomUUID())) + repository.insert(factory.reviewDocument(systematicStudyId, idService.next(systematicStudyId), searchSessionId)) + repository.insert(factory.reviewDocument(systematicStudyId, idService.next(systematicStudyId), UUID.randomUUID(), authors = "Test")) + repository.insert(factory.reviewDocument(UUID.randomUUID(), idService.next(systematicStudyId), UUID.randomUUID())) mockMvc.perform(get(findByAuthorUrl("Marie Curie")) .with(SecurityMockMvcRequestPostProcessors.user(user)) @@ -349,7 +350,7 @@ class StudyReviewControllerTest( inner class UpdateStatusTests { @Test fun `should update the study selection status and return 200`() { - val studyId = idService.next() + val studyId = idService.next(systematicStudyId) val statusToBeUpdated = "INCLUDED" val json = factory.validStatusUpdatePatchRequest(studyId, statusToBeUpdated) @@ -371,7 +372,7 @@ class StudyReviewControllerTest( @Test fun `should not update the study selection if the status is invalid and return 400`() { - val studyId = idService.next() + val studyId = idService.next(systematicStudyId) val statusToBeUpdated = "KILLED" val json = factory.validStatusUpdatePatchRequest(studyId, statusToBeUpdated) @@ -392,7 +393,7 @@ class StudyReviewControllerTest( @Test fun `should update the study extraction status and return 200`() { - val studyId = idService.next() + val studyId = idService.next(systematicStudyId) val statusToBeUpdated = "EXCLUDED" val json = factory.validStatusUpdatePatchRequest(studyId, statusToBeUpdated) @@ -414,7 +415,7 @@ class StudyReviewControllerTest( @Test fun `should not update the study extraction if the status is invalid and return 400`() { - val studyId = idService.next() + val studyId = idService.next(systematicStudyId) val statusToBeUpdated = "DISPATCHED" val json = factory.validStatusUpdatePatchRequest(studyId, statusToBeUpdated) @@ -435,7 +436,7 @@ class StudyReviewControllerTest( @Test fun `should update the study reading priority and return 200`() { - val studyId = idService.next() + val studyId = idService.next(systematicStudyId) val statusToBeUpdated = "HIGH" val json = factory.validStatusUpdatePatchRequest(studyId, statusToBeUpdated) @@ -457,7 +458,7 @@ class StudyReviewControllerTest( @Test fun `should not update the study reading priority if the status is invalid and return 400`() { - val studyId = idService.next() + val studyId = idService.next(systematicStudyId) val statusToBeUpdated = "NONE" val json = factory.validStatusUpdatePatchRequest(studyId, statusToBeUpdated) @@ -478,7 +479,7 @@ class StudyReviewControllerTest( @Test fun `should not update if user is unauthorized`() { - val studyId = idService.next() + val studyId = idService.next(systematicStudyId) testHelperService.testForUnauthorizedUser(mockMvc, patch(updateStatusStatus("reading-priority")) @@ -502,7 +503,7 @@ class StudyReviewControllerTest( ) { @Test fun `should handle partial success correctly by saving answers to their respective contexts`() { - val studyId = idService.next() + val studyId = idService.next(systematicStudyId) val studyReview = factory.reviewDocument(systematicStudyId, studyId).copy( qualityAnswers = mutableMapOf(), formAnswers = mutableMapOf() @@ -580,8 +581,8 @@ class StudyReviewControllerTest( @Test fun `should mark as duplicated and return 200`() { - val studyToUpdateId = idService.next() - val studyToDuplicateId = idService.next() + val studyToUpdateId = idService.next(systematicStudyId) + val studyToDuplicateId = idService.next(systematicStudyId) val studyReviewToUpdate = factory.reviewDocument(systematicStudyId, studyToUpdateId) repository.insert(studyReviewToUpdate) @@ -609,8 +610,8 @@ class StudyReviewControllerTest( @Test fun `should return 404 if study to be marked as duplicated (source) is not found`() { - val studyToUpdateId = idService.next() - val studyToDuplicateId = idService.next() + val studyToUpdateId = idService.next(systematicStudyId) + val studyToDuplicateId = idService.next(systematicStudyId) val studyReviewToUpdate = factory.reviewDocument(systematicStudyId, studyToUpdateId) repository.insert(studyReviewToUpdate) @@ -628,8 +629,8 @@ class StudyReviewControllerTest( @Test fun `should return 404 if study to update (destination) is not found`() { - val studyToUpdateId = idService.next() - val studyToDuplicateId = idService.next() + val studyToUpdateId = idService.next(systematicStudyId) + val studyToDuplicateId = idService.next(systematicStudyId) val studyReviewToDuplicate = factory.reviewDocument(systematicStudyId, studyToDuplicateId) repository.insert(studyReviewToDuplicate) @@ -647,8 +648,8 @@ class StudyReviewControllerTest( @Test fun `should not update if user is unauthorized`() { - val studyToUpdateId = idService.next() - val studyToDuplicateId = idService.next() + val studyToUpdateId = idService.next(systematicStudyId) + val studyToDuplicateId = idService.next(systematicStudyId) val duplicateIds = listOf(studyToDuplicateId) @@ -662,8 +663,8 @@ class StudyReviewControllerTest( @Test fun `should not update if user is unauthenticated`() { - val studyToUpdateId = idService.next() - val studyToDuplicateId = idService.next() + val studyToUpdateId = idService.next(systematicStudyId) + val studyToDuplicateId = idService.next(systematicStudyId) val duplicateIds = listOf(studyToDuplicateId) diff --git a/web/src/test/kotlin/br/all/study/persistence/MongoStudyReviewRepositoryTest.kt b/web/src/test/kotlin/br/all/study/persistence/MongoStudyReviewRepositoryTest.kt index 1ebed0a45..f03fdd302 100644 --- a/web/src/test/kotlin/br/all/study/persistence/MongoStudyReviewRepositoryTest.kt +++ b/web/src/test/kotlin/br/all/study/persistence/MongoStudyReviewRepositoryTest.kt @@ -31,7 +31,7 @@ class MongoStudyReviewRepositoryTest ( factory = TestDataFactory() reviewId = UUID.randomUUID() sessionId = UUID.randomUUID() - idService.reset() + idService.reset(reviewId) sut.deleteAll() } @@ -40,14 +40,14 @@ class MongoStudyReviewRepositoryTest ( @Test fun `Should insert a study review`(){ - val study = factory.reviewDocument(UUID.randomUUID(), idService.next()) + val study = factory.reviewDocument(UUID.randomUUID(), idService.next(reviewId)) sut.insert(study) assertTrue(sut.findById(study.id).toNullable() != null) } @Test fun `Should update a study review`(){ - val studyId = idService.next() + val studyId = idService.next(reviewId) val study = factory.reviewDocument(reviewId, studyId,sessionId, "study") sut.insert(study) val updatedTitle = "study review" @@ -58,9 +58,9 @@ class MongoStudyReviewRepositoryTest ( @Test fun `Should find all study reviews of a review`(){ - sut.insert(factory.reviewDocument(reviewId, idService.next())) - sut.insert(factory.reviewDocument(reviewId, idService.next())) - sut.insert(factory.reviewDocument(UUID.randomUUID(), idService.next())) + sut.insert(factory.reviewDocument(reviewId, idService.next(reviewId))) + sut.insert(factory.reviewDocument(reviewId, idService.next(reviewId))) + sut.insert(factory.reviewDocument(UUID.randomUUID(), idService.next(reviewId))) val result = sut.findAllById_SystematicStudyId(reviewId) assertTrue(result.size == 2) } @@ -69,24 +69,24 @@ class MongoStudyReviewRepositoryTest ( fun `Should find all study reviews in a review by search sources`(){ val sourceToFind = "source to find" val sources: Set = setOf(sourceToFind) - sut.insert(factory.reviewDocument(reviewId, idService.next())) - sut.insert(factory.reviewDocument(reviewId, idService.next(), sources = sources)) - sut.insert(factory.reviewDocument(UUID.randomUUID(), idService.next())) + sut.insert(factory.reviewDocument(reviewId, idService.next(reviewId))) + sut.insert(factory.reviewDocument(reviewId, idService.next(reviewId), sources = sources)) + sut.insert(factory.reviewDocument(UUID.randomUUID(), idService.next(reviewId))) val result = sut.findAllById_SystematicStudyIdAndSearchSourcesContaining(reviewId, sourceToFind) assertTrue(result.size == 1) } @Test fun `Should find all study reviews in a review by search session`(){ - sut.insert(factory.reviewDocument(reviewId, idService.next(), sessionId)) - sut.insert(factory.reviewDocument(reviewId, idService.next(), UUID.randomUUID())) - sut.insert(factory.reviewDocument(UUID.randomUUID(), idService.next())) + sut.insert(factory.reviewDocument(reviewId, idService.next(reviewId), sessionId)) + sut.insert(factory.reviewDocument(reviewId, idService.next(reviewId), UUID.randomUUID())) + sut.insert(factory.reviewDocument(UUID.randomUUID(), idService.next(reviewId))) val result = sut.findAllById_SystematicStudyIdAndSearchSessionId(reviewId, sessionId) assertTrue(result.size == 1) } @Test fun `Should update study reviews selection status`(){ - val studyId = idService.next() + val studyId = idService.next(reviewId) val studyReview = factory.reviewDocument(reviewId, studyId) sut.insert(studyReview) val newStatus = "INCLUDED" @@ -97,7 +97,7 @@ class MongoStudyReviewRepositoryTest ( @Test fun `Should find a study review in a review`(){ - val studyReview = factory.reviewDocument(reviewId, idService.next(), sessionId,"study") + val studyReview = factory.reviewDocument(reviewId, idService.next(reviewId), sessionId,"study") sut.insert(studyReview) val result = sut.findById(studyReview.id) assertEquals(studyReview.id.studyReviewId, result.toNullable()?.id?.studyReviewId) @@ -106,8 +106,8 @@ class MongoStudyReviewRepositoryTest ( @Test fun `Should generate id sequence`(){ - val id = idService.next() - val nextId = idService.next() + val id = idService.next(reviewId) + val nextId = idService.next(reviewId) assertEquals(id + 1, nextId) } } \ No newline at end of file