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:
parent
a2b2de2c17
commit
9a18d62d3e
core/src
main/java
modules
se/su/dsv/scipro/system
test/java/se/su/dsv/scipro/report
daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy
view/src
main/java/se/su/dsv/scipro
admin/pages
components
finalseminar
gdpr
test/java/se/su/dsv/scipro
@ -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() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user