     describe '.getSearchUri', ->
       it 'searches using args', ->
         state = { args: 'testing' }
-        sinon.stub @giphy.api, 'search'
+        @fakes.stub @giphy.api, 'search'
         @giphy.getSearchUri state
         @giphy.api.search.should.have.been.called.once
         @giphy.api.search.should.have.been.calledWith { q: 'testing' }, sinon.match.func
-        @giphy.api.search.restore()
 
       it 'searches using args and options', ->
         state = { args: 'testing', options: { limit: 10 } }
-        sinon.stub @giphy.api, 'search'
+        @fakes.stub @giphy.api, 'search'
         @giphy.getSearchUri state
         @giphy.api.search.should.have.been.called.once
         @giphy.api.search.should.have.been.calledWith { q: 'testing', limit: 10 }, sinon.match.func
-        @giphy.api.search.restore()
-
-      it 'handles the callback response', ->
+
+      it 'handles the response callback', ->
         state = { msg: 'msg', args: 'testing' }
-        sinon.stub @giphy.api, 'search', (options, callback) -> callback null, sampleCollectionResult
-        sinon.stub @giphy, 'sendResponse'
-        sinon.spy @giphy, 'getRandomResult'
+        @fakes.stub @giphy.api, 'search', (options, callback) -> callback 'error', sampleCollectionResult
+        @fakes.stub @giphy, 'handleResponse'
         @giphy.getSearchUri state
-        @giphy.sendResponse.should.have.been.called.once
-        @giphy.sendResponse.should.have.been.calledWith state
-        @giphy.getRandomResult.should.have.been.called.once
-        @giphy.getRandomResult.should.have.been.calledWith sampleCollectionResult.data, sinon.match.func
-        @giphy.api.search.restore()
-        @giphy.sendResponse.restore()
-        @giphy.getRandomResult.restore()
-        should.exist state.uri
-        state.uri.should.eql sampleUri
+        @giphy.handleResponse.should.have.been.called.once
+        @giphy.handleResponse.should.have.been.calledWith state, 'error', sinon.match.func
 
       it 'calls getRandomUri for empty args', ->
-        sinon.stub @giphy, 'getRandomUri'
+        @fakes.stub @giphy, 'getRandomUri'
         @giphy.getSearchUri {}
         @giphy.getSearchUri { args: null }
         @giphy.getSearchUri { args: '' }
         @giphy.getRandomUri.should.have.callCount 3
-        @giphy.getRandomUri.restore()
-
-      it 'handles errors in the callback', ->
-        state = { msg: 'msg', args: 'testing' }
-        sinon.stub @giphy.api, 'search', (options, callback) -> callback 'error'
-        sinon.stub @giphy, 'error'
-        @giphy.getSearchUri state
-        @giphy.error.should.have.been.called.once
-        @giphy.error.should.have.been.calledWith 'msg', 'error'
-        @giphy.api.search.restore()
-        @giphy.error.restore()
 
     describe '.getIdUri', ->
     describe '.getTranslateUri', ->


describe 'giphy', ->
  beforeEach ->
    @robot = {
      respond: sinon.spy()
    }

    @msg = {
      send: sinon.spy()
    }

    @giphy = giphy @robot
    sinon.stub @giphy.api, '_request', (options, callback) -> callback null, null

  afterEach ->
    @giphy.api._request.restore()

  describe 'test instrumentation', ->
    it 'has a valid class instance', ->


    describe '.error', ->
      beforeEach ->
        @fakes.stub @giphy, 'sendMessage'

      it 'sends the reason if msg and reason exist', ->
        @giphy.error @msg, 'test'
