Edit in JSFiddle

// Configure Mocha, telling both it and chai to use BDD-style tests. 
mocha.setup("tdd");
var assert = chai.assert;



let repository = {
  "200": {
    "offer-id": 200,
    "percentage": 15
  },
  "400": {
    "offer-id": 400,
    "percentage": 22
  }
};


function validateId(state) {
  if (typeof state.id !== 'string') throw {
    code: 400,
    body: {
      errors: ["The id you provided is invalid"]
    }
  };
  return state;
}

function findOfferById(state) {
  if (!repository[state.id]) {
    notify("Offer not found: " + state.id);
    throw {
      code: 404,
      body: {
        errors: ["The id you provided cannot be found"]
      }
    };
  }
  state.offer = repository[state.id];
  return state;
}

function offerToJson(state){
  return JSON.stringify({code:200,body:state.offer});
}


function getOfferById(requestId) {
  return safe({
      id: requestId
    },
    [
      validateId,
      findOfferById,
      offerToJson
    ]);
}






describe('functional pipelines (with overflow) endpoint should', function(){
  it('return an offer 200', function(){
    assert.equal("{\"code\":200,\"body\":{\"offer-id\":200,\"percentage\":15}}", getOfferById("200"));
  });
  it('return a validation error 400 when not found', function(){
    assert.equal("{\"code\":400,\"body\":{\"errors\":[\"The id you provided is invalid\"]}}", getOfferById(400));
  });
  it('return a not found 404', function(){
    assert.equal("{\"code\":404,\"body\":{\"errors\":[\"The id you provided cannot be found\"]}}", getOfferById("404"));
  });
  });
// Run all our test suites.  Only necessary in the browser.
mocha.run();