Green tests. Code manages to save bad events. As a fix for now : The code throws data it's unable to instatiate as events.
This commit is contained in:
parent
81dde7c961
commit
11fdad9d10
|
@ -24,27 +24,26 @@ public class ApplicationTest extends AndroidTestCase {
|
|||
}
|
||||
|
||||
public void testFetchFromApi() throws Throwable {
|
||||
String result = eventDbHelper.fetchWebEventData();
|
||||
assertNotNull(result);
|
||||
ArrayList<Event> events = eventDbHelper.parseJsonEvents(eventDbHelper.fetchWebEventData());
|
||||
assertTrue(events.size() > 150);
|
||||
}
|
||||
|
||||
public void testSaveFileWithApiData() throws Throwable {
|
||||
ArrayList<Event> events = eventDbHelper.parseJsonEvents(eventDbHelper.fetchWebEventData());
|
||||
eventDbHelper.saveFile(events);
|
||||
ArrayList storedEvents = eventDbHelper.getStoredData();
|
||||
assertTrue(storedEvents.size() > (events.size() / 2));
|
||||
}
|
||||
|
||||
public void testParseJsonEvent() {
|
||||
ArrayList<Event> events = null;
|
||||
try {
|
||||
events = EventDbHelper.parseJsonEvents(TestUtils.getExampleJson());
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
events = EventDbHelper.parseJsonEvents(TestUtils.getExampleJson());
|
||||
assertTrue(events.size() == 2);
|
||||
}
|
||||
|
||||
public void testInsertIntoTextFile() {
|
||||
ArrayList<Event> events = null;
|
||||
try {
|
||||
events = EventDbHelper.parseJsonEvents(TestUtils.getExampleJson());
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
events = EventDbHelper.parseJsonEvents(TestUtils.getExampleJson());
|
||||
getContext().getContentResolver()
|
||||
.insert(EventContract.EventEntry.CONTENT_URI, events.get(0).getContentValues());
|
||||
assertTrue(eventDbHelper.getStoredData().contains(events.get(0)));
|
||||
|
@ -52,11 +51,7 @@ public class ApplicationTest extends AndroidTestCase {
|
|||
|
||||
public void testDeleteAll() {
|
||||
ArrayList<Event> events = null;
|
||||
try {
|
||||
events = EventDbHelper.parseJsonEvents(TestUtils.getExampleJson());
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
events = EventDbHelper.parseJsonEvents(TestUtils.getExampleJson());
|
||||
getContext().getContentResolver()
|
||||
.insert(EventContract.EventEntry.CONTENT_URI, events.get(0).getContentValues());
|
||||
assertTrue(eventDbHelper.getStoredData().contains(events.get(0)));
|
||||
|
@ -67,11 +62,7 @@ public class ApplicationTest extends AndroidTestCase {
|
|||
|
||||
public void testGetCursor() {
|
||||
ArrayList<Event> events = null;
|
||||
try {
|
||||
events = EventDbHelper.parseJsonEvents(TestUtils.getExampleJson());
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
events = EventDbHelper.parseJsonEvents(TestUtils.getExampleJson());
|
||||
getContext().getContentResolver()
|
||||
.insert(EventContract.EventEntry.CONTENT_URI, events.get(0).getContentValues());
|
||||
Cursor cursor = getContext().getContentResolver()
|
||||
|
|
|
@ -13,8 +13,8 @@ import android.view.ViewGroup;
|
|||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
|
||||
import no.nilsnh.uibevents.data.Event;
|
||||
import no.nilsnh.uibevents.data.EventContract;
|
||||
import no.nilsnh.uibevents.sync.UibEventsSyncAdapter;
|
||||
|
||||
public class EventFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
|
||||
public static final String LOG_TAG = EventFragment.class.getSimpleName();
|
||||
|
@ -33,6 +33,8 @@ public class EventFragment extends Fragment implements LoaderManager.LoaderCallb
|
|||
static final int COL_EVENT_DETAILS = 6;
|
||||
static final int COL_EVENT_URL = 7;
|
||||
|
||||
private static final int EVENT_LOADER = 0;
|
||||
|
||||
public EventFragment() {
|
||||
|
||||
}
|
||||
|
@ -95,6 +97,16 @@ public class EventFragment extends Fragment implements LoaderManager.LoaderCallb
|
|||
null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
getLoaderManager().initLoader(EVENT_LOADER, null, this);
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
}
|
||||
|
||||
private void updateEvents() {
|
||||
UibEventsSyncAdapter.syncImmediately(getActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
|
||||
eventAdapter.swapCursor(data);
|
||||
|
@ -105,6 +117,18 @@ public class EventFragment extends Fragment implements LoaderManager.LoaderCallb
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
// When tablets rotate, the currently selected list item needs to be saved.
|
||||
// When no item is selected, mPosition will be set to Listview.INVALID_POSITION,
|
||||
// so check for that before storing.
|
||||
if (mPosition != ListView.INVALID_POSITION) {
|
||||
outState.putInt(SELECTED_KEY, mPosition);
|
||||
}
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(Loader<Cursor> loader) {
|
||||
eventAdapter.swapCursor(null);
|
||||
|
@ -121,6 +145,4 @@ public class EventFragment extends Fragment implements LoaderManager.LoaderCallb
|
|||
*/
|
||||
public void onItemSelected(Uri dateUri);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ public class MainActivity extends ActionBarActivity implements EventFragment.Cal
|
|||
// eventFragment.setUseTodayLayout(!mTwoPane);
|
||||
|
||||
UibEventsSyncAdapter.initializeSyncAdapter(this);
|
||||
|
||||
UibEventsSyncAdapter.syncImmediately(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -27,8 +27,9 @@ public class Event {
|
|||
url = values.getAsString("url");
|
||||
}
|
||||
|
||||
public Event(String event) {
|
||||
String[] eventDetailsString = event.split(";");
|
||||
public Event(String event) throws ArrayIndexOutOfBoundsException{
|
||||
String[] eventDetailsString = null;
|
||||
eventDetailsString = event.split(";");
|
||||
id = eventDetailsString[0];
|
||||
type = eventDetailsString[1];
|
||||
title = eventDetailsString[2];
|
||||
|
|
|
@ -12,6 +12,9 @@ import org.json.JSONObject;
|
|||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
|
@ -19,6 +22,8 @@ import java.io.InputStream;
|
|||
import java.io.InputStreamReader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.nio.channels.FileLock;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
|
@ -92,26 +97,44 @@ public class EventDbHelper {
|
|||
}
|
||||
}
|
||||
}
|
||||
return eventJsonStr;
|
||||
return eventJsonStr.replace(";", "-");
|
||||
}
|
||||
|
||||
public static ArrayList<Event> parseJsonEvents(String data) throws JSONException {
|
||||
public static ArrayList<Event> parseJsonEvents(String data) {
|
||||
ArrayList<Event> parsedEvents = new ArrayList<>();
|
||||
JSONArray events = new JSONObject(data).getJSONArray("events");
|
||||
for (int i = 0; i < events.length(); i++) {
|
||||
Event event = new Event(events.getJSONObject(i));
|
||||
parsedEvents.add(event);
|
||||
JSONArray events = null;
|
||||
try {
|
||||
events = new JSONObject(data).getJSONArray("events");
|
||||
for (int i = 0; i < events.length(); i++) {
|
||||
Event event = new Event(events.getJSONObject(i));
|
||||
parsedEvents.add(event);
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return parsedEvents;
|
||||
}
|
||||
|
||||
public void saveFile(String data) {
|
||||
try {
|
||||
String fullFilePath = ctx.getFilesDir() + "/" + filename;
|
||||
BufferedWriter buf = new BufferedWriter(new FileWriter(fullFilePath));
|
||||
buf.write(data);
|
||||
buf.close();
|
||||
} catch (Exception e) {
|
||||
File file = new File(ctx.getFilesDir() + "/" + filename);
|
||||
if (file.exists()) file.delete(); //TODO Only delete events older than X date.
|
||||
|
||||
file.createNewFile();
|
||||
FileOutputStream outStream = new FileOutputStream(file);
|
||||
FileChannel channel = outStream.getChannel();
|
||||
FileLock lock = channel.lock();
|
||||
|
||||
outStream.write(data.getBytes());
|
||||
outStream.flush();
|
||||
|
||||
lock.release();
|
||||
|
||||
outStream.close();
|
||||
|
||||
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
Log.d(LOG_TAG, "Data was saved!");
|
||||
|
@ -135,7 +158,7 @@ public class EventDbHelper {
|
|||
BufferedReader br = new BufferedReader(new FileReader(file));
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
eventStrings.add(line);
|
||||
if(!line.isEmpty()) eventStrings.add(line);
|
||||
}
|
||||
}
|
||||
catch (IOException e) {
|
||||
|
@ -143,9 +166,17 @@ public class EventDbHelper {
|
|||
}
|
||||
|
||||
ArrayList<Event> events = new ArrayList<>();
|
||||
Event event = null;
|
||||
for (String eventString: eventStrings) {
|
||||
events.add(new Event(eventString));
|
||||
try {
|
||||
event = new Event(eventString);
|
||||
events.add(event);
|
||||
} catch (ArrayIndexOutOfBoundsException e) {
|
||||
Log.d(LOG_TAG, "Could not create event from malformed data");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
Log.d(LOG_TAG, "Finished reading stored data");
|
||||
return events;
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -12,7 +12,11 @@ import android.os.Build;
|
|||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import no.nilsnh.uibevents.R;
|
||||
import no.nilsnh.uibevents.data.Event;
|
||||
import no.nilsnh.uibevents.data.EventDbHelper;
|
||||
|
||||
public class UibEventsSyncAdapter extends AbstractThreadedSyncAdapter {
|
||||
|
||||
|
@ -28,7 +32,9 @@ public class UibEventsSyncAdapter extends AbstractThreadedSyncAdapter {
|
|||
@Override
|
||||
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
|
||||
Log.d(LOG_TAG, "Starting sync");
|
||||
|
||||
EventDbHelper db = new EventDbHelper(getContext());
|
||||
ArrayList<Event> events = db.parseJsonEvents(db.fetchWebEventData());
|
||||
db.saveFile(events);
|
||||
}
|
||||
|
||||
public static void initializeSyncAdapter(Context context) {
|
||||
|
|
Loading…
Reference in a new issue