package net.pterodactylus.sone.template;
import static java.util.Arrays.asList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.HashSet;
import java.util.Set;
import net.pterodactylus.sone.core.Core;
import net.pterodactylus.sone.freenet.wot.Identity;
import net.pterodactylus.sone.freenet.wot.IdentityManager;
import net.pterodactylus.sone.freenet.wot.OwnIdentity;
import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Test;
/**
* Unit test for {@link IdentityAccessor}.
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
public class IdentityAccessorTest {
private static final String TEST_ID =
"LrNQbyBBZW-7pHqChtp9lfPA7eXFPW~FLbJ2WrvEx5g";
private static final String TEST_ID_WITH_CHANGED_LETTER =
"LrMQbyBBZW-7pHqChtp9lfPA7eXFPW~FLbJ2WrvEx5g";
private final Core core = mock(Core.class);
private final IdentityAccessor accessor = new IdentityAccessor(core);
private final IdentityManager identityManager =
mock(IdentityManager.class);
private final OwnIdentity identity = mock(OwnIdentity.class);
@Before
public void setupCore() {
when(core.getIdentityManager()).thenReturn(identityManager);
}
@Before
public void setupIdentity() {
setupIdentity(identity, TEST_ID, "Test");
}
private void setupIdentity(Identity identity, String id,
String nickname) {
when(identity.getId()).thenReturn(id);
when(identity.getNickname()).thenReturn(nickname);
}
private void serveIdentities(Set<OwnIdentity> identities) {
when(identityManager.getAllOwnIdentities()).thenReturn(identities);
}
@Test
public void accessorReturnsTheCorrectlyAbbreviatedNickname() {
OwnIdentity ownIdentity = mock(OwnIdentity.class);
setupIdentity(ownIdentity, TEST_ID_WITH_CHANGED_LETTER, "Test");
serveIdentities(new HashSet(asList(identity, ownIdentity)));
assertThat(accessor.get(null, identity, "uniqueNickname"),
Matchers.<Object>is("Test@LrN"));
}
@Test
public void accessorComparesTheFullLengthIfNecessary() {
OwnIdentity ownIdentity = mock(OwnIdentity.class);
setupIdentity(ownIdentity, TEST_ID, "Test");
serveIdentities(new HashSet(asList(identity, ownIdentity)));
assertThat(accessor.get(null, identity, "uniqueNickname"),
Matchers.<Object>is("Test@" + TEST_ID));
}
@Test
public void reflectionAccessorIsUsedForOtherMembers() {
assertThat(accessor.get(null, identity, "hashCode"),
Matchers.<Object>is(identity.hashCode()));
}
}