🔀 Merge branch 'release/v82'
[Sone.git] / src / test / java / net / pterodactylus / sone / template / IdentityAccessorTest.java
1 package net.pterodactylus.sone.template;
2
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;
9
10 import java.util.HashSet;
11 import java.util.Set;
12
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;
17 import net.pterodactylus.sone.test.GuiceKt;
18
19 import com.google.inject.Guice;
20 import com.google.inject.Injector;
21 import org.hamcrest.Matchers;
22 import org.junit.Before;
23 import org.junit.Test;
24
25 /**
26  * Unit test for {@link IdentityAccessor}.
27  */
28 public class IdentityAccessorTest {
29
30         private static final String TEST_ID =
31                         "LrNQbyBBZW-7pHqChtp9lfPA7eXFPW~FLbJ2WrvEx5g";
32         private static final String TEST_ID_WITH_CHANGED_LETTER =
33                         "LrMQbyBBZW-7pHqChtp9lfPA7eXFPW~FLbJ2WrvEx5g";
34         private final Core core = mock(Core.class);
35         private final IdentityAccessor accessor = new IdentityAccessor(core);
36         private final IdentityManager identityManager =
37                         mock(IdentityManager.class);
38         private final OwnIdentity identity = mock(OwnIdentity.class);
39
40         @Before
41         public void setupCore() {
42                 when(core.getIdentityManager()).thenReturn(identityManager);
43         }
44
45         @Before
46         public void setupIdentity() {
47                 setupIdentity(identity, TEST_ID, "Test");
48         }
49
50         private void setupIdentity(Identity identity, String id,
51                         String nickname) {
52                 when(identity.getId()).thenReturn(id);
53                 when(identity.getNickname()).thenReturn(nickname);
54         }
55
56         private void serveIdentities(Set<OwnIdentity> identities) {
57                 when(identityManager.getAllOwnIdentities()).thenReturn(identities);
58         }
59
60         @Test
61         public void accessorReturnsTheCorrectlyAbbreviatedNickname() {
62                 OwnIdentity ownIdentity = mock(OwnIdentity.class);
63                 setupIdentity(ownIdentity, TEST_ID_WITH_CHANGED_LETTER, "Test");
64                 serveIdentities(new HashSet(asList(identity, ownIdentity)));
65                 assertThat(accessor.get(null, identity, "uniqueNickname"),
66                                 Matchers.<Object>is("Test@LrN"));
67         }
68
69         @Test
70         public void accessorComparesTheFullLengthIfNecessary() {
71                 OwnIdentity ownIdentity = mock(OwnIdentity.class);
72                 setupIdentity(ownIdentity, TEST_ID, "Test");
73                 serveIdentities(new HashSet(asList(identity, ownIdentity)));
74                 assertThat(accessor.get(null, identity, "uniqueNickname"),
75                                 Matchers.<Object>is("Test@" + TEST_ID));
76         }
77
78         @Test
79         public void reflectionAccessorIsUsedForOtherMembers() {
80                 assertThat(accessor.get(null, identity, "hashCode"),
81                                 Matchers.<Object>is(identity.hashCode()));
82         }
83
84         @Test
85         public void accessorCanBeCreatedByGuice() {
86                 Injector injector = Guice.createInjector(
87                                 GuiceKt.supply(Core.class).byInstance(mock(Core.class))
88                 );
89                 assertThat(injector.getInstance(IdentityAccessor.class), notNullValue());
90         }
91
92         @Test
93         public void accessorIsCreatedAsSingleton() {
94                 Injector injector = Guice.createInjector(
95                                 GuiceKt.supply(Core.class).byInstance(mock(Core.class))
96                 );
97                 IdentityAccessor firstAccessor = injector.getInstance(IdentityAccessor.class);
98                 IdentityAccessor secondAccessor = injector.getInstance(IdentityAccessor.class);
99                 assertThat(firstAccessor, sameInstance(secondAccessor));
100         }
101
102 }