Skip to content

Error when path_prefix is set and Faraday::Adapter::Test::Stubs is used #18

@RenzoMinelli

Description

@RenzoMinelli

In saddle version 0.1.0 the faraday version was bumped to ~> 0.9.0. With this change the stubs changed behaviour.
Before 0.1.0:

stubs = Faraday::Adapter::Test::Stubs.new
default_client = Saddle::Client.create(:stubs => stubs, :path_prefix => 'api/v1') 
stubs.get('/api/v1') { [200, {}, 'party'] }
default_client.requester.get('') # Returned party

After 0.1.0

stubs = Faraday::Adapter::Test::Stubs.new
default_client = Saddle::Client.create(:stubs => stubs, :path_prefix => 'api/v1') 
stubs.get('/api/v1') { [200, {}, 'party'] }
default_client.requester.get('') 
# Returned error
# Faraday::Adapter::Test::Stubs::NotFound (no stubbed request for get http://localhost/api/v1/ )

It seems that when making a request to '' the path that is used is the path_prefix + '/'.
The stub with faraday version < 0.9.0 also added the '/' at the end, but this changed in 0.9.0, where they started using Faraday::Utils.normalize_path which ends up using URI.

Is the '/' expected to be added at the end of the path or is this a bug? If it's the expected way just changing the stub to

stubs.get('/api/v1/') { [200, {}, 'party'] }

fixes the issue.

As a side note, after 0.1.0 when making a request with something rather than blank it always adds the '/'. For example:

stubs = Faraday::Adapter::Test::Stubs.new
default_client = Saddle::Client.create(:stubs => stubs, :path_prefix => 'api/v1')

stubs.get('/api/v1') { [200, {}, 'party'] }
default_client.requester.get('?a=1') # Faraday::Adapter::Test::Stubs::NotFound (no stubbed request for get http://localhost/api/v1/?a=2 )

stubs.get('/api/v1/test') { [200, {}, 'party'] }
default_client.requester.get('test') # Returns "party"
default_client.requester.get('/test') # Returns "party"

Before it has some strange behaviour:

stubs = Faraday::Adapter::Test::Stubs.new
default_client = Saddle::Client.create(:stubs => stubs, :path_prefix => 'api/v1')

stubs.get('/api/v1') { [200, {}, 'party'] }
default_client.requester.get('?a=1') # Returns "party"

stubs.get('/api/v1/test') { [200, {}, 'party'] }
default_client.requester.get('test') # Faraday::Adapter::Test::Stubs::NotFound (no stubbed request for get /api/v1/api/v1/test )
default_client.requester.get('/test') # Returns "party"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions