From 130ab46284b1503de798019a83df2815dde60829 Mon Sep 17 00:00:00 2001 From: Nico Athanassiadis Date: Wed, 19 Feb 2025 10:31:19 +0100 Subject: [PATCH 1/4] Updated daisy api xsd Since daisy api has changed we have to update our xsd. One of the changes wade is that the api has changed from dateTime -> date Corrected affected code so it uses LocalDate. --- .../dsv/scipro/reusable/SciProUtilities.java | 18 ++++-------- core/src/main/xjb/daisy_api.xjb | 4 +++ core/src/main/xsd/daisy_api.xsd | 18 ++++++++---- .../daisy/workers/ProjectExporter.java | 28 +++++++++---------- .../io/impl/ExternalExporterDaisyImpl.java | 10 +++---- .../impl/ExternalExporterDaisyImplTest.java | 22 +++++++-------- 6 files changed, 51 insertions(+), 49 deletions(-) diff --git a/core/src/main/java/se/su/dsv/scipro/reusable/SciProUtilities.java b/core/src/main/java/se/su/dsv/scipro/reusable/SciProUtilities.java index 0ed066a174..95f37a777c 100755 --- a/core/src/main/java/se/su/dsv/scipro/reusable/SciProUtilities.java +++ b/core/src/main/java/se/su/dsv/scipro/reusable/SciProUtilities.java @@ -1,7 +1,10 @@ package se.su.dsv.scipro.reusable; -import java.time.LocalDate; -import java.util.*; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.Iterator; +import java.util.List; public final class SciProUtilities { @@ -75,15 +78,4 @@ public final class SciProUtilities { } return copy; } - - public static Calendar toCalendar(final LocalDate localDate) { - if (localDate == null) { - return null; - } else { - final Calendar calendar = Calendar.getInstance(); - calendar.clear(); - calendar.set(localDate.getYear(), localDate.getMonthValue() - 1, localDate.getDayOfMonth()); - return calendar; - } - } } diff --git a/core/src/main/xjb/daisy_api.xjb b/core/src/main/xjb/daisy_api.xjb index a50ec543ca..5efd745a6a 100644 --- a/core/src/main/xjb/daisy_api.xjb +++ b/core/src/main/xjb/daisy_api.xjb @@ -9,6 +9,10 @@ parseMethod="jakarta.xml.bind.DatatypeConverter.parseDateTime" printMethod="jakarta.xml.bind.DatatypeConverter.printDateTime" /> + + diff --git a/core/src/main/xsd/daisy_api.xsd b/core/src/main/xsd/daisy_api.xsd index 0fa8ed93e9..fa68eef856 100755 --- a/core/src/main/xsd/daisy_api.xsd +++ b/core/src/main/xsd/daisy_api.xsd @@ -375,14 +375,16 @@ - + - + + + @@ -390,13 +392,15 @@ + + - + @@ -404,7 +408,7 @@ - + @@ -475,9 +479,11 @@ - + - + + + diff --git a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java index d144f13d40..caf55a1756 100644 --- a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java +++ b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java @@ -1,19 +1,8 @@ package se.su.dsv.scipro.integration.daisy.workers; -import static com.querydsl.core.types.dsl.Expressions.anyOf; - import jakarta.inject.Inject; import jakarta.inject.Named; import jakarta.ws.rs.core.Response; -import java.time.Instant; -import java.time.Period; -import java.util.Calendar; -import java.util.Date; -import java.util.Optional; -import java.util.Set; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.stream.Stream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import se.su.dsv.scipro.daisyexternal.http.DaisyAPI; @@ -38,11 +27,22 @@ import se.su.dsv.scipro.project.Project; import se.su.dsv.scipro.project.ProjectRepo; import se.su.dsv.scipro.project.ProjectStatus; import se.su.dsv.scipro.project.QProject; -import se.su.dsv.scipro.reusable.SciProUtilities; import se.su.dsv.scipro.system.DegreeType; import se.su.dsv.scipro.system.User; import se.su.dsv.scipro.workerthreads.AbstractWorker; +import java.time.Instant; +import java.time.LocalDate; +import java.time.Period; +import java.util.Date; +import java.util.Optional; +import java.util.Set; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Stream; + +import static com.querydsl.core.types.dsl.Expressions.anyOf; + @Named public class ProjectExporter extends AbstractWorker { @@ -198,7 +198,7 @@ public class ProjectExporter extends AbstractWorker { UnitWithID unit = new UnitWithID(); unit.setId(project.getHeadSupervisor().getUnit().getIdentifier()); - Calendar startDate = SciProUtilities.toCalendar(project.getStartDate()); + LocalDate startDate = project.getStartDate(); String title = finalThesis .map(FinalThesis::getSwedishTitle) @@ -211,7 +211,7 @@ public class ProjectExporter extends AbstractWorker { thesis.setUnit(unit); thesis.setAborted(project.getProjectStatus() == ProjectStatus.INACTIVE); thesis.setStartDate(startDate); - thesis.setEndDate(SciProUtilities.toCalendar(project.getExpectedEndDate())); + thesis.setEndDate(project.getExpectedEndDate()); final ResearchAreas researchAreas = new ResearchAreas(); if (project.getResearchArea() != null && project.getResearchArea().getIdentifier() != null) { final ResearchAreaWithID researchArea2 = new ResearchAreaWithID(); diff --git a/daisy-integration/src/main/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImpl.java b/daisy-integration/src/main/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImpl.java index 7ffa26b12e..18000dcea1 100755 --- a/daisy-integration/src/main/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImpl.java +++ b/daisy-integration/src/main/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImpl.java @@ -2,8 +2,6 @@ package se.su.dsv.scipro.io.impl; import jakarta.inject.Inject; import jakarta.ws.rs.core.Response; -import java.math.BigDecimal; -import java.util.Calendar; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import se.su.dsv.scipro.daisyexternal.http.DaisyAPI; @@ -21,10 +19,12 @@ import se.su.dsv.scipro.io.dto.ThesisToBeCreated; import se.su.dsv.scipro.io.dto.UnitWithID; import se.su.dsv.scipro.io.exceptions.ExternalExportException; import se.su.dsv.scipro.project.Project; -import se.su.dsv.scipro.reusable.SciProUtilities; import se.su.dsv.scipro.system.Unit; import se.su.dsv.scipro.system.User; +import java.math.BigDecimal; +import java.time.LocalDate; + public class ExternalExporterDaisyImpl implements ExternalExporter { private static final Logger LOGGER = LoggerFactory.getLogger(ExternalExporterDaisyImpl.class); @@ -46,9 +46,9 @@ public class ExternalExporterDaisyImpl implements ExternalExporter { ThesisToBeCreated exportProjectDTO = new ThesisToBeCreated(); exportProjectDTO.setTitle(truncate(project.getTitle())); - Calendar startDate = SciProUtilities.toCalendar(project.getStartDate()); + LocalDate startDate = project.getStartDate(); exportProjectDTO.setStartDate(startDate); - exportProjectDTO.setEndDate(SciProUtilities.toCalendar(project.getExpectedEndDate())); + exportProjectDTO.setEndDate(project.getExpectedEndDate()); exportProjectDTO.setUnit(unitDTO); final ResearchAreas researchAreas = new ResearchAreas(); if (project.getResearchArea() != null && project.getResearchArea().getIdentifier() != null) { diff --git a/daisy-integration/src/test/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImplTest.java b/daisy-integration/src/test/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImplTest.java index e9c044dabe..451675ec65 100644 --- a/daisy-integration/src/test/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImplTest.java +++ b/daisy-integration/src/test/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImplTest.java @@ -1,15 +1,6 @@ package se.su.dsv.scipro.io.impl; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - import jakarta.ws.rs.core.Response; -import java.net.URI; -import java.time.LocalDate; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -19,11 +10,20 @@ import org.mockito.junit.jupiter.MockitoExtension; import se.su.dsv.scipro.daisyexternal.http.DaisyAPI; import se.su.dsv.scipro.io.dto.ThesisToBeCreated; import se.su.dsv.scipro.project.Project; -import se.su.dsv.scipro.reusable.SciProUtilities; import se.su.dsv.scipro.system.DegreeType; import se.su.dsv.scipro.system.ProjectType; import se.su.dsv.scipro.system.Unit; +import java.net.URI; +import java.time.LocalDate; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + @ExtendWith(MockitoExtension.class) public class ExternalExporterDaisyImplTest { @@ -71,6 +71,6 @@ public class ExternalExporterDaisyImplTest { ArgumentCaptor captor = ArgumentCaptor.forClass(ThesisToBeCreated.class); verify(daisyAPI).createProject(captor.capture()); - assertEquals(captor.getValue().getStartDate(), SciProUtilities.toCalendar(daisyStartDate)); + assertEquals(captor.getValue().getStartDate(), daisyStartDate); } } -- 2.39.5 From ff2ba01690d03f49793687f39a7ff760f43dd94a Mon Sep 17 00:00:00 2001 From: Nico Athanassiadis Date: Thu, 20 Feb 2025 08:36:40 +0100 Subject: [PATCH 2/4] Replace head supervisor updateHeadSupervisor method has been updated to conform with the new daisy api changes. We no longer need to delete supervisor before replacing (updating). --- .../daisy/workers/ProjectExporter.java | 25 +------------------ .../daisy/workers/ProjectExporterTest.java | 23 +++++++++++------ 2 files changed, 16 insertions(+), 32 deletions(-) diff --git a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java index caf55a1756..dccccdda5a 100644 --- a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java +++ b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java @@ -2,7 +2,6 @@ package se.su.dsv.scipro.integration.daisy.workers; import jakarta.inject.Inject; import jakarta.inject.Named; -import jakarta.ws.rs.core.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import se.su.dsv.scipro.daisyexternal.http.DaisyAPI; @@ -264,29 +263,7 @@ public class ProjectExporter extends AbstractWorker { Set contributors = daisyAPI.getContributors(project.getIdentifier()); for (ProjectParticipant contributor : contributors) { if (contributor.getRole() == Role.SUPERVISOR) { - if (contributor.getPerson().getId().equals(project.getHeadSupervisor().getIdentifier())) { - toAdd = false; - } else { - Response response = daisyAPI.deleteThesisPerson( - project.getIdentifier(), - contributor.getPerson().getId() - ); - if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) { - LOG.warn( - "Failed to delete supervisor from project: {} (id: {} / {})", - project.getTitle(), - project.getId(), - project.getIdentifier() - ); - - // Card 3413 - // Do not attempt to add the new supervisor if the old one is still there to prevent - // the project from having multiple supervisors. - // Hopefully Daisy API will soon have support for the function "change supervisor" - // rather than just INSERT and DELETE rows in a table. - toAdd = false; - } - } + toAdd = !contributor.getPerson().getId().equals(project.getHeadSupervisor().getIdentifier()); } } if (toAdd) { diff --git a/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java b/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java index fec03c6a38..6ea34f846d 100644 --- a/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java +++ b/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java @@ -144,22 +144,29 @@ public class ProjectExporterTest { } @Test - public void deletes_wrong_head_supervisor() { - Person person = new Person(); - person.setId(234234); + public void change_head_supervisor() throws Exception { + User newSupervisor = User.builder().firstName("New").lastName("Supervisor").emailAddress("new@supervisor.com").build(); + Unit unit = new Unit(); + unit.setIdentifier(239478); - ProjectParticipant headSupervisor = new ProjectParticipant(); - headSupervisor.setRole(Role.SUPERVISOR); - headSupervisor.setPerson(person); + newSupervisor.setIdentifier(12345); + newSupervisor.setUnit(unit); + exportedProject.setHeadSupervisor(newSupervisor); Set contributors = new HashSet<>(); - contributors.add(headSupervisor); + ProjectParticipant oldSupervisor = new ProjectParticipant(); + oldSupervisor.setRole(Role.SUPERVISOR); + Person oldPerson = new Person(); + oldPerson.setId(SUPERVISOR_IDENTIFIER); + oldSupervisor.setPerson(oldPerson); + contributors.add(oldSupervisor); when(daisyAPI.getContributors(exportedProject.getIdentifier())).thenReturn(contributors); projectExporter.run(); - verify(daisyAPI).deleteThesisPerson(exportedProject.getIdentifier(), person.getId()); + verify(externalExporter).addContributorToProject(exportedProject, newSupervisor, Role.SUPERVISOR); + } @Test -- 2.39.5 From 82c5a7a85ad22de574b657ca605140bdc5867d34 Mon Sep 17 00:00:00 2001 From: Nico Athanassiadis Date: Thu, 20 Feb 2025 08:45:04 +0100 Subject: [PATCH 3/4] reformatted code with prettier tooling --- .../daisy/workers/ProjectExporter.java | 23 +++++++++---------- .../io/impl/ExternalExporterDaisyImpl.java | 5 ++-- .../daisy/workers/ProjectExporterTest.java | 7 ++++-- .../impl/ExternalExporterDaisyImplTest.java | 19 ++++++++------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java index dccccdda5a..31e1fbcdb8 100644 --- a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java +++ b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java @@ -1,7 +1,18 @@ package se.su.dsv.scipro.integration.daisy.workers; +import static com.querydsl.core.types.dsl.Expressions.anyOf; + import jakarta.inject.Inject; import jakarta.inject.Named; +import java.time.Instant; +import java.time.LocalDate; +import java.time.Period; +import java.util.Date; +import java.util.Optional; +import java.util.Set; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Stream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import se.su.dsv.scipro.daisyexternal.http.DaisyAPI; @@ -30,18 +41,6 @@ import se.su.dsv.scipro.system.DegreeType; import se.su.dsv.scipro.system.User; import se.su.dsv.scipro.workerthreads.AbstractWorker; -import java.time.Instant; -import java.time.LocalDate; -import java.time.Period; -import java.util.Date; -import java.util.Optional; -import java.util.Set; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.stream.Stream; - -import static com.querydsl.core.types.dsl.Expressions.anyOf; - @Named public class ProjectExporter extends AbstractWorker { diff --git a/daisy-integration/src/main/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImpl.java b/daisy-integration/src/main/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImpl.java index 18000dcea1..a8b7184112 100755 --- a/daisy-integration/src/main/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImpl.java +++ b/daisy-integration/src/main/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImpl.java @@ -2,6 +2,8 @@ package se.su.dsv.scipro.io.impl; import jakarta.inject.Inject; import jakarta.ws.rs.core.Response; +import java.math.BigDecimal; +import java.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import se.su.dsv.scipro.daisyexternal.http.DaisyAPI; @@ -22,9 +24,6 @@ import se.su.dsv.scipro.project.Project; import se.su.dsv.scipro.system.Unit; import se.su.dsv.scipro.system.User; -import java.math.BigDecimal; -import java.time.LocalDate; - public class ExternalExporterDaisyImpl implements ExternalExporter { private static final Logger LOGGER = LoggerFactory.getLogger(ExternalExporterDaisyImpl.class); diff --git a/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java b/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java index 6ea34f846d..80f69ab45e 100644 --- a/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java +++ b/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java @@ -145,7 +145,11 @@ public class ProjectExporterTest { @Test public void change_head_supervisor() throws Exception { - User newSupervisor = User.builder().firstName("New").lastName("Supervisor").emailAddress("new@supervisor.com").build(); + User newSupervisor = User.builder() + .firstName("New") + .lastName("Supervisor") + .emailAddress("new@supervisor.com") + .build(); Unit unit = new Unit(); unit.setIdentifier(239478); @@ -166,7 +170,6 @@ public class ProjectExporterTest { projectExporter.run(); verify(externalExporter).addContributorToProject(exportedProject, newSupervisor, Role.SUPERVISOR); - } @Test diff --git a/daisy-integration/src/test/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImplTest.java b/daisy-integration/src/test/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImplTest.java index 451675ec65..c6be049575 100644 --- a/daisy-integration/src/test/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImplTest.java +++ b/daisy-integration/src/test/java/se/su/dsv/scipro/io/impl/ExternalExporterDaisyImplTest.java @@ -1,6 +1,15 @@ package se.su.dsv.scipro.io.impl; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import jakarta.ws.rs.core.Response; +import java.net.URI; +import java.time.LocalDate; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -14,16 +23,6 @@ import se.su.dsv.scipro.system.DegreeType; import se.su.dsv.scipro.system.ProjectType; import se.su.dsv.scipro.system.Unit; -import java.net.URI; -import java.time.LocalDate; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @ExtendWith(MockitoExtension.class) public class ExternalExporterDaisyImplTest { -- 2.39.5 From 9bdd22d91ddf8ee4b14d97da2286e1de6e65cba8 Mon Sep 17 00:00:00 2001 From: Nico Athanassiadis Date: Thu, 20 Feb 2025 11:22:13 +0100 Subject: [PATCH 4/4] Refactoring and new test Renamed boolean in updateHeadSupervisor method from toAdd -> shouldChange Added test to cover the branching in updateHeadSupervisor --- .../daisy/workers/ProjectExporter.java | 6 ++-- .../daisy/workers/ProjectExporterTest.java | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java index 31e1fbcdb8..d6e6ab1c55 100644 --- a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java +++ b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java @@ -258,14 +258,14 @@ public class ProjectExporter extends AbstractWorker { } private void updateHeadSupervisor(Project project) throws ExternalExportException { - boolean toAdd = true; + boolean shouldChange = true; Set contributors = daisyAPI.getContributors(project.getIdentifier()); for (ProjectParticipant contributor : contributors) { if (contributor.getRole() == Role.SUPERVISOR) { - toAdd = !contributor.getPerson().getId().equals(project.getHeadSupervisor().getIdentifier()); + shouldChange = !contributor.getPerson().getId().equals(project.getHeadSupervisor().getIdentifier()); } } - if (toAdd) { + if (shouldChange) { externalExporter.addContributorToProject(project, project.getHeadSupervisor(), Role.SUPERVISOR); } } diff --git a/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java b/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java index 80f69ab45e..33135eb7f5 100644 --- a/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java +++ b/daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporterTest.java @@ -2,6 +2,7 @@ package se.su.dsv.scipro.integration.daisy.workers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -172,6 +173,35 @@ public class ProjectExporterTest { verify(externalExporter).addContributorToProject(exportedProject, newSupervisor, Role.SUPERVISOR); } + @Test + public void should_not_change_head_supervisor_if_already_exists() throws Exception { + User newSupervisor = User.builder() + .firstName("New") + .lastName("Supervisor") + .emailAddress("new@supervisor.com") + .build(); + Unit unit = new Unit(); + unit.setIdentifier(239478); + + newSupervisor.setIdentifier(SUPERVISOR_IDENTIFIER); + newSupervisor.setUnit(unit); + exportedProject.setHeadSupervisor(newSupervisor); + + Set contributors = new HashSet<>(); + ProjectParticipant oldSupervisor = new ProjectParticipant(); + oldSupervisor.setRole(Role.SUPERVISOR); + Person oldPerson = new Person(); + oldPerson.setId(SUPERVISOR_IDENTIFIER); + oldSupervisor.setPerson(oldPerson); + contributors.add(oldSupervisor); + + when(daisyAPI.getContributors(exportedProject.getIdentifier())).thenReturn(contributors); + + projectExporter.run(); + + verify(externalExporter, never()).addContributorToProject(exportedProject, newSupervisor, Role.SUPERVISOR); + } + @Test public void adds_missing_co_supervisor_to_project() throws Exception { User user = User.builder().firstName("co").lastName("supervisor").emailAddress("co@supervisor.com").build(); -- 2.39.5