Updated Gradle config for Android Studio 1.0
[Sunshine.git] / app / src / androidTest / java / uk / me / njae / sunshine / TestDb.java
index d47e534f35afa729b8942693864007a6fd41ddca..86663d3122a4b00bb6c1989a28b9043c0261bf03 100644 (file)
@@ -6,6 +6,9 @@ import android.database.sqlite.SQLiteDatabase;
 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;
@@ -14,6 +17,9 @@ public class TestDb extends AndroidTestCase {
 
     public static final String LOG_TAG = TestDb.class.getSimpleName();
 
+    static final String TEST_LOCATION = "99705";
+    static final String TEST_DATE = "20141205";
+
     public void testCreateDb() throws Throwable {
         mContext.deleteDatabase(WeatherDbHelper.DATABASE_NAME);
         SQLiteDatabase db = new WeatherDbHelper(
@@ -24,26 +30,16 @@ public class TestDb extends AndroidTestCase {
 
     public void testInsertReadDb() {
 
-        // Test data we're going to insert into the DB to see if it works.
-        String testLocationSetting = "99705";
-        String testCityName = "North Pole";
-        double testLatitude = 64.7488;
-        double testLongitude = -147.353;
-
         // If there's an error in those massive SQL table creation Strings,
         // errors will be thrown here when you try to get a writable database.
         WeatherDbHelper dbHelper = new WeatherDbHelper(mContext);
         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);
@@ -52,19 +48,10 @@ public class TestDb extends AndroidTestCase {
         // 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
@@ -72,49 +59,13 @@ public class TestDb extends AndroidTestCase {
                 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.
@@ -128,32 +79,52 @@ public class TestDb extends AndroidTestCase {
                 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();
+    }
+
 }