1 package net.pterodactylus.sone.template;
3 import static java.util.Arrays.asList;
4 import static org.hamcrest.MatcherAssert.assertThat;
5 import static org.hamcrest.Matchers.notNullValue;
6 import static org.hamcrest.Matchers.sameInstance;
7 import static org.mockito.Mockito.mock;
8 import static org.mockito.Mockito.when;
10 import java.util.HashSet;
13 import net.pterodactylus.sone.core.Core;
14 import net.pterodactylus.sone.freenet.wot.Identity;
15 import net.pterodactylus.sone.freenet.wot.IdentityManager;
16 import net.pterodactylus.sone.freenet.wot.OwnIdentity;
18 import com.google.inject.Binder;
19 import com.google.inject.Guice;
20 import com.google.inject.Injector;
21 import com.google.inject.Module;
22 import org.hamcrest.Matchers;
23 import org.junit.Before;
24 import org.junit.Test;
27 * Unit test for {@link IdentityAccessor}.
29 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
31 public class IdentityAccessorTest {
33 private static final String TEST_ID =
34 "LrNQbyBBZW-7pHqChtp9lfPA7eXFPW~FLbJ2WrvEx5g";
35 private static final String TEST_ID_WITH_CHANGED_LETTER =
36 "LrMQbyBBZW-7pHqChtp9lfPA7eXFPW~FLbJ2WrvEx5g";
37 private final Core core = mock(Core.class);
38 private final IdentityAccessor accessor = new IdentityAccessor(core);
39 private final IdentityManager identityManager =
40 mock(IdentityManager.class);
41 private final OwnIdentity identity = mock(OwnIdentity.class);
44 public void setupCore() {
45 when(core.getIdentityManager()).thenReturn(identityManager);
49 public void setupIdentity() {
50 setupIdentity(identity, TEST_ID, "Test");
53 private void setupIdentity(Identity identity, String id,
55 when(identity.getId()).thenReturn(id);
56 when(identity.getNickname()).thenReturn(nickname);
59 private void serveIdentities(Set<OwnIdentity> identities) {
60 when(identityManager.getAllOwnIdentities()).thenReturn(identities);
64 public void accessorReturnsTheCorrectlyAbbreviatedNickname() {
65 OwnIdentity ownIdentity = mock(OwnIdentity.class);
66 setupIdentity(ownIdentity, TEST_ID_WITH_CHANGED_LETTER, "Test");
67 serveIdentities(new HashSet(asList(identity, ownIdentity)));
68 assertThat(accessor.get(null, identity, "uniqueNickname"),
69 Matchers.<Object>is("Test@LrN"));
73 public void accessorComparesTheFullLengthIfNecessary() {
74 OwnIdentity ownIdentity = mock(OwnIdentity.class);
75 setupIdentity(ownIdentity, TEST_ID, "Test");
76 serveIdentities(new HashSet(asList(identity, ownIdentity)));
77 assertThat(accessor.get(null, identity, "uniqueNickname"),
78 Matchers.<Object>is("Test@" + TEST_ID));
82 public void reflectionAccessorIsUsedForOtherMembers() {
83 assertThat(accessor.get(null, identity, "hashCode"),
84 Matchers.<Object>is(identity.hashCode()));
88 public void accessorCanBeCreatedByGuice() {
89 Injector injector = Guice.createInjector(
92 public void configure(Binder binder) {
93 binder.bind(Core.class).toInstance(mock(Core.class));
97 assertThat(injector.getInstance(IdentityAccessor.class), notNullValue());
101 public void accessorIsCreatedAsSingleton() {
102 Injector injector = Guice.createInjector(
105 public void configure(Binder binder) {
106 binder.bind(Core.class).toInstance(mock(Core.class));
110 IdentityAccessor firstAccessor = injector.getInstance(IdentityAccessor.class);
111 IdentityAccessor secondAccessor = injector.getInstance(IdentityAccessor.class);
112 assertThat(firstAccessor, sameInstance(secondAccessor));