|
| 1 | +package edu.harvard.iq.dataverse.userdata; |
| 2 | + |
| 3 | +import com.google.common.collect.Lists; |
| 4 | +import edu.harvard.iq.dataverse.persistence.MocksFactory; |
| 5 | +import edu.harvard.iq.dataverse.persistence.user.AuthenticatedUser; |
| 6 | +import edu.harvard.iq.dataverse.persistence.user.AuthenticatedUserLookup; |
| 7 | +import io.vavr.control.Option; |
| 8 | +import org.junit.jupiter.api.Test; |
| 9 | + |
| 10 | +import java.io.ByteArrayOutputStream; |
| 11 | +import java.io.IOException; |
| 12 | +import java.sql.Timestamp; |
| 13 | +import java.util.Arrays; |
| 14 | +import java.util.Collections; |
| 15 | +import java.util.List; |
| 16 | +import java.util.Locale; |
| 17 | +import java.util.function.Consumer; |
| 18 | + |
| 19 | +import static org.junit.jupiter.api.Assertions.assertEquals; |
| 20 | + |
| 21 | +public class AuthenticatedUserCsvWriterTest { |
| 22 | + |
| 23 | + private AuthenticatedUserCsvWriter csvWriter = new AuthenticatedUserCsvWriter(); |
| 24 | + |
| 25 | + // -------------------- TESTS -------------------- |
| 26 | + |
| 27 | + @Test |
| 28 | + public void write() throws IOException { |
| 29 | + // given |
| 30 | + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| 31 | + List<AuthenticatedUser> users = Lists.newArrayList( |
| 32 | + defaultUser(1, "jo", "John", "Doe"), |
| 33 | + defaultUser(2, "ma", "Mary", "Sue", |
| 34 | + u -> u.setLastLoginTime(null), u -> u.setLastApiUseTime(null)), |
| 35 | + defaultUser(3, "df", "Diana", "Flores", |
| 36 | + u -> u.setSuperuser(true), u -> u.setNotificationsLanguage(Locale.FRENCH), u -> u.setAffiliation(null)), |
| 37 | + defaultUser(4, "ba", "Barb", "Wire", |
| 38 | + u -> u.setEmailConfirmed(null), u -> u.setAffiliation(null), u -> u.getAuthenticatedUserLookup().setAuthenticationProviderId("saml")), |
| 39 | + defaultUser(5, "", "Mr.", "special\",\"char.txt", |
| 40 | + u -> u.setCreatedTime(null), u -> u.setLastApiUseTime(null), u -> u.setLastLoginTime(null), u -> u.setEmail(""), |
| 41 | + u -> u.setAffiliation(null), u -> u.setEmailConfirmed(null), u -> u.setNotificationsLanguage(null)) |
| 42 | + ); |
| 43 | + |
| 44 | + // when |
| 45 | + csvWriter.write(outputStream, users); |
| 46 | + |
| 47 | + // then |
| 48 | + String[] csv = outputStream.toString().split("\r\n"); |
| 49 | + assertEquals(6, csv.length); |
| 50 | + assertEquals("ID,Username,Name,Email,Affiliation,Superuser,Authentication,Verification status,Notification language,Account creation,Last login,Last API use", csv[0]); |
| 51 | + assertEquals( "1,@jo,John Doe,[email protected],UnitTester,false,buildIn,Verified,en,2024-05-28T01:01:01Z,2024-05-28T02:02:02Z,2024-05-28T03:03:03Z", csv[ 1]); |
| 52 | + assertEquals( "2,@ma,Mary Sue,[email protected],UnitTester,false,buildIn,Verified,en,2024-05-28T01:01:01Z,,", csv[ 2]); |
| 53 | + assertEquals( "3,@df,Diana Flores,[email protected],,true,buildIn,Verified,fr,2024-05-28T01:01:01Z,2024-05-28T02:02:02Z,2024-05-28T03:03:03Z", csv[ 3]); |
| 54 | + assertEquals( "4,@ba,Barb Wire,[email protected],,false,saml,Not verified,en,2024-05-28T01:01:01Z,2024-05-28T02:02:02Z,2024-05-28T03:03:03Z", csv[ 4]); |
| 55 | + assertEquals("5,@,\"Mr. special\"\",\"\"char.txt\",,,false,buildIn,Not verified,,,,", csv[5]); |
| 56 | + } |
| 57 | + |
| 58 | + @Test |
| 59 | + public void write__empty_list() throws IOException { |
| 60 | + // when |
| 61 | + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| 62 | + csvWriter.write(outputStream, Collections.emptyList()); |
| 63 | + |
| 64 | + // then |
| 65 | + String[] csv = outputStream.toString().split("\r\n"); |
| 66 | + assertEquals(1, csv.length); |
| 67 | + assertEquals("ID,Username,Name,Email,Affiliation,Superuser,Authentication,Verification status,Notification language,Account creation,Last login,Last API use", csv[0]); |
| 68 | + } |
| 69 | + |
| 70 | + // -------------------- PRIVATE -------------------- |
| 71 | + |
| 72 | + @SafeVarargs |
| 73 | + private static AuthenticatedUser defaultUser(int id, String username, String firstName, String lastname, Consumer<AuthenticatedUser>... overrides) { |
| 74 | + AuthenticatedUser user = MocksFactory.makeAuthenticatedUser(firstName, lastname); |
| 75 | + user.setId((long) id); |
| 76 | + user.setUserIdentifier(username); |
| 77 | + user.setAuthenticatedUserLookup(new AuthenticatedUserLookup()); |
| 78 | + user.getAuthenticatedUserLookup().setAuthenticationProviderId("buildIn"); |
| 79 | + user.getAuthenticatedUserLookup().setPersistentUserId(String.valueOf(id)); |
| 80 | + user.setCreatedTime(Timestamp.valueOf("2024-05-28 01:01:01")); |
| 81 | + user.setLastLoginTime(Timestamp.valueOf("2024-05-28 02:02:02")); |
| 82 | + user.setLastApiUseTime(Timestamp.valueOf("2024-05-28 03:03:03")); |
| 83 | + user.setEmailConfirmed(Timestamp.valueOf("2024-05-28 04:04:04")); |
| 84 | + |
| 85 | + Option.of(overrides).forEach(o -> Arrays.stream(o).forEach(override -> override.accept(user))); |
| 86 | + |
| 87 | + return user; |
| 88 | + } |
| 89 | +} |
0 commit comments