package cgeo.geocaching.connector.trackable; import org.xml.sax.InputSource; import java.util.List; import cgeo.geocaching.models.Trackable; import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase; import cgeo.geocaching.test.R; import static org.assertj.core.api.Java6Assertions.assertThat; /** * test for {@link GeokretyConnector} */ public class GeokretyConnectorTest extends AbstractResourceInstrumentationTestCase { public static void testCanHandleTrackable() { assertThat(getConnector().canHandleTrackable("GK82A2")).isTrue(); assertThat(getConnector().canHandleTrackable("TB1234")).isFalse(); assertThat(getConnector().canHandleTrackable("UNKNOWN")).isFalse(); assertThat(getConnector().canHandleTrackable("GKXYZ1")).isFalse(); // non hex assertThat(getConnector().canHandleTrackable("GKXYZ1", TrackableBrand.GEOKRETY)).isTrue(); // non hex, but match secret codes pattern assertThat(getConnector().canHandleTrackable("123456", TrackableBrand.GEOKRETY)).isTrue(); // Secret code assertThat(getConnector().canHandleTrackable("012345", TrackableBrand.GEOKRETY)).isFalse(); // blacklisted 0/O assertThat(getConnector().canHandleTrackable("ABCDEF", TrackableBrand.GEOKRETY)).isTrue(); // Secret code assertThat(getConnector().canHandleTrackable("LMNOPQ", TrackableBrand.GEOKRETY)).isFalse(); // blacklisted 0/O assertThat(getConnector().canHandleTrackable("GC1234")).isFalse(); assertThat(getConnector().canHandleTrackable("GC1234", TrackableBrand.UNKNOWN)).isFalse(); assertThat(getConnector().canHandleTrackable("GC1234", TrackableBrand.TRAVELBUG)).isFalse(); assertThat(getConnector().canHandleTrackable("GC1234", TrackableBrand.GEOKRETY)).isTrue(); } public static void testGetTrackableCodeFromUrl() throws Exception { assertThat(getConnector().getTrackableCodeFromUrl("http://www.geokrety.org/konkret.php?id=46464")).isEqualTo("GKB580"); assertThat(getConnector().getTrackableCodeFromUrl("https://www.geokrety.org/konkret.php?id=46464")).isEqualTo("GKB580"); assertThat(getConnector().getTrackableCodeFromUrl("http://geokrety.org/konkret.php?id=46465")).isEqualTo("GKB581"); assertThat(getConnector().getTrackableCodeFromUrl("https://geokrety.org/konkret.php?id=46465")).isEqualTo("GKB581"); } public static void testGeocode() throws Exception { assertThat(GeokretyConnector.geocode(46464)).isEqualTo("GKB580"); } public static void testGetId() throws Exception { assertThat(GeokretyConnector.getId("GKB581")).isEqualTo(46465); } public void testGetUrl() throws Exception { final List<Trackable> trackables = GeokretyParser.parse(new InputSource(getResourceStream(R.raw.geokret141_xml))); assertThat(trackables).hasSize(2); assertThat(trackables.get(0).getUrl()).isEqualTo("https://geokrety.org/konkret.php?id=46464"); assertThat(trackables.get(1).getUrl()).isEqualTo("https://geokrety.org/konkret.php?id=46465"); } public void testSearchTrackable() throws Exception { final Trackable geokret = GeokretyConnector.searchTrackable("GKB580"); assertThat(geokret).isNotNull(); assert geokret != null; assertThat(geokret.getBrand()).isEqualTo(TrackableBrand.GEOKRETY); assertThat(geokret.getName()).isEqualTo("c:geo One"); assertThat(geokret.getDetails()).isEqualTo("GeoKret for the c:geo project :)<br />DO NOT MOVE"); assertThat(geokret.getOwner()).isEqualTo("kumy"); assertThat(geokret.isMissing()).isTrue(); assertThat(geokret.isLoggable()).isTrue(); assertThat(geokret.getSpottedName()).isEqualTo("OX5BRQK"); assertThat(geokret.getSpottedType()).isEqualTo(Trackable.SPOTTED_CACHE); } public void testSearchTrackables() throws Exception { // here it is assumed that: // * cache OX5BRQK contains these 2 objects only... // * objects never been moved // * GK website always return list in the same order final List<Trackable> trackables = new GeokretyConnector().searchTrackables("OX5BRQK"); assertThat(trackables).hasSize(2); assertThat(trackables.get(0).getName()).isEqualTo("c:geo Two"); assertThat(trackables.get(1).getName()).isEqualTo("c:geo One"); } public void testGetIconBrand() throws Exception { final List<Trackable> trackables = GeokretyParser.parse(new InputSource(getResourceStream(R.raw.geokret141_xml))); assertThat(trackables).hasSize(2); assertThat(trackables.get(0).getIconBrand()).isEqualTo(TrackableBrand.GEOKRETY.getIconResource()); assertThat(trackables.get(1).getIconBrand()).isEqualTo(TrackableBrand.GEOKRETY.getIconResource()); } private static GeokretyConnector getConnector() { return new GeokretyConnector(); } public static void testRecommendGeocode() throws Exception { assertThat(getConnector().recommendLogWithGeocode()).isTrue(); } }