From 79f4a3f26b31e17efd84adaa94cb1ba7573fedbb Mon Sep 17 00:00:00 2001 From: Olli-Pekka Lehtokallio <53811784+oplekal@users.noreply.github.com> Date: Wed, 20 Nov 2024 10:14:30 +0200 Subject: [PATCH] EP-4489 (#1536) --- eperusteet/eperusteet-service/pom.xml | 4 +- .../service/impl/PerusteenOsaServiceImpl.java | 10 +- .../service/PerusteenOsaServiceDockerIT.java | 105 ++++++++++++++++++ .../service/PerusteenOsaServiceIT.java | 43 +------ .../test/AbstractDockerIntegrationTest.java | 13 +++ .../test/util/PerusteprojektiTestUtils.java | 5 + 6 files changed, 139 insertions(+), 41 deletions(-) create mode 100644 eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/PerusteenOsaServiceDockerIT.java diff --git a/eperusteet/eperusteet-service/pom.xml b/eperusteet/eperusteet-service/pom.xml index e7eea4427a..817399e792 100644 --- a/eperusteet/eperusteet-service/pom.xml +++ b/eperusteet/eperusteet-service/pom.xml @@ -422,13 +422,13 @@ org.testcontainers testcontainers - 1.19.1 + 1.20.3 test org.testcontainers postgresql - 1.19.1 + 1.20.3 test diff --git a/eperusteet/eperusteet-service/src/main/java/fi/vm/sade/eperusteet/service/impl/PerusteenOsaServiceImpl.java b/eperusteet/eperusteet-service/src/main/java/fi/vm/sade/eperusteet/service/impl/PerusteenOsaServiceImpl.java index 70e675ac07..3ee1b807d9 100644 --- a/eperusteet/eperusteet-service/src/main/java/fi/vm/sade/eperusteet/service/impl/PerusteenOsaServiceImpl.java +++ b/eperusteet/eperusteet-service/src/main/java/fi/vm/sade/eperusteet/service/impl/PerusteenOsaServiceImpl.java @@ -2,6 +2,7 @@ import fi.vm.sade.eperusteet.domain.*; import fi.vm.sade.eperusteet.domain.ammattitaitovaatimukset.AmmattitaitovaatimuksenKohdealue; +import fi.vm.sade.eperusteet.domain.permissions.PerusteenosanProjekti; import fi.vm.sade.eperusteet.domain.tutkinnonosa.OsaAlue; import fi.vm.sade.eperusteet.domain.tutkinnonosa.Osaamistavoite; import fi.vm.sade.eperusteet.domain.tutkinnonosa.TutkinnonOsa; @@ -242,7 +243,14 @@ public T update(Long perusteId, Long viiteId, if (perusteenOsaDto.getDto().getClass().equals(TekstiKappaleDto.class)) { PerusteenOsa perusteenOsa = perusteenOsaRepo.findOne(perusteenOsaDto.getDto().getId()); - if (perusteenOsaViiteRepository.findAllByPerusteenOsa(perusteenOsa).size() > 1) { + + Set perusteenosanProjektit = perusteprojektiPermissionRepository.findAllByPerusteenosa(perusteenOsa.getId()); + Peruste peruste = perusteet.findOne(perusteId); + boolean tekstikappaleKopioitava = perusteenosanProjektit.stream() + .filter(pop -> !pop.getPerusteProjektiId().equals(peruste.getPerusteprojekti().getId())) + .anyMatch(projekti -> !projekti.getTila().equals(ProjektiTila.POISTETTU)); + + if (tekstikappaleKopioitava) { PerusteenOsaViiteDto.Laaja viite = perusteenOsaViiteService.kloonaaTekstiKappale(perusteId, viiteId); lockManager.unlock(perusteenOsaDto.getDto().getId()); lockManager.lock(viite.getPerusteenOsa().getId()); diff --git a/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/PerusteenOsaServiceDockerIT.java b/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/PerusteenOsaServiceDockerIT.java new file mode 100644 index 0000000000..f2e7cda87b --- /dev/null +++ b/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/PerusteenOsaServiceDockerIT.java @@ -0,0 +1,105 @@ +package fi.vm.sade.eperusteet.service; + +import fi.vm.sade.eperusteet.domain.KoulutusTyyppi; +import fi.vm.sade.eperusteet.domain.PerusteTyyppi; +import fi.vm.sade.eperusteet.domain.PerusteenOsaViite; +import fi.vm.sade.eperusteet.domain.Perusteprojekti; +import fi.vm.sade.eperusteet.domain.ProjektiTila; +import fi.vm.sade.eperusteet.dto.peruste.PerusteenOsaViiteDto; +import fi.vm.sade.eperusteet.dto.peruste.TekstiKappaleDto; +import fi.vm.sade.eperusteet.dto.perusteprojekti.PerusteprojektiDto; +import fi.vm.sade.eperusteet.dto.util.UpdateDto; +import fi.vm.sade.eperusteet.repository.PerusteRepository; +import fi.vm.sade.eperusteet.repository.PerusteenOsaViiteRepository; +import fi.vm.sade.eperusteet.repository.PerusteprojektiRepository; +import fi.vm.sade.eperusteet.service.test.AbstractDockerIntegrationTest; +import fi.vm.sade.eperusteet.service.test.util.PerusteprojektiTestUtils; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.transaction.annotation.Transactional; + +import static org.assertj.core.api.Assertions.assertThat; + +@DirtiesContext +@ActiveProfiles(profiles = {"docker"}) +@Transactional +@SpringBootTest +public class PerusteenOsaServiceDockerIT extends AbstractDockerIntegrationTest { + + @Autowired + private PerusteenOsaService perusteenOsaService; + + @Autowired + public PerusteprojektiTestUtils ppTestUtils; + + @Autowired + private PerusteService perusteService; + + @Autowired + private PerusteenOsaViiteService perusteenOsaViiteService; + + @Autowired + private PerusteenOsaViiteRepository perusteenOsaViiteRepository; + + @Autowired + private PerusteprojektiRepository perusteprojektiRepository; + + @Autowired + private PerusteRepository perusteRepository; + + @Test + public void testSamaTekstikappaleUseammassaPerusteessaKopiointiTallennettaessa() { + startNewTransaction(); + + PerusteprojektiDto projekti1 = ppTestUtils.createPerusteprojekti(ppl -> { + ppl.setKoulutustyyppi(KoulutusTyyppi.VARHAISKASVATUS.toString()); + ppl.setTyyppi(PerusteTyyppi.NORMAALI); + }); + + PerusteenOsaViiteDto.Matala perusteenOsaViiteDto1 = perusteService.addSisaltoUUSI( + projekti1.getPeruste().getIdLong(), + null, + new PerusteenOsaViiteDto.Matala(new TekstiKappaleDto())); + PerusteenOsaViite viite1 = perusteenOsaViiteRepository.findOne(perusteenOsaViiteDto1.getId()); + + PerusteprojektiDto projekti2 = ppTestUtils.createPerusteprojekti(ppl -> { + ppl.setKoulutustyyppi(KoulutusTyyppi.VARHAISKASVATUS.toString()); + ppl.setTyyppi(PerusteTyyppi.NORMAALI); + }); + + PerusteenOsaViiteDto.Matala perusteenOsaViiteDto2 = perusteService.addSisaltoUUSI( + projekti2.getPeruste().getIdLong(), + null, + new PerusteenOsaViiteDto.Matala(new TekstiKappaleDto())); + + PerusteenOsaViite viite2 = perusteenOsaViiteRepository.findOne(perusteenOsaViiteDto2.getId()); + viite2.setPerusteenOsa(viite1.getPerusteenOsa()); + perusteenOsaViiteRepository.save(viite2); + + perusteenOsaViiteDto2 = perusteenOsaViiteService.getSisalto(projekti2.getPeruste().getIdLong(), viite2.getId(), PerusteenOsaViiteDto.Matala.class); + assertThat(perusteenOsaViiteDto1.getPerusteenOsa().getId()).isEqualTo(perusteenOsaViiteDto2.getPerusteenOsa().getId()); + + Perusteprojekti perusteProjekti1 = perusteprojektiRepository.findById(projekti1.getId()).get(); + perusteProjekti1.setTila(ProjektiTila.POISTETTU); + perusteprojektiRepository.saveAndFlush(perusteProjekti1); + + perusteenOsaService.lock(perusteenOsaViiteDto2.getPerusteenOsa().getId()); + perusteenOsaService.update(projekti2.getPeruste().getIdLong(), perusteenOsaViiteDto2.getId(), new UpdateDto<>(perusteenOsaViiteDto2.getPerusteenOsa())); + + perusteenOsaViiteDto2 = perusteenOsaViiteService.getSisalto(projekti2.getPeruste().getIdLong(), viite2.getId(), PerusteenOsaViiteDto.Matala.class); + assertThat(perusteenOsaViiteDto1.getPerusteenOsa().getId()).isEqualTo(perusteenOsaViiteDto2.getPerusteenOsa().getId()); + + perusteProjekti1.setTila(ProjektiTila.LAADINTA); + perusteprojektiRepository.saveAndFlush(perusteProjekti1); + + startNewTransaction(); + + perusteenOsaService.update(projekti2.getPeruste().getIdLong(), perusteenOsaViiteDto2.getId(), new UpdateDto<>(perusteenOsaViiteDto2.getPerusteenOsa())); + + perusteenOsaViiteDto2 = perusteenOsaViiteService.getSisalto(projekti2.getPeruste().getIdLong(), viite2.getId(), PerusteenOsaViiteDto.Matala.class); + assertThat(perusteenOsaViiteDto1.getPerusteenOsa().getId()).isNotEqualTo(perusteenOsaViiteDto2.getPerusteenOsa().getId()); + } +} diff --git a/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/PerusteenOsaServiceIT.java b/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/PerusteenOsaServiceIT.java index 6652bf3238..ca4b9d0fbe 100644 --- a/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/PerusteenOsaServiceIT.java +++ b/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/PerusteenOsaServiceIT.java @@ -8,6 +8,8 @@ import fi.vm.sade.eperusteet.domain.PerusteTila; import fi.vm.sade.eperusteet.domain.PerusteTyyppi; import fi.vm.sade.eperusteet.domain.PerusteenOsaViite; +import fi.vm.sade.eperusteet.domain.Perusteprojekti; +import fi.vm.sade.eperusteet.domain.ProjektiTila; import fi.vm.sade.eperusteet.domain.Suoritustapakoodi; import fi.vm.sade.eperusteet.domain.TekstiKappale; import fi.vm.sade.eperusteet.domain.TekstiPalanen; @@ -50,8 +52,10 @@ import fi.vm.sade.eperusteet.dto.vst.OpintokokonaisuusDto; import fi.vm.sade.eperusteet.dto.vst.TavoiteAlueDto; import fi.vm.sade.eperusteet.dto.vst.TavoitesisaltoalueDto; +import fi.vm.sade.eperusteet.repository.PerusteRepository; import fi.vm.sade.eperusteet.repository.PerusteenOsaRepository; import fi.vm.sade.eperusteet.repository.PerusteenOsaViiteRepository; +import fi.vm.sade.eperusteet.repository.PerusteprojektiRepository; import fi.vm.sade.eperusteet.repository.TutkinnonOsaRepository; import fi.vm.sade.eperusteet.service.mapping.Dto; import fi.vm.sade.eperusteet.service.mapping.DtoMapper; @@ -61,6 +65,7 @@ import org.assertj.core.util.Maps; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; @@ -638,44 +643,6 @@ public void testOsaamiskokonaisuus() { assertThat(osaamiskokonaisuusPaaAlueDto.getOsaAlueet().get(0).getTasokuvaukset().get(1).getEdistynytOsaaminenKuvaukset().get(0).get(Kieli.FI)).isEqualTo("edistynytkuvausE"); } - @Test - public void testSamaTekstikappaleUseammassaPerusteessaKopiointiTallennettaessa() { - PerusteprojektiDto projekti1 = ppTestUtils.createPerusteprojekti(ppl -> { - ppl.setKoulutustyyppi(KoulutusTyyppi.VARHAISKASVATUS.toString()); - ppl.setTyyppi(PerusteTyyppi.NORMAALI); - }); - - PerusteenOsaViiteDto.Matala perusteenOsaViiteDto1 = perusteService.addSisaltoUUSI( - projekti1.getPeruste().getIdLong(), - null, - new PerusteenOsaViiteDto.Matala(new TekstiKappaleDto())); - PerusteenOsaViite viite1 = perusteenOsaViiteRepository.findOne(perusteenOsaViiteDto1.getId()); - - - PerusteprojektiDto projekti2 = ppTestUtils.createPerusteprojekti(ppl -> { - ppl.setKoulutustyyppi(KoulutusTyyppi.VARHAISKASVATUS.toString()); - ppl.setTyyppi(PerusteTyyppi.NORMAALI); - }); - - PerusteenOsaViiteDto.Matala perusteenOsaViiteDto2 = perusteService.addSisaltoUUSI( - projekti2.getPeruste().getIdLong(), - null, - new PerusteenOsaViiteDto.Matala(new TekstiKappaleDto())); - - PerusteenOsaViite viite2 = perusteenOsaViiteRepository.findOne(perusteenOsaViiteDto2.getId()); - viite2.setPerusteenOsa(viite1.getPerusteenOsa()); - perusteenOsaViiteRepository.save(viite2); - - perusteenOsaViiteDto2 = perusteenOsaViiteService.getSisalto(projekti2.getPeruste().getIdLong(), viite2.getId(), PerusteenOsaViiteDto.Matala.class); - assertThat(perusteenOsaViiteDto1.getPerusteenOsa().getId()).isEqualTo(perusteenOsaViiteDto2.getPerusteenOsa().getId()); - - perusteenOsaService.update(projekti2.getPeruste().getIdLong(), perusteenOsaViiteDto2.getId(), new UpdateDto<>(perusteenOsaViiteDto2.getPerusteenOsa())); - - perusteenOsaViiteDto2 = perusteenOsaViiteService.getSisalto(projekti2.getPeruste().getIdLong(), viite2.getId(), PerusteenOsaViiteDto.Matala.class); - assertThat(perusteenOsaViiteDto1.getPerusteenOsa().getId()).isNotEqualTo(perusteenOsaViiteDto2.getPerusteenOsa().getId()); - - } - private void assertTavoitesisaltoalueData(TavoitesisaltoalueDto tavoitesisaltoalueDto) { assertThat(tavoitesisaltoalueDto.getNimi().get(Kieli.FI)).isEqualTo("nimi"); assertThat(tavoitesisaltoalueDto.getTeksti().get(Kieli.FI)).isEqualTo("teksti1"); diff --git a/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/test/AbstractDockerIntegrationTest.java b/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/test/AbstractDockerIntegrationTest.java index 476e75b0fc..307ccd46b6 100644 --- a/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/test/AbstractDockerIntegrationTest.java +++ b/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/test/AbstractDockerIntegrationTest.java @@ -11,6 +11,7 @@ import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.transaction.TestTransaction; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -46,4 +47,16 @@ public void invalidateAuthentication() { SecurityContextHolder.clearContext(); } + public void startNewTransaction() { + if (TestTransaction.isActive()) { + TestTransaction.end(); + } + TestTransaction.start(); + TestTransaction.flagForCommit(); + } + + public void endTransaction() { + TestTransaction.end(); + } + } diff --git a/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/test/util/PerusteprojektiTestUtils.java b/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/test/util/PerusteprojektiTestUtils.java index a3864cc42d..b83cf1b21a 100644 --- a/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/test/util/PerusteprojektiTestUtils.java +++ b/eperusteet/eperusteet-service/src/test/java/fi/vm/sade/eperusteet/service/test/util/PerusteprojektiTestUtils.java @@ -83,6 +83,11 @@ public PerusteprojektiDto createPerusteprojekti(Consumer