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