@@ -165,7 +165,88 @@ defmodule Supabase.FetcherTest do
165
165
end
166
166
end
167
167
168
- # VCR and "integration" tests
168
+ describe "get_query_param/3" do
169
+ setup ctx do
170
+ fetcher = ctx . client |> Fetcher . new ( ) |> Fetcher . with_query ( % { "key1" => "value1" , "key2" => "value2" } )
171
+ { :ok , Map . put ( ctx , :fetcher , fetcher ) }
172
+ end
173
+
174
+ test "retrieves an existing query parameter" , % { fetcher: fetcher } do
175
+ assert Fetcher . get_query_param ( fetcher , "key1" ) == "value1"
176
+ end
177
+
178
+ test "returns nil for a missing query parameter" , % { fetcher: fetcher } do
179
+ assert Fetcher . get_query_param ( fetcher , "key3" ) == nil
180
+ end
181
+
182
+ test "returns the default value for a missing query parameter" , % { fetcher: fetcher } do
183
+ assert Fetcher . get_query_param ( fetcher , "key3" , "default_value" ) == "default_value"
184
+ end
185
+
186
+ test "handles empty query parameters gracefully" , % { client: client } do
187
+ fetcher = Fetcher . new ( client )
188
+ assert Fetcher . get_query_param ( fetcher , "key" ) == nil
189
+ end
190
+ end
191
+
192
+ describe "get_req_header/3" do
193
+ setup ctx do
194
+ fetcher =
195
+ Fetcher . new ( ctx . client )
196
+ |> Fetcher . with_headers ( % {
197
+ "Authorization" => "Bearer token" ,
198
+ "Content-Type" => "application/json"
199
+ } )
200
+
201
+ { :ok , fetcher: fetcher }
202
+ end
203
+
204
+ test "retrieves an existing header" , % { fetcher: fetcher } do
205
+ assert Fetcher . get_req_header ( fetcher , "Authorization" ) == "Bearer token"
206
+ end
207
+
208
+ test "returns nil for a missing header" , % { fetcher: fetcher } do
209
+ assert Fetcher . get_req_header ( fetcher , "Accept" ) == nil
210
+ end
211
+
212
+ test "returns the default value for a missing header" , % { fetcher: fetcher } do
213
+ assert Fetcher . get_req_header ( fetcher , "Accept" , "application/xml" ) == "application/xml"
214
+ end
215
+
216
+ test "handles empty headers gracefully" , % { client: client } do
217
+ fetcher = Fetcher . new ( client )
218
+ assert Fetcher . get_req_header ( fetcher , "Authorization" ) == nil
219
+ end
220
+ end
221
+
222
+ describe "merge_query_param/4" do
223
+ setup ctx do
224
+ fetcher = Fetcher . new ( ctx . client ) |> Fetcher . with_query ( % { "key1" => "value1" } )
225
+ { :ok , fetcher: fetcher }
226
+ end
227
+
228
+ test "merges a new query parameter when key does not exist" , % { fetcher: fetcher } do
229
+ updated_fetcher = Fetcher . merge_query_param ( fetcher , "key2" , "value2" )
230
+ assert Fetcher . get_query_param ( updated_fetcher , "key2" ) == "value2"
231
+ end
232
+
233
+ test "merges with default separator when key exists" , % { fetcher: fetcher } do
234
+ updated_fetcher = Fetcher . merge_query_param ( fetcher , "key1" , "value2" )
235
+ assert Fetcher . get_query_param ( updated_fetcher , "key1" ) == "value1,value2"
236
+ end
237
+
238
+ test "merges with custom separator when specified" , % { fetcher: fetcher } do
239
+ updated_fetcher = Fetcher . merge_query_param ( fetcher , "key1" , "value2" , [ with: "|" ] )
240
+ assert Fetcher . get_query_param ( updated_fetcher , "key1" ) == "value1|value2"
241
+ end
242
+
243
+ test "handles merging into an empty query" , % { client: client } do
244
+ fetcher = Fetcher . new ( client )
245
+ updated_fetcher = Fetcher . merge_query_param ( fetcher , "key1" , "value1" )
246
+ assert Fetcher . get_query_param ( updated_fetcher , "key1" ) == "value1"
247
+ end
248
+ end
249
+
169
250
defp have_header? ( headers , name ) do
170
251
Enum . any? ( headers , fn { k , _ } ->
171
252
String . downcase ( k ) == String . downcase ( name )
0 commit comments