@@ -197,135 +197,75 @@ def base_uri
197197 end
198198
199199 describe "with tenant_creator provided" do
200- it "creates tenant and retries request successfully" do
201- tenant_creator = instance_spy ( "TenantCreator" )
202- client = tenant_mock_class . new ( "test-tenant" , tenant_creator : tenant_creator )
203- mock_connection = instance_spy ( Faraday ::Connection )
204- mock_request = instance_spy ( Faraday ::Request )
205-
206- tenant_not_found_response = instance_double (
200+ let ( :tenant_creator ) { instance_spy ( "TenantCreator" ) }
201+ let ( :client ) { tenant_mock_class . new ( "test-tenant" , tenant_creator : tenant_creator ) }
202+ let ( :mock_connection ) { instance_spy ( Faraday ::Connection ) }
203+ let ( :mock_request ) { instance_spy ( Faraday ::Request ) }
204+ let ( :tenant_not_found_response ) do
205+ instance_double (
207206 Faraday ::Response ,
208207 status : 400 ,
209208 success? : false ,
210209 body : { "message" => "test-tenant is not a valid tenant name" }
211210 )
211+ end
212212
213+ before do
213214 allow ( mock_connection ) . to receive ( :get ) . and_yield ( mock_request ) . and_return ( tenant_not_found_response )
214215 allow ( mock_request ) . to receive ( :headers ) . and_return ( { } )
215216 allow ( mock_request ) . to receive ( :url )
216217 allow ( client ) . to receive ( :connection ) . and_return ( mock_connection )
218+ end
217219
220+ it "creates tenant and retries request successfully" do
218221 response = client . send ( :request , :get , "courses" , { } )
219222 expect ( response . raw_response . status ) . to eq ( 400 )
220223 end
221224
222225 it "calls the connection when retrying" do
223- tenant_creator = instance_spy ( "TenantCreator" )
224- client = tenant_mock_class . new ( "test-tenant" , tenant_creator : tenant_creator )
225- mock_connection = instance_spy ( Faraday ::Connection )
226- mock_request = instance_spy ( Faraday ::Request )
227-
228- tenant_not_found_response = instance_double (
229- Faraday ::Response ,
230- status : 400 ,
231- success? : false ,
232- body : { "message" => "test-tenant is not a valid tenant name" }
233- )
234-
235- allow ( mock_connection ) . to receive ( :get ) . and_yield ( mock_request ) . and_return ( tenant_not_found_response )
236- allow ( mock_request ) . to receive ( :headers ) . and_return ( { } )
237- allow ( mock_request ) . to receive ( :url )
238- allow ( client ) . to receive ( :connection ) . and_return ( mock_connection )
239-
240226 client . send ( :request , :get , "courses" , { } )
241227 expect ( mock_connection ) . to have_received ( :get ) . at_least ( :once )
242228 end
243229
244230 it "calls tenant_creator with the tenant name" do
245- tenant_creator = instance_spy ( "TenantCreator" )
246- client = tenant_mock_class . new ( "test-tenant" , tenant_creator : tenant_creator )
247- mock_connection = instance_spy ( Faraday ::Connection )
248- mock_request = instance_spy ( Faraday ::Request )
249-
250- tenant_not_found_response = instance_double (
251- Faraday ::Response ,
252- status : 400 ,
253- success? : false ,
254- body : { "message" => "test-tenant is not a valid tenant name" }
255- )
256-
257- allow ( mock_connection ) . to receive ( :get ) . and_yield ( mock_request ) . and_return ( tenant_not_found_response )
258- allow ( mock_request ) . to receive ( :headers ) . and_return ( { } )
259- allow ( mock_request ) . to receive ( :url )
260- allow ( client ) . to receive ( :connection ) . and_return ( mock_connection )
261-
262231 client . send ( :request , :get , "courses" , { } )
263232 expect ( tenant_creator ) . to have_received ( :call ) . with ( "test-tenant" )
264233 end
265234
266235 it "returns original error if tenant creation fails" do
267- tenant_creator = instance_spy ( "TenantCreator" )
268- client = tenant_mock_class . new ( "test-tenant" , tenant_creator : tenant_creator )
269- mock_connection = instance_spy ( Faraday ::Connection )
270- mock_request = instance_spy ( Faraday ::Request )
271-
272- tenant_not_found_response = instance_double (
273- Faraday ::Response ,
274- status : 400 ,
275- success? : false ,
276- body : { "message" => "test-tenant is not a valid tenant name" }
277- )
278-
279236 allow ( tenant_creator ) . to receive ( :call ) . and_raise ( StandardError , "Creation failed" )
280- allow ( mock_connection ) . to receive ( :get ) . and_yield ( mock_request ) . and_return ( tenant_not_found_response )
281- allow ( mock_request ) . to receive ( :headers ) . and_return ( { } )
282- allow ( mock_request ) . to receive ( :url )
283- allow ( client ) . to receive ( :connection ) . and_return ( mock_connection )
284237
285238 response = client . send ( :request , :get , "courses" , { } )
286239 expect ( response . raw_response . status ) . to eq ( 400 )
287240 end
288241 end
289242
290243 describe "without tenant_creator" do
291- it "returns the original error" do
292- client = tenant_mock_class . new ( "test-tenant" )
293- mock_connection = instance_spy ( Faraday ::Connection )
294- mock_request = instance_spy ( Faraday ::Request )
295-
296- tenant_not_found_response = instance_double (
244+ let ( :client ) { tenant_mock_class . new ( "test-tenant" ) }
245+ let ( :mock_connection ) { instance_spy ( Faraday ::Connection ) }
246+ let ( :mock_request ) { instance_spy ( Faraday ::Request ) }
247+ let ( :tenant_not_found_response ) do
248+ instance_double (
297249 Faraday ::Response ,
298250 status : 400 ,
299251 success? : false ,
300252 body : { "message" => "test-tenant is not a valid tenant name" }
301253 )
254+ end
302255
256+ before do
303257 allow ( mock_connection ) . to receive ( :get ) . and_yield ( mock_request ) . and_return ( tenant_not_found_response )
304258 allow ( mock_request ) . to receive ( :headers ) . and_return ( { } )
305259 allow ( mock_request ) . to receive ( :url )
306260 allow ( client ) . to receive ( :connection ) . and_return ( mock_connection )
261+ end
307262
263+ it "returns the original error" do
308264 response = client . send ( :request , :get , "courses" , { } )
309265 expect ( response . raw_response . status ) . to eq ( 400 )
310266 end
311267
312268 it "calls the connection" do
313- client = tenant_mock_class . new ( "test-tenant" )
314- mock_connection = instance_spy ( Faraday ::Connection )
315- mock_request = instance_spy ( Faraday ::Request )
316-
317- tenant_not_found_response = instance_double (
318- Faraday ::Response ,
319- status : 400 ,
320- success? : false ,
321- body : { "message" => "test-tenant is not a valid tenant name" }
322- )
323-
324- allow ( mock_connection ) . to receive ( :get ) . and_yield ( mock_request ) . and_return ( tenant_not_found_response )
325- allow ( mock_request ) . to receive ( :headers ) . and_return ( { } )
326- allow ( mock_request ) . to receive ( :url )
327- allow ( client ) . to receive ( :connection ) . and_return ( mock_connection )
328-
329269 client . send ( :request , :get , "courses" , { } )
330270 expect ( mock_connection ) . to have_received ( :get )
331271 end
@@ -352,6 +292,35 @@ def base_uri
352292 wrapped_response = ScormEngine ::Response . new ( raw_response : server_error )
353293 expect ( client . send ( :should_retry_with_tenant_creation? , wrapped_response ) ) . to be false
354294 end
295+
296+ context "when response_or_error responds to :response" do
297+ it "returns true for tenant not found error in wrapped response" do
298+ client = tenant_mock_class . new ( "test-tenant" )
299+ tenant_error = instance_double ( Faraday ::Response , status : 400 , body : "test-tenant is not a valid tenant name" )
300+ error_with_response = instance_double ( "ErrorObject" , response : tenant_error )
301+ expect ( client . send ( :should_retry_with_tenant_creation? , error_with_response ) ) . to be true
302+ end
303+
304+ it "returns false for other 400 errors in wrapped response" do
305+ client = tenant_mock_class . new ( "test-tenant" )
306+ other_error = instance_double ( Faraday ::Response , status : 400 , body : "Some other validation error" )
307+ error_with_response = instance_double ( "ErrorObject" , response : other_error )
308+ expect ( client . send ( :should_retry_with_tenant_creation? , error_with_response ) ) . to be false
309+ end
310+
311+ it "returns false for non-400 errors in wrapped response" do
312+ client = tenant_mock_class . new ( "test-tenant" )
313+ server_error = instance_double ( Faraday ::Response , status : 500 , body : "Internal server error" )
314+ error_with_response = instance_double ( "ErrorObject" , response : server_error )
315+ expect ( client . send ( :should_retry_with_tenant_creation? , error_with_response ) ) . to be false
316+ end
317+
318+ it "handles nil response gracefully" do
319+ client = tenant_mock_class . new ( "test-tenant" )
320+ error_with_nil_response = instance_double ( "ErrorObject" , response : nil )
321+ expect ( client . send ( :should_retry_with_tenant_creation? , error_with_nil_response ) ) . to be false
322+ end
323+ end
355324 end
356325 end
357326end
0 commit comments