2054 Search should work when API is offline. Turn off searching in Daisy when profile DAISY-INTEGRATION is turned off.

This commit is contained in:
Andreas Svanberg 2022-12-06 14:56:55 +01:00
parent a2b2de2c17
commit 9a18d62d3e
24 changed files with 134 additions and 102 deletions

@ -152,6 +152,9 @@ public class CoreModule extends AbstractModule {
install(new ReflectionModule());
Multibinder.newSetBinder(binder(), UserImportService.class);
Multibinder.newSetBinder(binder(), UserSearchService.class);
bind(UserSearchService.class).to(AggregateUserSearch.class);
Multibinder.newSetBinder(binder(), UserSearchProvider.class)
.addBinding().to(LocalUserSearch.class);
}
}

@ -0,0 +1,34 @@
package se.su.dsv.scipro.system;
import se.su.dsv.scipro.security.auth.roles.Roles;
import javax.inject.Inject;
import java.util.Collection;
import java.util.Comparator;
import java.util.Set;
public class AggregateUserSearch implements UserSearchService {
private final Set<UserSearchProvider> userSearchProviders;
private final UserService userService;
@Inject
public AggregateUserSearch(Set<UserSearchProvider> userSearchProviders, UserService userService) {
this.userSearchProviders = userSearchProviders;
this.userService = userService;
}
@Override
public Collection<User> search(String term, Set<Roles> role, long maxResults) {
return userSearchProviders.stream()
.sorted(Comparator.comparing(UserSearchProvider::priority).reversed())
.map(provider -> provider.search(term, role, maxResults))
.flatMap(Collection::stream)
.limit(maxResults)
.toList();
}
@Override
public User findOne(Long id) {
return userService.findOne(id);
}
}

@ -0,0 +1,27 @@
package se.su.dsv.scipro.system;
import org.springframework.data.domain.PageRequest;
import se.su.dsv.scipro.security.auth.roles.Roles;
import javax.inject.Inject;
import java.util.Collection;
import java.util.Set;
public class LocalUserSearch implements UserSearchProvider {
private final UserRepo userRepo;
@Inject
public LocalUserSearch(UserRepo userRepo) {
this.userRepo = userRepo;
}
@Override
public int priority() {
return Integer.MAX_VALUE;
}
@Override
public Collection<User> search(String term, Set<Roles> role, long maxResults) {
return userRepo.findByNameIncludes(term, role, new PageRequest(0, maxResults));
}
}

@ -8,27 +8,21 @@ import javax.inject.Inject;
import javax.inject.Provider;
import jakarta.persistence.EntityManager;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import static com.querydsl.core.types.dsl.Expressions.allOf;
import static com.querydsl.core.types.dsl.Expressions.anyOf;
public class UserRepoImpl extends GenericRepo<User, Long> implements UserRepo {
private final Set<UserSearchService> userSearchServices;
@Inject
public UserRepoImpl(Provider<EntityManager> em, Set<UserSearchService> userSearchServices) {
public UserRepoImpl(Provider<EntityManager> em) {
super(em, User.class, QUser.user);
this.userSearchServices = userSearchServices;
}
@Override
public Collection<User> findByNameIncludes(String term, Set<Roles> roles, Pageable pageable) {
QUser user = QUser.user;
final Set<User> results = new HashSet<>();
results.addAll(findAll(allOf(
return findAll(allOf(
user.deleted.isFalse(),
user.roles.any().in(roles),
anyOf(
@ -39,19 +33,7 @@ public class UserRepoImpl extends GenericRepo<User, Long> implements UserRepo {
.from(QUsername.username1)
.where(QUsername.username1.username.contains(term)))
)
), pageable));
long remaining = pageable.getLimit() - results.size();
for (UserSearchService userSearchService : userSearchServices) {
final Collection<? extends User> users = remaining > 0
? userSearchService.search(term, roles, remaining)
: Collections.emptySet();
results.addAll(users);
remaining -= users.size();
}
return results;
), pageable);
}
}

@ -0,0 +1,15 @@
package se.su.dsv.scipro.system;
import se.su.dsv.scipro.security.auth.roles.Roles;
import java.util.Collection;
import java.util.Set;
public interface UserSearchProvider {
/**
* Higher priority providers are searched first.
*/
int priority();
Collection<User> search(String term, Set<Roles> role, long maxResults);
}

@ -7,4 +7,5 @@ import java.util.Set;
public interface UserSearchService {
Collection<User> search(String term, Set<Roles> role, long maxResults);
User findOne(Long id);
}

@ -16,7 +16,6 @@ import se.su.dsv.scipro.finalseminar.FinalSeminarOppositionRepo;
import se.su.dsv.scipro.system.DegreeType;
import se.su.dsv.scipro.system.ProjectType;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserRepo;
import se.su.dsv.scipro.test.DomainObjects;
import se.su.dsv.scipro.test.ObjectMother;
import se.su.dsv.scipro.test.UserBuilder;
@ -38,8 +37,6 @@ public class OppositionReportServiceImplTest {
@Mock
GradingReportTemplateRepo gradingReportTemplateRepo;
@Mock
UserRepo userRepo;
@Mock
FileService fileService;
@InjectMocks
OppositionReportServiceImpl oppositionReportService;
@ -108,9 +105,7 @@ public class OppositionReportServiceImplTest {
}
private User createUser() {
User studentUser = new UserBuilder().create();
studentUser = userRepo.save(studentUser);
return studentUser;
return new UserBuilder().create();
}
private FinalSeminar createFinalSeminar() {

@ -14,6 +14,7 @@ import se.su.dsv.scipro.io.ExternalExporter;
import se.su.dsv.scipro.io.impl.ExternalExporterDaisyImpl;
import se.su.dsv.scipro.match.IdeaCreationJudge;
import se.su.dsv.scipro.system.UserImportService;
import se.su.dsv.scipro.system.UserSearchProvider;
import se.su.dsv.scipro.system.UserSearchService;
public class DaisyModule extends ServletModule {
@ -33,7 +34,7 @@ public class DaisyModule extends ServletModule {
Multibinder.newSetBinder(binder(), UserImportService.class)
.addBinding().to(ExternalImporterDaisyImpl.class);
Multibinder.newSetBinder(binder(), UserSearchService.class)
Multibinder.newSetBinder(binder(), UserSearchProvider.class)
.addBinding().to(DaisyUserSearchService.class);
OptionalBinder.newOptionalBinder(binder(), PublishingConsentService.class)

@ -1,11 +1,12 @@
package se.su.dsv.scipro.integration.daisy;
import jakarta.ws.rs.ProcessingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import se.su.dsv.scipro.daisyExternal.http.DaisyAPI;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserSearchService;
import se.su.dsv.scipro.system.UserSearchProvider;
import se.su.dsv.scipro.system.UserService;
import javax.inject.Inject;
@ -16,7 +17,7 @@ import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
public class DaisyUserSearchService implements UserSearchService {
public class DaisyUserSearchService implements UserSearchProvider {
private static final Logger LOGGER = LoggerFactory.getLogger(DaisyUserSearchService.class);
private final DaisyAPI daisyAPI;
@ -28,6 +29,11 @@ public class DaisyUserSearchService implements UserSearchService {
this.userService = userService;
}
@Override
public int priority() {
return 0;
}
@Override
public Collection<User> search(final String term, final Set<Roles> role, final long maxResults) {
if (term != null && term.length() >= 6) {
@ -38,7 +44,7 @@ public class DaisyUserSearchService implements UserSearchService {
.filter(user -> role.stream().anyMatch(user::hasRole))
.collect(Collectors.toList());
}
catch (WebApplicationException e) {
catch (ProcessingException | WebApplicationException e) {
LOGGER.debug("Failed to search for users in Daisy", e);
}
}

@ -26,7 +26,7 @@ import se.su.dsv.scipro.system.ProjectTypeService;
import se.su.dsv.scipro.system.ResearchArea;
import se.su.dsv.scipro.system.ResearchAreaService;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserRepo;
import se.su.dsv.scipro.system.UserSearchService;
import se.su.dsv.scipro.system.UserService;
import javax.inject.Inject;
@ -46,7 +46,8 @@ import java.util.*;
public class AdminCreateProjectPage extends AbstractAdminProjectPage
implements MenuHighlightAdminProjectManagement
{
@Inject UserRepo userRepo;
@Inject
UserSearchService userSearchService;
@Inject UserService userService;
@Inject ProjectTypeService projectTypeService;
@Inject ResearchAreaService researchAreaService;
@ -100,7 +101,7 @@ public class AdminCreateProjectPage extends AbstractAdminProjectPage
add(expectedEndDateField);
ChoiceProvider<User> supervisorChoices =
new AutoCompleteRoleProvider(userRepo, EnumSet.of(Roles.SUPERVISOR));
new AutoCompleteRoleProvider(userSearchService, EnumSet.of(Roles.SUPERVISOR));
DefaultSelect2Choice<User> supervisorField = new DefaultSelect2Choice<>(
"supervisor",
getModel().flatMap(SerializableProject::getSupervisor),
@ -109,7 +110,7 @@ public class AdminCreateProjectPage extends AbstractAdminProjectPage
add(supervisorField);
ChoiceProvider<User> authorChoices =
new AutoCompleteRoleProvider(userRepo, EnumSet.of(Roles.AUTHOR));
new AutoCompleteRoleProvider(userSearchService, EnumSet.of(Roles.AUTHOR));
DefaultSelect2MultiChoice<User> authorsField = new DefaultSelect2MultiChoice<>(
"authors",
getModel().flatMap(SerializableProject::getAuthors),

@ -53,7 +53,7 @@ public class AdminEditProjectPage extends AbstractAdminProjectPage implements Me
@Inject
private MailEventService mailEventService;
@Inject
private UserRepo userRepo;
private UserService userService;
@Inject
private EventBus eventBus;
@Inject
@ -221,7 +221,7 @@ public class AdminEditProjectPage extends AbstractAdminProjectPage implements Me
private void validateReviewerHasReviewerRole(Set<User> users, String errorKey) {
for (User user : users) {
if (!userRepo.findOne(user.getId()).getRoles().contains(Roles.REVIEWER)) {
if (!user.getRoles().contains(Roles.REVIEWER)) {
error(getString(errorKey));
}
}

@ -1,11 +1,10 @@
package se.su.dsv.scipro.components;
import org.springframework.data.domain.PageRequest;
import org.wicketstuff.select2.ChoiceProvider;
import org.wicketstuff.select2.Response;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserRepo;
import se.su.dsv.scipro.system.UserSearchService;
import java.util.ArrayList;
import java.util.Collection;
@ -16,10 +15,10 @@ public class AutoCompleteRoleProvider extends ChoiceProvider<User> {
private static final int MAX_RESULTS = 6;
private final UserRepo service;
private final UserSearchService service;
private final Set<Roles> role;
public AutoCompleteRoleProvider(UserRepo service, Set<Roles> role) {
public AutoCompleteRoleProvider(UserSearchService service, Set<Roles> role) {
this.service = service;
this.role = role;
}
@ -36,7 +35,7 @@ public class AutoCompleteRoleProvider extends ChoiceProvider<User> {
@Override
public void query(String term, int page, Response<User> response) {
response.addAll(service.findByNameIncludes(term, role, new PageRequest(page, MAX_RESULTS)));
response.addAll(service.search(term, role, MAX_RESULTS));
}
@Override

@ -4,7 +4,7 @@ import org.apache.wicket.model.IModel;
import org.wicketstuff.select2.Select2MultiChoice;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserRepo;
import se.su.dsv.scipro.system.UserSearchService;
import javax.inject.Inject;
import java.util.Collection;
@ -13,7 +13,7 @@ import java.util.EnumSet;
public class CoAuthorChoice extends Select2MultiChoice<User> {
@Inject
private UserRepo studentService;
private UserSearchService studentService;
public CoAuthorChoice(String id, IModel<Collection<User>> model) {
super(id, model);

@ -4,7 +4,7 @@ import org.apache.wicket.model.IModel;
import org.wicketstuff.select2.ChoiceProvider;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserRepo;
import se.su.dsv.scipro.system.UserSearchService;
import javax.inject.Inject;
import java.util.EnumSet;
@ -12,7 +12,7 @@ import java.util.EnumSet;
public class SupervisorAutoComplete extends AutoCompleteChoice<User> {
@Inject
private UserRepo userRepo;
private UserSearchService userSearchService;
public SupervisorAutoComplete(String id, IModel<User> model) {
super(id, model);
@ -20,6 +20,6 @@ public class SupervisorAutoComplete extends AutoCompleteChoice<User> {
@Override
protected ChoiceProvider<User> getChoiceProvider() {
return new AutoCompleteRoleProvider(userRepo, EnumSet.of(Roles.SUPERVISOR));
return new AutoCompleteRoleProvider(userSearchService, EnumSet.of(Roles.SUPERVISOR));
}
}

@ -4,7 +4,7 @@ import org.apache.wicket.model.IModel;
import org.wicketstuff.select2.ChoiceProvider;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserRepo;
import se.su.dsv.scipro.system.UserSearchService;
import javax.inject.Inject;
import java.util.EnumSet;
@ -12,7 +12,7 @@ import java.util.EnumSet;
public abstract class UserAutoComplete extends AjaxAutoCompleteChoice<User> {
@Inject
private UserRepo userRepo;
private UserSearchService userSearchService;
public UserAutoComplete(String id) {
super(id);
@ -26,7 +26,7 @@ public abstract class UserAutoComplete extends AjaxAutoCompleteChoice<User> {
@Override
protected ChoiceProvider<User> getChoiceProvider() {
return new AutoCompleteRoleProvider(userRepo, getRoles());
return new AutoCompleteRoleProvider(userSearchService, getRoles());
}
protected EnumSet<Roles> getRoles() {

@ -22,7 +22,7 @@ import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.session.SciProSession;
import se.su.dsv.scipro.system.ProjectType;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserRepo;
import se.su.dsv.scipro.system.UserSearchService;
import se.su.dsv.scipro.system.UserService;
import se.su.dsv.scipro.util.Either;
@ -37,7 +37,7 @@ public class SeminarCRUDPanel extends GenericPanel<FinalSeminar> {
static final String DELETE = "delete";
static final String MOVE_SEMINAR_LINK = "moveSeminarLink";
@Inject private UserRepo userRepo;
@Inject private UserSearchService userSearchService;
@Inject private UserService userService;
@Inject private FinalSeminarService seminarService;
@Inject private ProjectService projectService;
@ -101,7 +101,7 @@ public class SeminarCRUDPanel extends GenericPanel<FinalSeminar> {
}
});
final AutoCompleteRoleProvider authorChoices = new AutoCompleteRoleProvider(userRepo, Set.of(Roles.AUTHOR));
final AutoCompleteRoleProvider authorChoices = new AutoCompleteRoleProvider(userSearchService, Set.of(Roles.AUTHOR));
opponents = new DefaultSelect2MultiChoice<>("opponents", new DetachableServiceModelCollection<>(userService), authorChoices);
add(opponents);
participants = new DefaultSelect2MultiChoice<>("participants", new DetachableServiceModelCollection<>(userService), authorChoices);

@ -6,12 +6,11 @@ import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.request.resource.AbstractResource.ResourceResponse;
import org.apache.wicket.request.resource.IResource;
import org.apache.wicket.request.resource.ResourceReference;
import org.springframework.data.domain.PageRequest;
import se.su.dsv.scipro.oauth.OAuthService;
import se.su.dsv.scipro.oauth.Payload;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserRepo;
import se.su.dsv.scipro.system.UserSearchService;
import javax.inject.Inject;
import java.util.Collection;
@ -38,7 +37,7 @@ public class GDPRReportResourceReference extends ResourceReference {
@Inject
private OAuthService oAuthService;
@Inject
private UserRepo userRepo;
private UserSearchService userSearchService;
public GDPRReportResourceReference() {
super("gdpr-report");
@ -88,7 +87,7 @@ public class GDPRReportResourceReference extends ResourceReference {
return BAD_REQUEST;
}
final Collection<User> users = userRepo.findByNameIncludes(identity, EnumSet.allOf(Roles.class), new PageRequest(0, 2));
final Collection<User> users = userSearchService.search(identity, EnumSet.allOf(Roles.class), 2);
if (users.isEmpty()) {
return NO_CONTENT;
}

@ -125,7 +125,7 @@ import se.su.dsv.scipro.system.SystemModule;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserImportService;
import se.su.dsv.scipro.system.UserNameService;
import se.su.dsv.scipro.system.UserRepo;
import se.su.dsv.scipro.system.UserSearchService;
import se.su.dsv.scipro.system.UserService;
import se.su.dsv.scipro.thesislink.ExternalLinkService;
import se.su.dsv.scipro.workerthreads.Scheduler;
@ -145,8 +145,6 @@ public abstract class SciProTest {
@Mock
protected EventBus eventBus;
@Mock
protected UserRepo userRepo;
@Mock
protected ActivityPlanService activityPlanService;
@Mock
protected SurveyService surveyService;
@ -345,6 +343,8 @@ public abstract class SciProTest {
protected ReflectionService reflectionService;
@Mock
protected PublishingConsentService publishingConsentService;
@Mock
protected UserSearchService userSearchService;
protected WicketTester tester;

@ -56,7 +56,7 @@ public class AdminCreateProjectPageTest extends PageTest {
private User mockUser(String Stina, String Student, String emailAddress, long id) {
User user = User.builder().firstName(Stina).lastName(Student).emailAddress(emailAddress).build();
user.setId(id);
lenient().when(userRepo.findOne(user.getId())).thenReturn(user); // UserRepo is used by the autocomplete component
lenient().when(userSearchService.findOne(user.getId())).thenReturn(user); // UserRepo is used by the autocomplete component
return user;
}

@ -30,6 +30,7 @@ import java.util.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static se.su.dsv.scipro.admin.pages.AdminEditProjectPage.*;
@ -86,7 +87,6 @@ public class AdminEditProjectPageTest extends SciProTest {
private void mockAnotherAuthor() {
User anotherAuthor = createUser("another", "author", "another@example.com", ANOTHER_AUTHOR_ID);
anotherAuthor.addRole(Roles.AUTHOR);
when(userRepo.findOne(ANOTHER_AUTHOR_ID)).thenReturn(anotherAuthor);
}
@Test
@ -110,32 +110,24 @@ public class AdminEditProjectPageTest extends SciProTest {
@Test
public void title_required() {
when(userRepo.findOne(AUTHOR_ID)).thenReturn(author);
when(userRepo.findOne(SUPERVISOR_ID)).thenReturn(supervisor);
submitForm("", SUPERVISOR_ID, PROJECT_TYPE, AUTHOR_ID, null, null);
tester.assertErrorMessages(tester.getLastRenderedPage().getString("titleField.Required"));
}
@Test
public void project_type_required() {
when(userRepo.findOne(AUTHOR_ID)).thenReturn(author);
when(userRepo.findOne(SUPERVISOR_ID)).thenReturn(supervisor);
submitForm("title", SUPERVISOR_ID, NO_PROJECT_TYPE, AUTHOR_ID, null, null);
tester.assertErrorMessages(tester.getLastRenderedPage().getString("projectTypeSelect.Required"));
}
@Test
public void head_supervisor_required() {
when(userRepo.findOne(AUTHOR_ID)).thenReturn(author);
submitForm("title", null, PROJECT_TYPE, AUTHOR_ID, null, null);
tester.assertErrorMessages(tester.getLastRenderedPage().getString("headSupervisorSelect.Required"));
}
@Test
public void author_required() {
when(userRepo.findOne(SUPERVISOR_ID)).thenReturn(supervisor);
when(userRepo.findOne(EXISTING_REVIEWER_ID)).thenReturn(existingReviewer);
when(userRepo.findOne(EXISTING_CO_SUPERVISOR_ID)).thenReturn(existingCoSupervisor);
final Project project1 = mockExistingProject();
project1.setProjectParticipants(List.of());
startPage(project1);
@ -145,8 +137,6 @@ public class AdminEditProjectPageTest extends SciProTest {
@Test
public void not_same_user_head_reviewer() {
when(userRepo.findOne(AUTHOR_ID)).thenReturn(author);
when(userRepo.findOne(SOME_EMPLOYEE_ID)).thenReturn(someEmployee);
project.addReviewer(someEmployee);
startPage(project);
submitForm("title", SOME_EMPLOYEE_ID, PROJECT_TYPE, AUTHOR_ID, null, null);
@ -155,8 +145,6 @@ public class AdminEditProjectPageTest extends SciProTest {
@Test
public void not_same_user_head_co() {
when(userRepo.findOne(AUTHOR_ID)).thenReturn(author);
when(userRepo.findOne(SOME_EMPLOYEE_ID)).thenReturn(someEmployee);
project.addCoSupervisor(someEmployee);
startPage(project);
submitForm("title", SOME_EMPLOYEE_ID, PROJECT_TYPE, AUTHOR_ID, null, null);
@ -165,16 +153,12 @@ public class AdminEditProjectPageTest extends SciProTest {
@Test
public void not_same_user_head_author() {
when(userRepo.findOne(AUTHOR_ID)).thenReturn(author);
submitForm("title", AUTHOR_ID, PROJECT_TYPE, AUTHOR_ID, null, null);
tester.assertErrorMessages(tester.getLastRenderedPage().getString("headAuthorSame"));
}
@Test
public void not_same_user_reviewer_co_supervisor() {
when(userRepo.findOne(AUTHOR_ID)).thenReturn(author);
when(userRepo.findOne(SUPERVISOR_ID)).thenReturn(supervisor);
when(userRepo.findOne(SOME_EMPLOYEE_ID)).thenReturn(someEmployee);
project.addCoSupervisor(someEmployee);
project.addReviewer(someEmployee);
startPage(project);
@ -184,8 +168,6 @@ public class AdminEditProjectPageTest extends SciProTest {
@Test
public void not_same_user_reviewer_author() {
when(userRepo.findOne(AUTHOR_ID)).thenReturn(author);
when(userRepo.findOne(SUPERVISOR_ID)).thenReturn(supervisor);
author.addRole(Roles.REVIEWER);
project.addReviewer(author);
startPage(project);
@ -195,8 +177,6 @@ public class AdminEditProjectPageTest extends SciProTest {
@Test
public void not_same_user_co_author() {
when(userRepo.findOne(AUTHOR_ID)).thenReturn(author);
when(userRepo.findOne(SUPERVISOR_ID)).thenReturn(supervisor);
project.addCoSupervisor(author);
startPage(project);
submitForm("title", SUPERVISOR_ID, PROJECT_TYPE, AUTHOR_ID, null, null);
@ -205,8 +185,6 @@ public class AdminEditProjectPageTest extends SciProTest {
@Test
public void saves() {
when(userRepo.findOne(AUTHOR_ID)).thenReturn(author);
when(userRepo.findOne(SUPERVISOR_ID)).thenReturn(supervisor);
String title = "cool title";
submitForm(title, SUPERVISOR_ID, PROJECT_TYPE, AUTHOR_ID, null, null);
ArgumentCaptor<Project> captor = ArgumentCaptor.forClass(Project.class);
@ -218,8 +196,6 @@ public class AdminEditProjectPageTest extends SciProTest {
@Test
public void sends_notification_on_head_supervisor_change() {
when(userRepo.findOne(SOME_EMPLOYEE_ID)).thenReturn(someEmployee);
when(userRepo.findOne(EXISTING_REVIEWER_ID)).thenReturn(existingReviewer);
startPage(mockExistingProject());
submitForm("title", SOME_EMPLOYEE_ID, PROJECT_TYPE, null, null, null);
verifyNotification(ProjectEvent.Event.HEAD_SUPERVISOR_CHANGED);
@ -229,8 +205,6 @@ public class AdminEditProjectPageTest extends SciProTest {
@Test
public void sends_notification_when_authors_changed() {
mockAnotherAuthor();
when(userRepo.findOne(EXISTING_REVIEWER_ID)).thenReturn(existingReviewer);
when(userRepo.findOne(SUPERVISOR_ID)).thenReturn(supervisor);
startPage(mockExistingProject());
submitForm("title", SUPERVISOR_ID, PROJECT_TYPE, ANOTHER_AUTHOR_ID, null, null);
verifyNotification(ProjectEvent.Event.AUTHORS_CHANGED);
@ -239,9 +213,6 @@ public class AdminEditProjectPageTest extends SciProTest {
@Test
public void sends_notification_when_reviewers_change() {
mockAnotherAuthor();
when(userRepo.findOne(SOME_EMPLOYEE_ID)).thenReturn(someEmployee);
when(userRepo.findOne(EXISTING_REVIEWER_ID)).thenReturn(existingReviewer);
when(userRepo.findOne(SUPERVISOR_ID)).thenReturn(supervisor);
startPage(mockExistingProject());
submitForm("title", SUPERVISOR_ID, PROJECT_TYPE, ANOTHER_AUTHOR_ID, SOME_EMPLOYEE_ID, null);
verifyNotification(ProjectEvent.Event.REVIEWERS_CHANGED);
@ -250,9 +221,6 @@ public class AdminEditProjectPageTest extends SciProTest {
@Test
public void sends_notification_when_co_supervisors_change() {
mockAnotherAuthor();
when(userRepo.findOne(SOME_EMPLOYEE_ID)).thenReturn(someEmployee);
when(userRepo.findOne(EXISTING_REVIEWER_ID)).thenReturn(existingReviewer);
when(userRepo.findOne(SUPERVISOR_ID)).thenReturn(supervisor);
startPage(mockExistingProject());
submitForm("title", SUPERVISOR_ID, PROJECT_TYPE, ANOTHER_AUTHOR_ID, null, SOME_EMPLOYEE_ID);
verifyNotification(ProjectEvent.Event.CO_SUPERVISOR_CHANGED);
@ -317,6 +285,7 @@ public class AdminEditProjectPageTest extends SciProTest {
private User createUser(String firstName, String lastName, String emailAddress, long id) {
User user = User.builder().firstName(firstName).lastName(lastName).emailAddress(emailAddress).build();
user.setId(id);
lenient().when(userSearchService.findOne(id)).thenReturn(user);
return user;
}

@ -60,7 +60,7 @@ public class AdminEditApplicationPeriodExemptionsPageTest extends SciProTest {
public void saves() {
User user2 = new UserBuilder().setFirstName("Steve").setLastName("Jobs").setEmail("jobs@example.com").create();
user2.setId(1L);
when(userRepo.findOne(anyLong())).thenReturn(user2);
when(userSearchService.findOne(anyLong())).thenReturn(user2);
startPage();
FormTester formTester = tester.newFormTester(ADD_FORM);

@ -47,7 +47,7 @@ public class ProjectDataPanelTest extends SciProTest {
User reviewer = User.builder().firstName("reviewer").lastName("review").emailAddress("rev@reviewer.com").build();
reviewer.setId(74L);
reviewer.addRole(Roles.REVIEWER);
when(userRepo.findOne(74L)).thenReturn(reviewer);
when(userSearchService.findOne(74L)).thenReturn(reviewer);
mockProject();
startPanel();
selectReviewer();
@ -63,7 +63,7 @@ public class ProjectDataPanelTest extends SciProTest {
User reviewer = User.builder().firstName("reviewer").lastName("review").emailAddress("rev@reviewer.com").build();
reviewer.addRole(Roles.REVIEWER);
reviewer.setId(74L);
when(userRepo.findOne(74L)).thenReturn(reviewer);
when(userSearchService.findOne(74L)).thenReturn(reviewer);
User oldReviewer = mockProjectWithReviewer();
startPanel();
selectReviewer();
@ -76,7 +76,7 @@ public class ProjectDataPanelTest extends SciProTest {
@Test
public void change_reviewer_fails_if_selecting_the_current_supervisor() {
when(userRepo.findOne(74L)).thenReturn(ObjectMother.SOME_USER);
when(userSearchService.findOne(74L)).thenReturn(ObjectMother.SOME_USER);
mockProject();
startPanel();
selectReviewer();

@ -70,7 +70,7 @@ public class ProjectIdeaSubmissionPanelTest extends SciProTest {
@Test
public void submit_form_with_yourself_as_co_author_fails() {
when(userRepo.findOne(user.getId())).thenReturn(user);
when(userSearchService.findOne(user.getId())).thenReturn(user);
startPanel(idea);
fillInFormAndSubmit(user.getId(), true);
assertSpecificFeedback(feedbackPath("coAuthorFeedback"), panel.getString("addedYourself"));
@ -123,7 +123,7 @@ public class ProjectIdeaSubmissionPanelTest extends SciProTest {
private User mockCoAuthor() {
User coAuthor = new UserBuilder().create();
when(userRepo.findOne(coAuthor.getId())).thenReturn(coAuthor);
when(userSearchService.findOne(coAuthor.getId())).thenReturn(coAuthor);
return coAuthor;
}

@ -57,7 +57,7 @@ public class AdminSwitchUserPageTest extends SciProTest {
}
private void mockUser(User user) {
Mockito.when(userRepo.findOne(SWITCH_TO_ID)).thenReturn(user);
Mockito.when(userSearchService.findOne(SWITCH_TO_ID)).thenReturn(user);
}
private void submitForm() {