aboutsummaryrefslogtreecommitdiffstats
path: root/tests/src/cgeo/geocaching/export/ExportTest.java
blob: bec676f4aea893a0162086eecdb950aca9249ed7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package cgeo.geocaching.export;

import static org.assertj.core.api.Assertions.assertThat;

import cgeo.CGeoTestCase;
import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.location.Geopoint;
import cgeo.geocaching.utils.FileUtils;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutionException;

public class ExportTest extends CGeoTestCase {

    public static void testGSAKExport() {
        final Geocache cache = new Geocache();
        cache.setGeocode("GCX1234");
        final LogEntry log = new LogEntry(1353244820000L, LogType.FOUND_IT, "Hidden in a tree");
        FieldNotes fieldNotes = new FieldNotes();
        fieldNotes.add(cache, log);
        assertEquals("Non matching export " + fieldNotes.getContent(), "GCX1234,2012-11-18T13:20:20Z,Found it,\"Hidden in a tree\"\n", fieldNotes.getContent());
    }

    public static void testGpxExportSmilies() throws InterruptedException, ExecutionException, IOException {
        final Geocache cache = new Geocache();
        cache.setGeocode("GCX1234");
        cache.setCoords(new Geopoint("N 49 44.000 E 8 37.000"));
        final LogEntry log = new LogEntry(1353244820000L, LogType.FOUND_IT, "Smile: \ud83d\ude0a");
        DataStore.saveCache(cache, LoadFlags.SAVE_ALL);
        DataStore.saveLogs(cache.getGeocode(), Collections.singletonList(log));
        assertCanExport(cache);
    }

    public static void testGpxExportUnknownConnector() throws InterruptedException, ExecutionException, IOException {
        final Geocache cache = new Geocache();
        cache.setGeocode("ABC123");
        cache.setCoords(new Geopoint("N 49 44.000 E 8 37.000"));
        DataStore.saveCache(cache, LoadFlags.SAVE_ALL);

        assertThat(ConnectorFactory.getConnector(cache).getName()).isEqualTo("Unknown caches");
        assertCanExport(cache);
    }

    private static void assertCanExport(final Geocache cache) throws InterruptedException, ExecutionException, IOException {
        // enforce storing in database, as GPX will not take information from cache
        cache.setDetailed(true);
        DataStore.saveCache(cache, LoadFlags.SAVE_ALL);

        List<Geocache> exportList = Collections.singletonList(cache);
        GpxExportTester gpxExport = new GpxExportTester();
        File result = null;
        try {
            result = gpxExport.testExportSync(exportList);
        } finally {
            DataStore.removeCache(cache.getGeocode(), LoadFlags.REMOVE_ALL);
        }

        assertThat(result).isNotNull();

        // make sure we actually exported waypoints
        String gpx = org.apache.commons.io.FileUtils.readFileToString(result);
        assertThat(gpx).contains("<wpt");
        assertThat(gpx).contains(cache.getGeocode());

        FileUtils.deleteIgnoringFailure(result);
    }

    private static class GpxExportTester extends GpxExport {

        public File testExportSync(List<Geocache> caches) throws InterruptedException, ExecutionException {
            final ArrayList<String> geocodes = new ArrayList<String>(caches.size());
            for (final Geocache cache : caches) {
                geocodes.add(cache.getGeocode());
            }
            final ExportTask task = new ExportTask(null);
            task.execute(geocodes.toArray(new String[geocodes.size()]));
            return task.get();
        }

    }

}