Basic testing done
[Sunshine.git] / app / src / androidTest / java / uk / me / njae / sunshine / TestDb.java
diff --git a/app/src/androidTest/java/uk/me/njae/sunshine/TestDb.java b/app/src/androidTest/java/uk/me/njae/sunshine/TestDb.java
new file mode 100644 (file)
index 0000000..d47e534
--- /dev/null
@@ -0,0 +1,159 @@
+package uk.me.njae.sunshine;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.test.AndroidTestCase;
+import android.util.Log;
+
+import uk.me.njae.sunshine.data.WeatherContract.LocationEntry;
+import uk.me.njae.sunshine.data.WeatherContract.WeatherEntry;
+import uk.me.njae.sunshine.data.WeatherDbHelper;
+
+public class TestDb extends AndroidTestCase {
+
+    public static final String LOG_TAG = TestDb.class.getSimpleName();
+
+    public void testCreateDb() throws Throwable {
+        mContext.deleteDatabase(WeatherDbHelper.DATABASE_NAME);
+        SQLiteDatabase db = new WeatherDbHelper(
+                this.mContext).getWritableDatabase();
+        assertEquals(true, db.isOpen());
+        db.close();
+    }
+
+    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);
+
+        long locationRowId;
+        locationRowId = db.insert(LocationEntry.TABLE_NAME, null, values);
+
+        // Verify we got a row back.
+        assertTrue(locationRowId != -1);
+        Log.d(LOG_TAG, "New row id: " + locationRowId);
+
+        // 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, // Columns for the "where" clause
+                null, // Values for the "where" clause
+                null, // columns to group by
+                null, // columns to filter by row groups
+                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 :(");
+        }
+
+        // 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);
+        assertTrue(weatherRowId != -1);
+
+        // A cursor is your primary interface to the query results.
+        Cursor weatherCursor = db.query(
+                WeatherEntry.TABLE_NAME,  // Table to Query
+                null, // leaving "columns" null just returns all the columns.
+                null, // cols for "where" clause
+                null, // values for "where" clause
+                null, // columns to group by
+                null, // columns to filter by row groups
+                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);
+
+        weatherCursor.close();
+        dbHelper.close();
+    }
+}