Make Sone and element ID optional
[Sone.git] / src / test / java / net / pterodactylus / sone / data / IdTest.java
index 082f65b..46964d0 100644 (file)
@@ -17,55 +17,79 @@ public class IdTest {
        private static final String SONE_ID = "~Yp72VX0c6FLDvgIzip5wIvaGIIrjKcKvnX~pTaMKXs";
        private static final String ELEMENT_ID = "88CC70AE-E853-4EEE-B245-E4C55F40DDDF";
        private static final String EXPECTED_ID = "139a629a13f6a2c4191fb19ecead7e57335ea3deb2a971b88d5e004378c4daad";
-       private final Id id = Id.from(SONE_ID, ELEMENT_ID);
+
+       private final Id completeId = Id.from(SONE_ID, ELEMENT_ID);
+       private final Id parsedId = Id.from(EXPECTED_ID);
 
        @Test
        public void idBuilderBuildsCorrectIds() {
-               assertThat(id.getSoneId(), is(SONE_ID));
-               assertThat(id.getElementId(), is(ELEMENT_ID));
-               assertThat(id.getExternal(), is(EXPECTED_ID));
+               assertThat(completeId.getSoneId().get(), is(SONE_ID));
+               assertThat(completeId.getElementId().get(), is(ELEMENT_ID));
+               assertThat(completeId.getExternal(), is(EXPECTED_ID));
        }
 
        @Test
-       public void twoIdsAreNotEqualIfSoneIdIsDifferent() {
-               Id id2 = Id.from(SONE_ID + "1", ELEMENT_ID);
-               assertThat(id2, not(equalTo(id)));
-               assertThat(id, not(equalTo(id2)));
+       public void parsedIdIsBuiltCorrectly() {
+               assertThat(parsedId.getSoneId().isPresent(), is(false));
+               assertThat(parsedId.getElementId().isPresent(), is(false));
+               assertThat(parsedId.getExternal(), is(EXPECTED_ID));
        }
 
        @Test
-       public void twoIdsAreNotEqualIfElementIdIsDifferent() {
-               Id id2 = Id.from(SONE_ID, ELEMENT_ID + "1");
-               assertThat(id2, not(equalTo(id)));
-               assertThat(id, not(equalTo(id2)));
+       public void twoIdsAreNotEqualIfExternalIdIsDifferent() {
+               Id id2 = Id.from(EXPECTED_ID + "1");
+               assertThat(id2, not(equalTo(parsedId)));
+               assertThat(parsedId, not(equalTo(id2)));
        }
 
        @Test
        public void twoIdsAreEqualIfSoneAndElementIdIsEqual() {
                Id id2 = Id.from(SONE_ID, ELEMENT_ID);
-               assertThat(id2, equalTo(id));
-               assertThat(id, equalTo(id2));
+               assertThat(id2, equalTo(completeId));
+               assertThat(completeId, equalTo(id2));
+       }
+
+       @Test
+       public void twoIdsAreEqualIfExternalIdIsEqual() {
+               Id id2 = Id.from(EXPECTED_ID);
+               assertThat(id2, equalTo(parsedId));
+               assertThat(parsedId, equalTo(id2));
        }
 
        @Test
        public void twoIdsHaveTheSameHashCodeIfTheyAreEqual() {
-               Id id2 = Id.from(SONE_ID, ELEMENT_ID);
-               assertThat(id2.hashCode(), equalTo(id.hashCode()));
+               Id id2 = Id.from(EXPECTED_ID);
+               assertThat(id2.hashCode(), equalTo(completeId.hashCode()));
        }
 
        @Test
        public void nullIsNotEqualToId() {
-               assertThat(id, not(equalTo(null)));
+               assertThat(completeId, not(equalTo(null)));
        }
 
        @Test
        public void objectOfDifferentClassIsNotEqualToId() {
-               assertThat(id, not(equalTo(new Object())));
+               assertThat(completeId, not(equalTo(new Object())));
        }
 
        @Test
        public void stringRepresentationMatchesTheExternalId() {
-               assertThat(id.toString(), is(EXPECTED_ID));
+               assertThat(completeId.toString(), is(EXPECTED_ID));
+       }
+
+       @Test(expected = NullPointerException.class)
+       public void canNotParseNullAsExternalId() {
+               Id.from(null);
+       }
+
+       @Test(expected = NullPointerException.class)
+       public void canNotParseNullAsSoneId() {
+               Id.from(null, ELEMENT_ID);
+       }
+
+       @Test(expected = NullPointerException.class)
+       public void canNotParseNullAsElementId() {
+               Id.from(SONE_ID, null);
        }
 
 }