package cgeo.geocaching.models; import static org.assertj.core.api.Java6Assertions.assertThat; import cgeo.geocaching.connector.trackable.TrackableBrand; import cgeo.geocaching.log.LogEntry; import cgeo.geocaching.log.LogType; import java.util.AbstractList; import java.util.ArrayList; import java.util.Date; import junit.framework.TestCase; public class TrackableTest extends TestCase { public static void testGetGeocode() { final Trackable trackable = createTrackable("tb1234"); assertThat(trackable.getGeocode()).isEqualTo("TB1234"); } public static void testGetUniqueID() { final Trackable trackable = createTrackable("tb1234"); assertThat(trackable.getUniqueID()).isEqualTo("TB1234"); trackable.setGuid("1234-567-890"); assertThat(trackable.getUniqueID()).isEqualTo("1234-567-890"); } public static void testSetLogsNull() { final Trackable trackable = new Trackable(); trackable.setLogs(null); assertThat(trackable.getLogs()).as("Trackable logs").isNotNull(); } public static void testTrackableUrl() { final Trackable trackable = createTrackable("TB1234"); assertThat(trackable.getUrl()).isEqualTo("https://www.geocaching.com//track/details.aspx?tracker=TB1234"); } public static void testGeokretUrl() { final Trackable geokret = createTrackable("GK82A2"); assertThat(geokret.getUrl()).isEqualTo("https://geokrety.org/konkret.php?id=33442"); } public static void testLoggable() { assertThat(createTrackable("TB1234").isLoggable()).isTrue(); assertThat(createTrackable("GK1234").isLoggable()).isTrue(); } public static void testMergeTrackable() { final Trackable trackable1 = createTrackable("TB1234"); final AbstractList<LogEntry> logEntryList1 = new ArrayList<>(1); final LogEntry logEntry1 = new LogEntry.Builder() .setAuthor("author") .setDate(100) .setLogType(LogType.FOUND_IT) .setLog("OLDER") .build(); logEntryList1.add(logEntry1); trackable1.setLogs(logEntryList1); final Trackable trackable2 = createTrackable("GK43210"); trackable2.setGuid("guid"); trackable2.setIconUrl("iconUrl"); trackable2.setName("name"); trackable2.setType("type"); trackable2.setReleased(new Date()); trackable2.setDistance(100); trackable2.setOrigin("origin"); trackable2.setOwner("owner"); trackable2.setSpottedName("spottedName"); trackable2.setSpottedType(Trackable.SPOTTED_CACHE); trackable2.setSpottedGuid("spottedGuid"); trackable2.setGoal("goal"); trackable2.setDetails("details"); trackable2.setImage("image"); final AbstractList<LogEntry> logEntryList2 = new ArrayList<>(1); final LogEntry logEntry2 = new LogEntry.Builder() .setAuthor("author") .setDate(200) .setLogType(LogType.FOUND_IT) .setLog("RECENT") .build(); logEntryList2.add(logEntry1); logEntryList2.add(logEntry2); trackable2.setLogs(logEntryList2); trackable2.setTrackingcode("trackingcode"); trackable2.forceSetBrand(TrackableBrand.GEOKRETY); trackable2.setMissing(true); trackable1.mergeTrackable(trackable2); assertThat(trackable1.getGuid()).isEqualTo(trackable2.getGuid()); assertThat(trackable1.getIconUrl()).isEqualTo(trackable2.getIconUrl()); assertThat(trackable1.getName()).isEqualTo(trackable2.getName()); assertThat(trackable1.getType()).isEqualTo(trackable2.getType()); assertThat(trackable1.getReleased()).isEqualTo(trackable2.getReleased()); assertThat(trackable1.getDistance()).isEqualTo(trackable2.getDistance()); assertThat(trackable1.getOrigin()).isEqualTo(trackable2.getOrigin()); assertThat(trackable1.getOwner()).isEqualTo(trackable2.getOwner()); assertThat(trackable1.getSpottedName()).isEqualTo(trackable2.getSpottedName()); assertThat(trackable1.getSpottedType()).isEqualTo(trackable2.getSpottedType()); assertThat(trackable1.getSpottedGuid()).isEqualTo(trackable2.getSpottedGuid()); assertThat(trackable1.getGoal()).isEqualTo(trackable2.getGoal()); assertThat(trackable1.getDetails()).isEqualTo(trackable2.getDetails()); assertThat(trackable1.getImage()).isEqualTo(trackable2.getImage()); assertThat(trackable1.getTrackingcode()).isEqualTo(trackable2.getTrackingcode()); assertThat(trackable1.getBrand()).isEqualTo(trackable2.getBrand()); assertThat(trackable1.isMissing()).isEqualTo(trackable2.isMissing()); assertThat(trackable1.getLogs()).hasSize(2); assertThat(trackable1.getLogs().get(0)).isEqualTo(logEntry2); assertThat(trackable1.getLogs().get(1)).isEqualTo(logEntry1); } private static Trackable createTrackable(final String geocode) { final Trackable trackable = new Trackable(); trackable.setGeocode(geocode); return trackable; } }