public void testDocWithAttachment() throws IOException {

    String inlineTextString = "Inline text string created by cblite functional test";

    send("PUT", "/db", Status.CREATED, null);

    Map<String, Object> attachment = new HashMap<String, Object>();
    attachment.put("content_type", "text/plain");
    attachment.put(
        "data", "SW5saW5lIHRleHQgc3RyaW5nIGNyZWF0ZWQgYnkgY2JsaXRlIGZ1bmN0aW9uYWwgdGVzdA==");

    Map<String, Object> attachments = new HashMap<String, Object>();
    attachments.put("inline.txt", attachment);

    Map<String, Object> docWithAttachment = new HashMap<String, Object>();
    docWithAttachment.put("_id", "docWithAttachment");
    docWithAttachment.put("text", inlineTextString);
    docWithAttachment.put("_attachments", attachments);

    Map<String, Object> result =
        (Map<String, Object>)
            sendBody("PUT", "/db/docWithAttachment", docWithAttachment, Status.CREATED, null);

    Map expChanges = new HashMap<String, Map<String, Object>>();
    List changesResults = new ArrayList();
    Map docChanges = new HashMap<String, Object>();
    docChanges.put("id", "docWithAttachment");
    docChanges.put("seq", 1);
    List lChanges = new ArrayList<Map<String, Object>>();
    HashMap mChanges = new HashMap<String, Object>();
    mChanges.put("rev", result.get("rev"));
    lChanges.add(mChanges);
    docChanges.put("changes", lChanges);
    changesResults.add(docChanges);
    expChanges.put("results", changesResults);
    expChanges.put("last_seq", 1);
    send("GET", "/db/_changes?feed=normal&heartbeat=300000&style=all_docs", Status.OK, expChanges);

    result = (Map<String, Object>) send("GET", "/db/docWithAttachment", Status.OK, null);
    Map<String, Object> attachmentsResult = (Map<String, Object>) result.get("_attachments");
    Map<String, Object> attachmentResult =
        (Map<String, Object>) attachmentsResult.get("inline.txt");

    // there should be either a content_type or content-type field.
    // https://github.com/couchbase/couchbase-lite-android-core/issues/12
    // content_type becomes null for attachments in responses, should be as set in Content-Type
    String contentTypeField = (String) attachmentResult.get("content_type");
    ;
    assertTrue(attachmentResult.containsKey("content_type"));
    assertNotNull(contentTypeField);

    URLConnection conn = sendRequest("GET", "/db/docWithAttachment/inline.txt", null, null);
    String contentType = conn.getHeaderField("Content-Type");
    assertNotNull(contentType);
    assertTrue(contentType.contains("text/plain"));

    StringWriter writer = new StringWriter();
    InputStream is = conn.getInputStream();
    IOUtils.copy(is, writer, "UTF-8");
    is.close();
    String responseString = writer.toString();
    assertTrue(responseString.contains(inlineTextString));
  }