@@ -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 } /"
126261end
0 commit comments