defmodule AttachmentNamesTest do
  use CouchTestCase

  @moduletag :attachments

  @good_doc """
   {
    "_id": "good_doc",
    "_attachments": {
      "Kолян.txt": {
        "content_type": "application/octet-stream",
        "data": "VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ="
      }
    }
  }
  """

  @bin_att_doc %{
    _id: "bin_doc",
    _attachments: %{
      footxt: %{
        content_type: "text/plain",
        data: "VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ="
      }
    }
  }

  @bin_data "JHAPDO*AU£PN ){(3u[d 93DQ9¡€])}    ææøo'∂ƒæ≤çæππ•¥∫¶®#†π¶®¥π€ª®˙π8np"

  @leading_underscores_att """
   {
    "_id": "bin_doc2",
    "_attachments": {
      "_foo.txt": {
        "content_type": "text/plain",
        "data": "VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ="
      }
    }
  }
  """

  @moduledoc """
  Test CouchDB attachment names
  This is a port of the attachment_names.js suite
  """

  @tag :with_db
  test "saves attachment names successfully", context do
    db_name = context[:db_name]
    filename = URI.encode("Kолян.txt", &URI.char_unreserved?(&1))
    resp = Couch.post("/#{db_name}", body: @good_doc)
    msg = "Should return 201-Created"
    assert resp.status_code == 201, msg

    resp = Couch.get("/#{db_name}/good_doc/#{filename}")
    assert resp.body == "This is a base64 encoded text"
    assert resp.headers["Content-Type"] == "application/octet-stream"
    assert resp.headers["Etag"] == ~s("aEI7pOYCRBLTRQvvqYrrJQ==")

    resp = Couch.post("/#{db_name}", body: @bin_att_doc)
    assert(resp.status_code == 201)

    # standalone docs
    resp =
      Couch.put(
        "/#{db_name}/bin_doc3/attachmenttxt",
        body: @bin_data,
        headers: ["Content-Type": "text/plain;charset=utf-8"]
      )

    assert(resp.status_code == 201)

    # bulk docs
    docs = %{
      docs: [@bin_att_doc]
    }

    resp =
      Couch.post(
        "/#{db_name}/_bulk_docs",
        body: docs
      )

    assert(resp.status_code == 201)

    resp =
      Couch.put(
        "/#{db_name}/bin_doc2",
        body: @leading_underscores_att
      )

    assert resp.status_code == 400

    assert resp.body["reason"] ==
             "Attachment name '_foo.txt' starts with prohibited character '_'"
  end
end
