We have a requirement to talk to a third party payment provider via an http
API
While I am happy with the testing of this implementation and mocking these
calls where necessary, I am looking for a good way to do this in the
development environment.
The interactions with the provider have significant implications for the UI
that its unfeasible to test in an automated fashion.
I don't want to use VCR or mock the web requests, as this is too low level
and the exact implementation has not been finalised. This doesn't mean the
UI can't be tweaked and tested though, and it would be good to have an
implementation that can be changed to emit the desired response by for
example, changing a flag.
Here's where I am:
I have a class that proxies calls from the app to the API, and in testing
its trivial to mock the calls to Acme.new
class Acme
def pay_money(amount)
AcmeAPI::PayMoneyRequest.new({
type: "Ca$h",
subscriber: @subscriber
amount: amount
})
end
end
class FakeAcme
def pay_money(amount)
canned_result = { invoice_number: "12345" }
end
end
Assuming my app uses the Acme class as such:
class PurchaseProduct
def buy_it_now
acme = Acme.new(subscriber)
result = acme.pay_money(product.price)
end
end
If I want to replace Acme with FakeAcme, what is the best way to do this?
In another programming (cough) life, I probably would have done something
like:
class PurchaseProduct(acme_provider)
def buy_it_now
acme = acme_provider.new(subscriber)
result = acme.pay_money
end
end
and then use some sort of DI library to specify the acme_provider at
runtime.
I could do something like in the rails initializer to hack it too:
if Rails.env.development?
Acme = FakeAcme
end
Any comments/ideas on this approach or examples of alternatives would be
great.
Thanks,
Steve
--
You received this message because you are subscribed to the Google Groups "Ruby
or Rails Oceania" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/rails-oceania/-/Vou8eHbj5SAJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rails-oceania?hl=en.