-
Notifications
You must be signed in to change notification settings - Fork 55
/
mock.ex
94 lines (77 loc) · 1.82 KB
/
mock.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
defmodule Shopify.Adapters.Mock do
@moduledoc false
@behaviour Shopify.Adapters.Base
alias Shopify.{
Request,
Response,
Config,
Adapters.MockUtils
}
def get(%Shopify.Request{query_params: query_params} = request) when not is_nil(query_params) do
request
|> authorize
|> respond
|> MockUtils.filter_resources(request)
end
def get(request) do
request
|> authorize
|> respond
end
def post(request) do
request
|> authorize
|> respond
end
def put(request) do
request
|> authorize
|> respond
end
def delete(request) do
auth = request |> authorize
case auth do
{:passed, _} -> Response.new(200, nil, request.resource)
{:failed, _} -> respond(auth)
end
end
def respond({:failed, request}) do
Response.new(401, nil, request.resource)
end
def respond({:passed, request}) do
request
|> load_resource
|> respond(request)
end
def respond({:ok, body}, request) do
Response.new(200, body, request.resource)
end
def respond({:error, _}, request) do
Response.new(404, nil, request.resource)
end
def load_resource(%Request{path: path, body: nil}) do
(Config.fixtures_path() <> "/" <> path)
|> File.read()
end
def load_resource(%Request{body: body}) do
case Poison.decode(body) do
{:ok, resource} -> resource |> MockUtils.put_id() |> Poison.encode()
{:error, _} -> {:error, nil}
end
end
def authorize(request) do
if request.headers[:"X-Shopify-Access-Token"] do
request |> oauth_auth
else
request |> basic_auth
end
end
def basic_auth(request) do
case URI.parse(request.full_url) do
%URI{userinfo: "test:test"} -> {:passed, request}
%URI{userinfo: _} -> {:failed, request}
end
end
def oauth_auth(_) do
end
end