Add version with abstract result
Use Deject to make things nicer
Add version with deject
Add surrogate and charge response for surrogate example
Use surrogate to assert the interface of our mocks