Skip to content

Commit 0bcf784

Browse files
committed
test: cover create/n in tests
1 parent 09d25ca commit 0bcf784

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed

test/aws/client_test.exs

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,5 +122,140 @@ defmodule AWS.ClientTest do
122122
end
123123
end
124124

125+
describe "create/n" do
126+
setup :prune_envs
127+
128+
test "create/0 reads region from AWS_DEFAULT_REGION and builds client" do
129+
System.put_env("AWS_ACCESS_KEY_ID", "AK")
130+
System.put_env("AWS_SECRET_ACCESS_KEY", "SK")
131+
System.put_env("AWS_DEFAULT_REGION", "us-east-1")
132+
133+
client = AWS.Client.create()
134+
135+
assert %AWS.Client{
136+
access_key_id: "AK",
137+
secret_access_key: "SK",
138+
session_token: nil,
139+
region: "us-east-1",
140+
endpoint: nil
141+
} == client
142+
end
143+
144+
test "create/0 raises when AWS_DEFAULT_REGION missing" do
145+
System.put_env("AWS_ACCESS_KEY_ID", "AK")
146+
System.put_env("AWS_SECRET_ACCESS_KEY", "SK")
147+
148+
assert_raise RuntimeError, "missing default region", fn ->
149+
AWS.Client.create()
150+
end
151+
end
152+
153+
test "create/1 reads credentials, token and endpoint from env" do
154+
System.put_env("AWS_ACCESS_KEY_ID", "AK")
155+
System.put_env("AWS_SECRET_ACCESS_KEY", "SK")
156+
System.put_env("AWS_SESSION_TOKEN", "TOK")
157+
System.put_env("AWS_ENDPOINT", "example.com")
158+
159+
client = AWS.Client.create("us-west-2")
160+
161+
assert %AWS.Client{
162+
access_key_id: "AK",
163+
secret_access_key: "SK",
164+
session_token: "TOK",
165+
region: "us-west-2",
166+
endpoint: "example.com"
167+
} == client
168+
end
169+
170+
test "create/1 without token uses nil and endpoint from env" do
171+
System.put_env("AWS_ACCESS_KEY_ID", "AK")
172+
System.put_env("AWS_SECRET_ACCESS_KEY", "SK")
173+
System.put_env("AWS_ENDPOINT", "example.com")
174+
175+
client = AWS.Client.create("eu-west-1")
176+
177+
assert %AWS.Client{
178+
access_key_id: "AK",
179+
secret_access_key: "SK",
180+
session_token: nil,
181+
region: "eu-west-1",
182+
endpoint: "example.com"
183+
} == client
184+
end
185+
186+
test "create/1 raises when access key is missing" do
187+
System.put_env("AWS_SECRET_ACCESS_KEY", "SK")
188+
189+
assert_raise RuntimeError, "missing access key id", fn ->
190+
AWS.Client.create("us-east-2")
191+
end
192+
end
193+
194+
test "create/1 raises when secret access key is missing" do
195+
System.put_env("AWS_ACCESS_KEY_ID", "AK")
196+
197+
assert_raise RuntimeError, "missing secret access key", fn ->
198+
AWS.Client.create("us-east-2")
199+
end
200+
end
201+
202+
test "create/3 sets fields without token or endpoint" do
203+
client = AWS.Client.create("AK", "SK", "eu-north-1")
204+
205+
assert %AWS.Client{
206+
access_key_id: "AK",
207+
secret_access_key: "SK",
208+
session_token: nil,
209+
region: "eu-north-1",
210+
endpoint: nil
211+
} == client
212+
end
213+
214+
test "create/4 sets token and leaves endpoint nil" do
215+
client = AWS.Client.create("AK", "SK", "TOKEN", "ap-south-1")
216+
217+
assert %AWS.Client{
218+
access_key_id: "AK",
219+
secret_access_key: "SK",
220+
session_token: "TOKEN",
221+
region: "ap-south-1",
222+
endpoint: nil
223+
} == client
224+
end
225+
226+
test "create/5 sets token and endpoint" do
227+
client = AWS.Client.create("AK", "SK", "TOKEN", "sa-east-1", "custom.local")
228+
229+
assert %AWS.Client{
230+
access_key_id: "AK",
231+
secret_access_key: "SK",
232+
session_token: "TOKEN",
233+
region: "sa-east-1",
234+
endpoint: "custom.local"
235+
} == client
236+
end
237+
238+
test "create/3 equals create/5 with nil token and endpoint" do
239+
c3 = AWS.Client.create("AK", "SK", "us-east-1")
240+
c5 = AWS.Client.create("AK", "SK", nil, "us-east-1", nil)
241+
assert c3 == c5
242+
end
243+
end
244+
245+
defp prune_envs(_context) do
246+
keys =
247+
[
248+
"AWS_ACCESS_KEY_ID",
249+
"AWS_SECRET_ACCESS_KEY",
250+
"AWS_SESSION_TOKEN",
251+
"AWS_ENDPOINT",
252+
"AWS_DEFAULT_REGION"
253+
]
254+
255+
on_exit(fn -> Enum.each(keys, &System.delete_env/1) end)
256+
257+
:ok
258+
end
259+
125260
defp url(bypass), do: "http://localhost:#{bypass.port}/"
126261
end

0 commit comments

Comments
 (0)