StreamItems CONTENT_DIRECTORY Insert Test

Bug 5810254

Test inserting via content directory uri for a contact.
http://developer.android.com/reference/android/provider/ContactsContract.StreamItems.html

Change-Id: I4e397841147d0c1cdd25cf8425edd4951ead36c5
diff --git a/tests/tests/provider/src/android/provider/cts/ContactsContract_StreamItemsTest.java b/tests/tests/provider/src/android/provider/cts/ContactsContract_StreamItemsTest.java
index b4a8fcb..c1068e9a 100644
--- a/tests/tests/provider/src/android/provider/cts/ContactsContract_StreamItemsTest.java
+++ b/tests/tests/provider/src/android/provider/cts/ContactsContract_StreamItemsTest.java
@@ -20,6 +20,7 @@
 import android.content.ContentProviderResult;
 import android.content.ContentResolver;
 import android.content.ContentUris;
+import android.content.ContentValues;
 import android.database.Cursor;
 import android.net.Uri;
 import android.provider.ContactsContract;
@@ -32,6 +33,13 @@
 
 public class ContactsContract_StreamItemsTest extends AndroidTestCase {
 
+    private static final String ACCOUNT_TYPE = "com.android.cts";
+    private static final String ACCOUNT_NAME = "ContactsContract_StreamItemsTest";
+
+    private static final String STREAM_TEXT = "Wrote a test for the StreamItems class";
+    private static final long STREAM_TIMESTAMP = 3007;
+    private static final String STREAM_COMMENTS = "1337 people reshared this";
+
     private ContentResolver mResolver;
 
     @Override
@@ -40,29 +48,58 @@
         mResolver = mContext.getContentResolver();
     }
 
+    public void testInsert_byContentDirectory() throws Exception {
+        // Create a contact to attach the stream item to it.
+        ContentValues values = new ContentValues();
+        values.put(RawContacts.ACCOUNT_TYPE, ACCOUNT_TYPE);
+        values.put(RawContacts.ACCOUNT_NAME, ACCOUNT_NAME);
+
+        Uri contactUri = mResolver.insert(RawContacts.CONTENT_URI, values);
+        long rawContactId = ContentUris.parseId(contactUri);
+        assertTrue(rawContactId != -1);
+
+        // Attach a stream item to the contact.
+        values.clear();
+        values.put(RawContacts.ACCOUNT_TYPE, ACCOUNT_TYPE);
+        values.put(RawContacts.ACCOUNT_NAME, ACCOUNT_NAME);
+        values.put(StreamItems.TEXT, STREAM_TEXT);
+        values.put(StreamItems.TIMESTAMP, STREAM_TIMESTAMP);
+        values.put(StreamItems.COMMENTS, STREAM_COMMENTS);
+
+        Uri contactStreamUri = Uri.withAppendedPath(
+                ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId),
+                RawContacts.StreamItems.CONTENT_DIRECTORY);
+        Uri streamItemUri = mResolver.insert(contactStreamUri, values);
+        long streamItemId = ContentUris.parseId(streamItemUri);
+        assertTrue(streamItemId != -1);
+
+        // Check that the provider returns the stream id in it's URI.
+        assertEquals(streamItemUri,
+                ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId).buildUpon()
+                        .appendPath(RawContacts.StreamItems.CONTENT_DIRECTORY)
+                        .appendPath(Long.toString(streamItemId))
+                        .build());
+
+        // Check that the provider stored what we put into it.
+        assertStreamItem(streamItemUri);
+    }
+
     public void testInsert_byContentUri() throws Exception {
-        String accountType = "com.android.cts";
-        String accountName = "ContactsContract_StreamItemsTest";
-
-        String text = "Wrote a test for the StreamItems class";
-        long timestamp = System.currentTimeMillis();
-        String comments = "1337 people reshared this";
-
         // Create a contact with one stream item in it.
         ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
 
         ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
-                .withValue(RawContacts.ACCOUNT_TYPE, accountType)
-                .withValue(RawContacts.ACCOUNT_NAME, accountName)
+                .withValue(RawContacts.ACCOUNT_TYPE, ACCOUNT_TYPE)
+                .withValue(RawContacts.ACCOUNT_NAME, ACCOUNT_NAME)
                 .build());
 
         ops.add(ContentProviderOperation.newInsert(StreamItems.CONTENT_URI)
                 .withValueBackReference(Data.RAW_CONTACT_ID, 0)
-                .withValue(RawContacts.ACCOUNT_TYPE, accountType)
-                .withValue(RawContacts.ACCOUNT_NAME, accountName)
-                .withValue(StreamItems.TEXT, text)
-                .withValue(StreamItems.TIMESTAMP, timestamp)
-                .withValue(StreamItems.COMMENTS, comments)
+                .withValue(RawContacts.ACCOUNT_TYPE, ACCOUNT_TYPE)
+                .withValue(RawContacts.ACCOUNT_NAME, ACCOUNT_NAME)
+                .withValue(StreamItems.TEXT, STREAM_TEXT)
+                .withValue(StreamItems.TIMESTAMP, STREAM_TIMESTAMP)
+                .withValue(StreamItems.COMMENTS, STREAM_COMMENTS)
                 .build());
 
         ContentProviderResult[] results = mResolver.applyBatch(ContactsContract.AUTHORITY, ops);
@@ -78,12 +115,19 @@
                 ContentUris.withAppendedId(StreamItems.CONTENT_URI, streamItemId));
 
         // Check that the provider stored what we put into it.
-        Cursor cursor = mResolver.query(streamItemUri, null, null, null, null);
+        assertStreamItem(streamItemUri);
+    }
+
+    private void assertStreamItem(Uri itemUri) {
+        Cursor cursor = mResolver.query(itemUri, null, null, null, null);
         try {
             assertTrue(cursor.moveToFirst());
-            assertEquals(text, cursor.getString(cursor.getColumnIndex(StreamItems.TEXT)));
-            assertEquals(timestamp, cursor.getLong(cursor.getColumnIndex(StreamItems.TIMESTAMP)));
-            assertEquals(comments, cursor.getString(cursor.getColumnIndex(StreamItems.COMMENTS)));
+            assertEquals(STREAM_TEXT, cursor.getString(
+                    cursor.getColumnIndexOrThrow(StreamItems.TEXT)));
+            assertEquals(STREAM_TIMESTAMP, cursor.getLong(
+                    cursor.getColumnIndexOrThrow(StreamItems.TIMESTAMP)));
+            assertEquals(STREAM_COMMENTS, cursor.getString(
+                    cursor.getColumnIndexOrThrow(StreamItems.COMMENTS)));
         } finally {
             cursor.close();
         }