Skip to content

Commit b93e803

Browse files
committed
update tests and functions
1 parent acb8976 commit b93e803

File tree

8 files changed

+57
-47
lines changed

8 files changed

+57
-47
lines changed

lib/voodoo.ex

+13-9
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ defmodule Voodoo do
55
66
## Configuration
77
"""
8-
use HTTPoison.Base
8+
9+
alias Voodoo.Util
910

1011
defmodule MissingSecretKeyError do
1112
defexception message: """
@@ -62,18 +63,17 @@ defmodule Voodoo do
6263
Process request body and convert to escaped json string
6364
Accepts a map
6465
"""
65-
def process_request_body(body) do
66+
def process_request_body(body) when is_map(body) do
6667
Poison.encode! body
6768
end
69+
def process_request_body(body), do: body
6870

6971
@doc """
7072
Set request headers and format
7173
"""
72-
def process_request_headers(_) do
73-
Map.new
74-
|> Map.put("key", Voodoo.secret_key)
75-
|> Map.put("content-type", "application/json")
76-
|> Map.to_list
74+
def request_headers do
75+
[{"content-type", "application/json"},
76+
{"key", Voodoo.secret_key}]
7777
end
7878

7979
@doc """
@@ -86,7 +86,11 @@ defmodule Voodoo do
8686
* body - request body
8787
* options - request options
8888
"""
89-
def make_request(method, url, body \\ %{}, options \\ []) do
90-
{:ok, _response} = request(method, url, body, [], options)
89+
def make_request(method, path, body \\ "", options \\ []) do
90+
url = process_url(path)
91+
body = process_request_body(body)
92+
93+
HTTPoison.request(method, url, body, request_headers, options)
94+
|> Util.handle_voodoo_response
9195
end
9296
end

lib/voodoo/material.ex

-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,5 @@ defmodule Voodoo.Material do
1616
"""
1717
def list do
1818
Voodoo.make_request(:get, @endpoint)
19-
|> Voodoo.Util.handle_voodoo_response
2019
end
2120
end

lib/voodoo/model.ex

+3-6
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ defmodule Voodoo.Model do
2424
body = params
2525

2626
Voodoo.make_request(:post, @endpoint, body, opts)
27-
|> Util.handle_voodoo_response
2827
end
2928

3029
@doc """
@@ -39,18 +38,17 @@ defmodule Voodoo.Model do
3938
4039
## Examples
4140
42-
{:ok, result} = Voodoo.Model.quote(
43-
%{model_id: 1234,
41+
{:ok, result} = Voodoo.Model.get_quote(
42+
%{model_id: 4415,
4443
units: "cm",
4544
material_id: 7,
46-
qty: 1})
45+
quantity: 1})
4746
"""
4847
def get_quote(params) do
4948
url = @endpoint <> "/quote"
5049
opts = Util.prepare_params(params)
5150

5251
Voodoo.make_request(:get, url, "", opts)
53-
|> Util.handle_voodoo_response
5452
end
5553

5654
@doc """
@@ -85,6 +83,5 @@ defmodule Voodoo.Model do
8583
opts = Util.prepare_params(params)
8684

8785
Voodoo.make_request(:get, url , "", opts)
88-
|> Util.handle_voodoo_response
8986
end
9087
end

lib/voodoo/order.ex

+2-6
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ defmodule Voodoo.Order do
2626
opts = Util.prepare_params(params)
2727

2828
Voodoo.make_request(:get, url, %{}, opts)
29-
|> Util.handle_voodoo_response
3029
end
3130

3231
@doc """
@@ -40,7 +39,8 @@ defmodule Voodoo.Order do
4039
qty: 1,
4140
units: "mm"}
4241
],
43-
shipping_info: %{
42+
shipping_address: %{
43+
4444
city: "foo",
4545
name: "bar",
4646
zip: "12345",
@@ -58,7 +58,6 @@ defmodule Voodoo.Order do
5858
body = params
5959

6060
Voodoo.make_request(:post, url, body)
61-
|> Util.handle_voodoo_response
6261
end
6362

6463
@doc """
@@ -82,7 +81,6 @@ defmodule Voodoo.Order do
8281
body = params
8382

8483
Voodoo.make_request(:post, url, body)
85-
|> Util.handle_voodoo_response
8684
end
8785

8886
@doc """
@@ -99,7 +97,5 @@ defmodule Voodoo.Order do
9997
body = params
10098

10199
Voodoo.make_request(:post, url, body)
102-
|> Util.handle_voodoo_response
103100
end
104-
105101
end

lib/voodoo/util.ex

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ defmodule Voodoo.Util do
1717
else
1818
{:ok, body}
1919
end
20+
resp -> resp
2021
end
2122
end
2223

test/voodoo/model_test.exs

+20-6
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,22 @@ defmodule Voodoo.ModelTest do
1010
use_cassette "get model id" do
1111
params = %{file_url: "https://s3-us-west-2.amazonaws.com/sightline-maps-static-assets/demo.stl"}
1212
{:ok, resp} = id(params)
13-
assert resp == %{
13+
assert %{
1414
"file_bucket" => "repaired-models",
15-
"file_key" => "6f15faa7/aeb6/4fa9/ae99/5e92949e58ec/demo.stl",
16-
"file_uri" => "repaired-models", "id" => 1907, "notes" => nil,
17-
"surface_area" => 200797.360817945, "volume" => 930583.831250032,
18-
"x" => 299, "y" => 289, "z" => 38.2941093444824}
15+
"file_key" => _,
16+
"file_uri" => "repaired-models",
17+
"id" => _id,
18+
"notes" => nil,
19+
"rendering_url" => nil,
20+
"surface_area" => 200797.360817945,
21+
"volume" => 930583.831250032,
22+
"x" => 299,
23+
"y" => 289,
24+
"z" => 38.2941093444824} = resp
1925
end
2026
end
2127

28+
@tag skip: "API server needs to accept POST requests or query parameters for GET"
2229
test "get the quote for a model" do
2330
use_cassette "get the quote for a model" do
2431
params = %{model_id: 1905,
@@ -43,7 +50,14 @@ defmodule Voodoo.ModelTest do
4350
units: "cm",
4451
quantity: 1}
4552
{:ok, resp} = quote_with_attributes(params)
46-
assert resp == %{}
53+
assert resp == %{
54+
"material_id" => 7,
55+
"quantity" => 1,
56+
"quote" => 34,
57+
"total" => 34,
58+
"unit_cost" => 34,
59+
"units" => "cm"
60+
}
4761
end
4862
end
4963
end

test/voodoo/order_test.exs

+6-5
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ defmodule Voodoo.OrderTest do
2121
use_cassette "create shipment for uploaded items" do
2222
params = %{models: [%{
2323
material_id: 7,
24-
model_id: 1696,
25-
qty: 1,
26-
units: "mm"}],
27-
shipping_info: %{
24+
model_id: 4414,
25+
quantity: 1,
26+
units: "cm"}],
27+
shipping_address: %{
28+
2829
city: "foo",
2930
name: "bar",
3031
zip: "12345",
@@ -43,7 +44,7 @@ defmodule Voodoo.OrderTest do
4344
params = %{models: [
4445
%{material_id: 1,
4546
model_id: 1905,
46-
qty: 1,
47+
quantity: 1,
4748
units: "mm"}],
4849
shipment_id: "rate_0b011e90eb824e8ab72cbae2e4b7dda9"}
4950
{:ok, resp} = create(params)

test/voodoo_test.exs

+12-14
Original file line numberDiff line numberDiff line change
@@ -8,53 +8,51 @@ defmodule VoodooTest do
88
@secret_key "secret_key"
99
@api_host "http://foo.com"
1010

11-
setup do
12-
Application.put_env(:voodoo_mfg, :secret_key, @secret_key)
13-
Application.put_env(:voodoo_mfg, :api_host, @api_host)
14-
:ok
15-
end
16-
1711
describe "secret_key/0" do
1812

1913
test "fails when config for key is not set" do
14+
old_secret_key = Application.get_env(:voodoo_mfg, :secret_key)
2015
Application.delete_env(:voodoo_mfg, :secret_key)
2116
assert_raise MissingSecretKeyError, fn ->
2217
secret_key
2318
end
19+
Application.put_env(:voodoo_mfg, :secret_key, old_secret_key)
2420
end
2521

2622
test "returns key when it is set in config" do
23+
old_secret_key = Application.get_env(:voodoo_mfg, :secret_key)
24+
Application.put_env(:voodoo_mfg, :secret_key, @secret_key)
2725
assert secret_key == @secret_key
26+
Application.put_env(:voodoo_mfg, :secret_key, old_secret_key)
2827
end
2928
end
3029

3130
describe "api_host/0" do
3231

3332
test "fails when config for key is not set" do
33+
old_host = Application.get_env(:voodoo_mfg, :api_host)
3434
Application.delete_env(:voodoo_mfg, :api_host)
3535
assert_raise MissingSecretKeyError, fn ->
3636
api_host
3737
end
38+
Application.put_env(:voodoo_mfg, :api_host, old_host)
3839
end
3940

4041
test "returns key when it is set in config" do
42+
old_host = Application.get_env(:voodoo_mfg, :api_host)
43+
Application.put_env(:voodoo_mfg, :api_host, @api_host)
4144
assert api_host == @api_host
45+
Application.put_env(:voodoo_mfg, :api_host, old_host)
4246
end
4347
end
4448

4549
test "process_url/1 attaches base url to endpoint" do
46-
assert process_url("/api") == "http://foo.com/api"
47-
assert process_url("api") == "http://foo.com/api"
50+
assert process_url("/test") == "https://staging-api.voodoomfg.com/api/1/test"
51+
assert process_url("test") == "https://staging-api.voodoomfg.com/api/1/test"
4852
end
4953

5054
test "process_request_body/1 returns json" do
5155
body = %{foo: "bar"}
5256
assert Poison.encode!(body) == process_request_body(body)
5357
end
54-
55-
test "process_request_headers/1 sets key and content-type headers" do
56-
headers = process_request_headers("")
57-
assert {"key", @secret_key} in headers
58-
assert {"content-type", "application/json"} in headers
59-
end
6058
end

0 commit comments

Comments
 (0)