--- /dev/null
+package net.pterodactylus.sone.data;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
+
+import org.junit.Test;
+
+/**
+ * Unit test for {@link Id}.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+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);
+
+ @Test
+ public void idBuilderBuildsCorrectIds() {
+ assertThat(id.getSoneId(), is(SONE_ID));
+ assertThat(id.getElementId(), is(ELEMENT_ID));
+ assertThat(id.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)));
+ }
+
+ @Test
+ public void twoIdsAreNotEqualIfElementIdIsDifferent() {
+ Id id2 = Id.from(SONE_ID, ELEMENT_ID + "1");
+ assertThat(id2, not(equalTo(id)));
+ assertThat(id, not(equalTo(id2)));
+ }
+
+ @Test
+ public void twoIdsAreEqualIfSoneAndElementIdIsEqual() {
+ Id id2 = Id.from(SONE_ID, ELEMENT_ID);
+ assertThat(id2, equalTo(id));
+ assertThat(id, equalTo(id2));
+ }
+
+ @Test
+ public void twoIdsHaveTheSameHashCodeIfTheyAreEqual() {
+ Id id2 = Id.from(SONE_ID, ELEMENT_ID);
+ assertThat(id2.hashCode(), equalTo(id.hashCode()));
+ }
+
+ @Test
+ public void nullIsNotEqualToId() {
+ assertThat(id, not(equalTo(null)));
+ }
+
+ @Test
+ public void objectOfDifferentClassIsNotEqualToId() {
+ assertThat(id, not(equalTo(new Object())));
+ }
+
+ @Test
+ public void stringRepresentationMatchesTheExternalId() {
+ assertThat(id.toString(), is(EXPECTED_ID));
+ }
+
+}