Skip to content

Commit 1af5356

Browse files
authored
SAK-44495 use the kernel UserSortNameComparator (sakaiproject#8702)
1 parent b87af11 commit 1af5356

File tree

3 files changed

+38
-44
lines changed

3 files changed

+38
-44
lines changed

gradebookng/tool/src/java/org/sakaiproject/gradebookng/business/GradebookNgBusinessService.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119
import org.sakaiproject.user.api.UserNotDefinedException;
120120
import org.sakaiproject.util.ResourceLoader;
121121
import org.sakaiproject.util.api.FormattedText;
122+
import org.sakaiproject.util.comparator.UserSortNameComparator;
122123

123124
/**
124125
* Business service for GradebookNG
@@ -324,7 +325,7 @@ public List<String> getGradeableUsers(final String siteId, final GbGroup groupFi
324325
public List<User> getUsers(final List<String> userUuids) throws GbException {
325326
try {
326327
final List<User> users = this.userDirectoryService.getUsers(userUuids);
327-
Collections.sort(users, new LastNameComparator()); // default sort // TODO: remove this sort, it causes double sorting in various scenarios
328+
Collections.sort(users, new UserSortNameComparator()); // TODO: remove this sort, it causes double sorting in various scenarios
328329
return users;
329330
} catch (final RuntimeException e) {
330331
// an LDAP exception can sometimes be thrown here, catch and rethrow
@@ -1161,7 +1162,7 @@ public List<GbUser> getGbUsersForUiSettings(List<String> userUuids, GradebookUiS
11611162
List<User> users = getUsers(userUuids);
11621163
List<GbUser> gbUsers = new ArrayList<>(users.size());
11631164
if (settings.getStudentSortOrder() != null) {
1164-
Comparator<User> comp = GbStudentNameSortOrder.FIRST_NAME == settings.getNameSortOrder() ? new FirstNameComparator() : new LastNameComparator();
1165+
Comparator<User> comp = GbStudentNameSortOrder.FIRST_NAME == settings.getNameSortOrder() ? new FirstNameComparator() : new UserSortNameComparator();
11651166
if (SortDirection.DESCENDING == settings.getStudentSortOrder()) {
11661167
comp = Collections.reverseOrder(comp);
11671168
}

gradebookng/tool/src/java/org/sakaiproject/gradebookng/business/LastNameComparator.java

-41
This file was deleted.

kernel/kernel-util/src/test/java/org/sakaiproject/util/comparator/UserSortNameComparatorTest.java

+35-1
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,38 @@ public void underscoreCompare() {
6868
assertEquals(-1, comparator.compare(userB, userA));
6969
assertEquals(0, comparator.compare(userB, userB));
7070
}
71-
}
71+
72+
@Test
73+
public void namesWithSpacesCompare() {
74+
UserSortNameComparator comparator = new UserSortNameComparator();
75+
User userA = Mockito.mock(User.class);
76+
when(userA.getSortName()).thenReturn("Dekfort, Apple");
77+
User userB = Mockito.mock(User.class);
78+
when(userB.getSortName()).thenReturn("Del Fintino, Pear");
79+
User userC = Mockito.mock(User.class);
80+
when(userC.getSortName()).thenReturn("Dekford", "Orange");
81+
User userD = Mockito.mock(User.class);
82+
when(userD.getSortName()).thenReturn("De'Leon", "Cactus");
83+
User userE = Mockito.mock(User.class);
84+
when(userE.getSortName()).thenReturn("Deleverde", "Mango");
85+
86+
assertEquals(-1, comparator.compare(userA, userB));
87+
assertEquals(1, comparator.compare(userB, userA));
88+
assertEquals(0, comparator.compare(userB, userB));
89+
assertEquals(-1, comparator.compare(userD, userC));
90+
assertEquals(-1, comparator.compare(userD, userE));
91+
}
92+
93+
@Test
94+
public void fullnamesWithSpacesCompare() {
95+
// Given two students, whose lastnames are "Martinez Torcal" and "Martin Troncoso", the logical alphabetical order
96+
// is first "Martin Troncoso" and after "Martinez Torcal", just because the blank space is counted as a character.
97+
UserSortNameComparator comparator = new UserSortNameComparator();
98+
User userA = Mockito.mock(User.class);
99+
when(userA.getSortName()).thenReturn("Martinez Torcal, Apple");
100+
User userB = Mockito.mock(User.class);
101+
when(userB.getSortName()).thenReturn("Martin Troncoso, X");
102+
103+
assertEquals(1, comparator.compare(userA, userB));
104+
}
105+
}

0 commit comments

Comments
 (0)