Make Sone and element ID optional
[Sone.git] / src / test / java / net / pterodactylus / sone / data / IdTest.java
1 package net.pterodactylus.sone.data;
2
3 import static org.hamcrest.MatcherAssert.assertThat;
4 import static org.hamcrest.Matchers.equalTo;
5 import static org.hamcrest.Matchers.is;
6 import static org.hamcrest.Matchers.not;
7
8 import org.junit.Test;
9
10 /**
11  * Unit test for {@link Id}.
12  *
13  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
14  */
15 public class IdTest {
16
17         private static final String SONE_ID = "~Yp72VX0c6FLDvgIzip5wIvaGIIrjKcKvnX~pTaMKXs";
18         private static final String ELEMENT_ID = "88CC70AE-E853-4EEE-B245-E4C55F40DDDF";
19         private static final String EXPECTED_ID = "139a629a13f6a2c4191fb19ecead7e57335ea3deb2a971b88d5e004378c4daad";
20
21         private final Id completeId = Id.from(SONE_ID, ELEMENT_ID);
22         private final Id parsedId = Id.from(EXPECTED_ID);
23
24         @Test
25         public void idBuilderBuildsCorrectIds() {
26                 assertThat(completeId.getSoneId().get(), is(SONE_ID));
27                 assertThat(completeId.getElementId().get(), is(ELEMENT_ID));
28                 assertThat(completeId.getExternal(), is(EXPECTED_ID));
29         }
30
31         @Test
32         public void parsedIdIsBuiltCorrectly() {
33                 assertThat(parsedId.getSoneId().isPresent(), is(false));
34                 assertThat(parsedId.getElementId().isPresent(), is(false));
35                 assertThat(parsedId.getExternal(), is(EXPECTED_ID));
36         }
37
38         @Test
39         public void twoIdsAreNotEqualIfExternalIdIsDifferent() {
40                 Id id2 = Id.from(EXPECTED_ID + "1");
41                 assertThat(id2, not(equalTo(parsedId)));
42                 assertThat(parsedId, not(equalTo(id2)));
43         }
44
45         @Test
46         public void twoIdsAreEqualIfSoneAndElementIdIsEqual() {
47                 Id id2 = Id.from(SONE_ID, ELEMENT_ID);
48                 assertThat(id2, equalTo(completeId));
49                 assertThat(completeId, equalTo(id2));
50         }
51
52         @Test
53         public void twoIdsAreEqualIfExternalIdIsEqual() {
54                 Id id2 = Id.from(EXPECTED_ID);
55                 assertThat(id2, equalTo(parsedId));
56                 assertThat(parsedId, equalTo(id2));
57         }
58
59         @Test
60         public void twoIdsHaveTheSameHashCodeIfTheyAreEqual() {
61                 Id id2 = Id.from(EXPECTED_ID);
62                 assertThat(id2.hashCode(), equalTo(completeId.hashCode()));
63         }
64
65         @Test
66         public void nullIsNotEqualToId() {
67                 assertThat(completeId, not(equalTo(null)));
68         }
69
70         @Test
71         public void objectOfDifferentClassIsNotEqualToId() {
72                 assertThat(completeId, not(equalTo(new Object())));
73         }
74
75         @Test
76         public void stringRepresentationMatchesTheExternalId() {
77                 assertThat(completeId.toString(), is(EXPECTED_ID));
78         }
79
80         @Test(expected = NullPointerException.class)
81         public void canNotParseNullAsExternalId() {
82                 Id.from(null);
83         }
84
85         @Test(expected = NullPointerException.class)
86         public void canNotParseNullAsSoneId() {
87                 Id.from(null, ELEMENT_ID);
88         }
89
90         @Test(expected = NullPointerException.class)
91         public void canNotParseNullAsElementId() {
92                 Id.from(SONE_ID, null);
93         }
94
95 }