Skip to content

Commit

Permalink
refactor tests for update function (Request.update)
Browse files Browse the repository at this point in the history
  • Loading branch information
boonious committed Oct 5, 2018
1 parent 4c0b74d commit 163fff9
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 57 deletions.
6 changes: 3 additions & 3 deletions test/test_helper.exs
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,14 @@ defmodule TestHelpers do
end

# for update tests
def check_post_data_bypass_setup(bypass, expected_data) do
def check_post_data_bypass_setup(bypass, expected_data, content_type \\ "application/json", resp \\ "") do
Bypass.expect bypass, fn conn ->
assert String.match?(conn.request_path, ~r/\/update/)
assert "POST" == conn.method
assert conn.req_headers |> Enum.member?({"content-type", "application/json"})
assert conn.req_headers |> Enum.member?({"content-type", content_type})
{:ok, body, conn} = Plug.Conn.read_body(conn)
assert body == expected_data
Plug.Conn.resp(conn, 200, "")
Plug.Conn.resp(conn, 200, resp)
end
end

Expand Down
69 changes: 15 additions & 54 deletions test/update_test.exs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
defmodule HuiUpdateTest do
use ExUnit.Case, async: true
import TestHelpers

# testing with Bypass
setup do
Expand All @@ -13,40 +14,24 @@ defmodule HuiUpdateTest do
describe "Request.update" do

test "should post binary data", context do
Bypass.expect context.bypass, fn conn ->
assert "/update" == conn.request_path
assert "POST" == conn.method
{:ok, body, conn} = Plug.Conn.read_body(conn)
assert body == context.update_doc
Plug.Conn.resp(conn, 200, "")
end

check_post_data_bypass_setup(context.bypass, context.update_doc)
url = %Hui.URL{url: "http://localhost:#{context.bypass.port}", handler: "update", headers: [{"Content-type", "application/json"}]}
Hui.Request.update(url, context.update_doc)
end

test "should work with a configured URL key" do
update_doc = File.read!("./test/data/update_doc2.xml")
bypass = Bypass.open(port: 8989)
Bypass.expect bypass, fn conn ->
assert "/solr/articles/update" == conn.request_path
assert "POST" == conn.method
assert conn.req_headers |> Enum.member?({"content-type", "application/xml"})
{:ok, body, conn} = Plug.Conn.read_body(conn)
assert body == update_doc
Plug.Conn.resp(conn, 200, "")
end

check_post_data_bypass_setup(bypass, update_doc, "application/xml")
Hui.Request.update(:update_test, update_doc)
end

test "should handle missing or malformed URL", context do
update_doc = File.read!("./test/data/update_doc2.xml")
assert {:error, context.error_einval} == Hui.Request.update(nil, update_doc)
assert {:error, context.error_einval} == Hui.Request.update("", update_doc)
assert {:error, context.error_einval} == Hui.Request.update([], update_doc)
assert {:error, context.error_nxdomain} == Hui.Request.update(:not_in_config_url, update_doc)
assert {:error, context.error_nxdomain} == Hui.Request.update(%Hui.URL{url: "boo"}, update_doc)
assert {:error, context.error_einval} == Hui.Request.update(nil, context.update_doc)
assert {:error, context.error_einval} == Hui.Request.update("", context.update_doc)
assert {:error, context.error_einval} == Hui.Request.update([], context.update_doc)
assert {:error, context.error_nxdomain} == Hui.Request.update(:not_in_config_url, context.update_doc)
assert {:error, context.error_nxdomain} == Hui.Request.update(%Hui.URL{url: "boo"}, context.update_doc)
end

end
Expand All @@ -55,44 +40,20 @@ defmodule HuiUpdateTest do

test "should post binary data", context do
update_resp = File.read!("./test/data/update_resp1.json")
Bypass.expect context.bypass, fn conn ->
assert "/update" == conn.request_path
assert "POST" == conn.method
{:ok, body, conn} = Plug.Conn.read_body(conn)
assert body == context.update_doc
Plug.Conn.resp(conn, 200, update_resp)
end

url = %Hui.URL{url: "http://localhost:#{context.bypass.port}", handler: "update"}
check_post_data_bypass_setup(context.bypass, context.update_doc, "application/json", update_resp)
url = %Hui.URL{url: "http://localhost:#{context.bypass.port}", handler: "update", headers: [{"Content-type", "application/json"}]}

bang = true
resp = Hui.Request.update(url, bang, context.update_doc)
assert resp.body == update_resp |> Poison.decode!
end

test "should work with a configured URL key" do
update_doc = File.read!("./test/data/update_doc2.xml")
bypass = Bypass.open(port: 8989)
Bypass.expect bypass, fn conn ->
assert "/solr/articles/update" == conn.request_path
assert "POST" == conn.method
assert conn.req_headers |> Enum.member?({"content-type", "application/xml"})
{:ok, body, conn} = Plug.Conn.read_body(conn)
assert body == update_doc
Plug.Conn.resp(conn, 200, "")
end

bang = true
Hui.Request.update(:update_test, bang, update_doc)
end

test "should handle missing or malformed URL" do
update_doc = File.read!("./test/data/update_doc2.xml")
test "should handle missing or malformed URL", context do
bang = true
assert_raise Hui.Error, ":einval", fn -> Hui.Request.update(nil, bang, update_doc) end
assert_raise Hui.Error, ":einval", fn -> Hui.Request.update("", bang, update_doc) end
assert_raise Hui.Error, ":einval", fn -> Hui.Request.update([], bang, update_doc) end
assert_raise Hui.Error, ":nxdomain", fn -> Hui.Request.update(:url_in_config, bang, update_doc) end
assert_raise Hui.Error, ":einval", fn -> Hui.Request.update(nil, bang, context.update_doc) end
assert_raise Hui.Error, ":einval", fn -> Hui.Request.update("", bang, context.update_doc) end
assert_raise Hui.Error, ":einval", fn -> Hui.Request.update([], bang, context.update_doc) end
assert_raise Hui.Error, ":nxdomain", fn -> Hui.Request.update(:url_in_config, bang, context.update_doc) end
end

end
Expand Down

0 comments on commit 163fff9

Please sign in to comment.