package org.gbif.api.util; import java.util.UUID; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; public class DatasetKeyTest { private static final String EXTERNAL_DATASET_KEY = "7879e569-4a13-4643-b833-d1a564675b86:urn%3Alsid%3Aknb.ecoinformatics.org%3Aknb-lter-cdr%3A8133"; private static final String INVALID_EXTERNAL_DATASET_KEY = "7879e569:urn%3Alsid%3Aknb.ecoinformatics.org%3Aknb-lter-cdr%3A8133"; private static final String SHORT_EXTERNAL_DATASET_KEY = "7879e569"; private static final String VALID_UUID = "127da08e-5326-41ef-abbd-a27f65f3670d"; private static final String VALID_UUID_MIXED_CASE = "127DA08E-5326-41ef-abbd-a27f65f3670d"; @Test(expected = IllegalArgumentException.class) public void testParseInvalid() { DatasetKey.fromString("7879e569-4a13-4643-b833-d1a564675bzz"); } @Test(expected = IllegalArgumentException.class) public void testParseInvalid2() { DatasetKey.fromString("7879e569-4a13-4643-b833-d1a564675b861"); } @Test(expected = IllegalArgumentException.class) public void testParseInvalid3() { DatasetKey.fromString(VALID_UUID + ":"); } @Test(expected = IllegalArgumentException.class) public void testParseInvalid4() { DatasetKey.fromString("7879e569-4a13-4643-b833_d1a564675b85:aha"); } @Test(expected = IllegalArgumentException.class) public void testParseInvalid5() { DatasetKey.fromString(""); } @Test(expected = NullPointerException.class) public void testParseInvalid6() { DatasetKey.fromString(null); } @Test(expected = IllegalArgumentException.class) public void testParseInvalidWhitespaceOnly() { DatasetKey.fromString("7879e569-4a13-4643-b833_d1a564675b85: "); } @Test(expected = NullPointerException.class) public void testInvalidConstructor() { DatasetKey key = new DatasetKey(UUID.randomUUID(), null); } @Test(expected = IllegalArgumentException.class) public void testInvalidConstructor2() { DatasetKey key = new DatasetKey(UUID.randomUUID(), ""); } @Test(expected = IllegalArgumentException.class) public void testInvalidConstructor3() { DatasetKey key = new DatasetKey(UUID.randomUUID(), " "); } @Test public void testDatasetIdWhitespace() { DatasetKey key = new DatasetKey(UUID.randomUUID(), " 12 "); assertEquals("12", key.getDatasetId()); } @Test public void testParseValid() { DatasetKey key = DatasetKey.fromString(VALID_UUID); assertFalse(key.isExternalKey()); assertNull(key.getDatasetId()); assertEquals(VALID_UUID, key.getRegistryKey().toString()); key = DatasetKey.fromString(VALID_UUID_MIXED_CASE); assertFalse(key.isExternalKey()); assertNull(key.getDatasetId()); assertEquals(VALID_UUID, key.getRegistryKey().toString()); key = DatasetKey.fromString(VALID_UUID + ":aha"); assertEquals("aha", key.getDatasetId()); key = DatasetKey.fromString(VALID_UUID + ":1"); assertEquals("1", key.getDatasetId()); key = DatasetKey.fromString(VALID_UUID + ":?:1-3"); assertEquals("?:1-3", key.getDatasetId()); key = DatasetKey.fromString(VALID_UUID + ":-"); assertEquals("-", key.getDatasetId()); } @Test(expected = IllegalArgumentException.class) public void testParseNetworkKeyInvalid() { DatasetKey.fromString(INVALID_EXTERNAL_DATASET_KEY); } @Test(expected = IllegalArgumentException.class) public void testParseNetworkKeyShort() { DatasetKey.fromString(SHORT_EXTERNAL_DATASET_KEY); } @Test public void testParseNetworkKey() { DatasetKey key = DatasetKey.fromString(EXTERNAL_DATASET_KEY); assertTrue(key.isExternalKey()); assertEquals(UUID.fromString("7879e569-4a13-4643-b833-d1a564675b86"), key.getRegistryKey()); assertEquals("urn%3Alsid%3Aknb.ecoinformatics.org%3Aknb-lter-cdr%3A8133", key.getDatasetId()); } @Test public void testParseNetworkKeyMixedCase() { DatasetKey key = DatasetKey.fromString(VALID_UUID_MIXED_CASE); assertFalse(key.isExternalKey()); assertEquals(UUID.fromString(VALID_UUID_MIXED_CASE), key.getRegistryKey()); } @Test public void testRoundtrip() { DatasetKey key = DatasetKey.fromString(EXTERNAL_DATASET_KEY); assertEquals(EXTERNAL_DATASET_KEY, key.toDatasetKey()); key = new DatasetKey(UUID.fromString(VALID_UUID)); assertEquals(VALID_UUID, key.toDatasetKey()); } }