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:
Nils Norman Haukås 2015-04-19 22:46:12 +02:00
parent 81dde7c961
commit 11fdad9d10
6 changed files with 93 additions and 42 deletions

View file

@ -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()

View file

@ -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);
}
}

View file

@ -45,7 +45,7 @@ public class MainActivity extends ActionBarActivity implements EventFragment.Cal
// eventFragment.setUseTodayLayout(!mTwoPane);
UibEventsSyncAdapter.initializeSyncAdapter(this);
UibEventsSyncAdapter.syncImmediately(this);
}
@Override

View file

@ -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];

View file

@ -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 {

View file

@ -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) {