import android.test.AndroidTestCase;
import android.util.Log;
+import java.util.Map;
+import java.util.Set;
+
import uk.me.njae.sunshine.data.WeatherContract.LocationEntry;
import uk.me.njae.sunshine.data.WeatherContract.WeatherEntry;
import uk.me.njae.sunshine.data.WeatherDbHelper;
SQLiteDatabase db = dbHelper.getWritableDatabase();
// Create a new map of values, where column names are the keys
- ContentValues values = new ContentValues();
- values.put(LocationEntry.COLUMN_LOCATION_SETTING, testLocationSetting);
- values.put(LocationEntry.COLUMN_CITY_NAME, testCityName);
- values.put(LocationEntry.COLUMN_COORD_LAT, testLatitude);
- values.put(LocationEntry.COLUMN_COORD_LONG, testLongitude);
+ ContentValues locationTestValues = createNorthPoleLocationValues();
long locationRowId;
- locationRowId = db.insert(LocationEntry.TABLE_NAME, null, values);
+ locationRowId = db.insert(LocationEntry.TABLE_NAME, null, locationTestValues);
// Verify we got a row back.
assertTrue(locationRowId != -1);
// Data's inserted. IN THEORY. Now pull some out to stare at it and verify it made
// the round trip.
- // Specify which columns you want.
- String[] columns = {
- LocationEntry._ID,
- LocationEntry.COLUMN_LOCATION_SETTING,
- LocationEntry.COLUMN_CITY_NAME,
- LocationEntry.COLUMN_COORD_LAT,
- LocationEntry.COLUMN_COORD_LONG
- };
-
// A cursor is your primary interface to the query results.
Cursor cursor = db.query(
LocationEntry.TABLE_NAME, // Table to Query
- columns,
+ null, // All columns
null, // Columns for the "where" clause
null, // Values for the "where" clause
null, // columns to group by
null // sort order
);
- // If possible, move to the first row of the query results.
- if (cursor.moveToFirst()) {
- // Get the value in each column by finding the appropriate column index.
- int locationIndex = cursor.getColumnIndex(LocationEntry.COLUMN_LOCATION_SETTING);
- String location = cursor.getString(locationIndex);
-
- int nameIndex = cursor.getColumnIndex((LocationEntry.COLUMN_CITY_NAME));
- String name = cursor.getString(nameIndex);
-
- int latIndex = cursor.getColumnIndex((LocationEntry.COLUMN_COORD_LAT));
- double latitude = cursor.getDouble(latIndex);
-
- int longIndex = cursor.getColumnIndex((LocationEntry.COLUMN_COORD_LONG));
- double longitude = cursor.getDouble(longIndex);
-
- // Hooray, data was returned! Assert that it's the right data, and that the database
- // creation code is working as intended.
- // Then take a break. We both know that wasn't easy.
- assertEquals(testCityName, name);
- assertEquals(testLocationSetting, location);
- assertEquals(testLatitude, latitude);
- assertEquals(testLongitude, longitude);
-
- // Fantastic. Now that we have a location, add some weather!
- } else {
- // That's weird, it works on MY machine...
- fail("No values returned :(");
- }
+ validateCursor(cursor, locationTestValues);
// Fantastic. Now that we have a location, add some weather!
- ContentValues weatherValues = new ContentValues();
- weatherValues.put(WeatherEntry.COLUMN_LOC_KEY, locationRowId);
- weatherValues.put(WeatherEntry.COLUMN_DATETEXT, "20141205");
- weatherValues.put(WeatherEntry.COLUMN_DEGREES, 1.1);
- weatherValues.put(WeatherEntry.COLUMN_HUMIDITY, 1.2);
- weatherValues.put(WeatherEntry.COLUMN_PRESSURE, 1.3);
- weatherValues.put(WeatherEntry.COLUMN_MAX_TEMP, 75);
- weatherValues.put(WeatherEntry.COLUMN_MIN_TEMP, 65);
- weatherValues.put(WeatherEntry.COLUMN_SHORT_DESC, "Asteroids");
- weatherValues.put(WeatherEntry.COLUMN_WIND_SPEED, 5.5);
- weatherValues.put(WeatherEntry.COLUMN_WEATHER_ID, 321);
- long weatherRowId = db.insert(WeatherEntry.TABLE_NAME, null, weatherValues);
+ ContentValues weatherTestValues = createWeatherValues(locationRowId);
+
+ long weatherRowId = db.insert(WeatherEntry.TABLE_NAME, null, weatherTestValues);
assertTrue(weatherRowId != -1);
// A cursor is your primary interface to the query results.
null // sort order
);
- if (!weatherCursor.moveToFirst()) {
- fail("No weather data returned!");
- }
-
- assertEquals(weatherCursor.getInt(
- weatherCursor.getColumnIndex(WeatherEntry.COLUMN_LOC_KEY)), locationRowId);
- assertEquals(weatherCursor.getString(
- weatherCursor.getColumnIndex(WeatherEntry.COLUMN_DATETEXT)), "20141205");
- assertEquals(weatherCursor.getDouble(
- weatherCursor.getColumnIndex(WeatherEntry.COLUMN_DEGREES)), 1.1);
- assertEquals(weatherCursor.getDouble(
- weatherCursor.getColumnIndex(WeatherEntry.COLUMN_HUMIDITY)), 1.2);
- assertEquals(weatherCursor.getDouble(
- weatherCursor.getColumnIndex(WeatherEntry.COLUMN_PRESSURE)), 1.3);
- assertEquals(weatherCursor.getInt(
- weatherCursor.getColumnIndex(WeatherEntry.COLUMN_MAX_TEMP)), 75);
- assertEquals(weatherCursor.getInt(
- weatherCursor.getColumnIndex(WeatherEntry.COLUMN_MIN_TEMP)), 65);
- assertEquals(weatherCursor.getString(
- weatherCursor.getColumnIndex(WeatherEntry.COLUMN_SHORT_DESC)), "Asteroids");
- assertEquals(weatherCursor.getDouble(
- weatherCursor.getColumnIndex(WeatherEntry.COLUMN_WIND_SPEED)), 5.5);
- assertEquals(weatherCursor.getInt(
- weatherCursor.getColumnIndex(WeatherEntry.COLUMN_WEATHER_ID)), 321);
+ validateCursor(weatherCursor, weatherTestValues);
weatherCursor.close();
dbHelper.close();
}
+
+ static ContentValues createWeatherValues(long locationRowId) {
+ ContentValues weatherValues = new ContentValues();
+ weatherValues.put(WeatherEntry.COLUMN_LOC_KEY, locationRowId);
+ weatherValues.put(WeatherEntry.COLUMN_DATETEXT, "20141205");
+ weatherValues.put(WeatherEntry.COLUMN_DEGREES, 1.1);
+ weatherValues.put(WeatherEntry.COLUMN_HUMIDITY, 1.2);
+ weatherValues.put(WeatherEntry.COLUMN_PRESSURE, 1.3);
+ weatherValues.put(WeatherEntry.COLUMN_MAX_TEMP, 75);
+ weatherValues.put(WeatherEntry.COLUMN_MIN_TEMP, 65);
+ weatherValues.put(WeatherEntry.COLUMN_SHORT_DESC, "Asteroids");
+ weatherValues.put(WeatherEntry.COLUMN_WIND_SPEED, 5.5);
+ weatherValues.put(WeatherEntry.COLUMN_WEATHER_ID, 321);
+
+ return weatherValues;
+ }
+
+ static ContentValues createNorthPoleLocationValues() {
+ // Create a new map of values, where column names are the keys
+ ContentValues testValues = new ContentValues();
+ testValues.put(LocationEntry.COLUMN_LOCATION_SETTING, "99705");
+ testValues.put(LocationEntry.COLUMN_CITY_NAME, "North Pole");
+ testValues.put(LocationEntry.COLUMN_COORD_LAT, 64.7488);
+ testValues.put(LocationEntry.COLUMN_COORD_LONG, -147.353);
+
+ return testValues;
+ }
+
+ static void validateCursor(Cursor valueCursor, ContentValues expectedValues) {
+
+ assertTrue(valueCursor.moveToFirst());
+
+ Set<Map.Entry<String, Object>> valueSet = expectedValues.valueSet();
+ for (Map.Entry<String, Object> entry : valueSet) {
+ String columnName = entry.getKey();
+ int idx = valueCursor.getColumnIndex(columnName);
+ assertFalse(idx == -1);
+ String expectedValue = entry.getValue().toString();
+ assertEquals(expectedValue, valueCursor.getString(idx));
+ }
+ valueCursor.close();
+ }
+
}