0

I have the requirement to test a Kafka consumer method which in turn creates a post call to another service. How can I write wiremock for the another service. The code is:

  1. Kafka Consumer
func (handler FxmWorklogEventHandler) ProcessMessage(message kafka.Message) (swgykafka.Status, error) {
    txn := util.TraceTransaction(handler.MessageType())
    if txn != nil {
        defer txn.End()
    }
    var fxmWorklogEvent event.FxmWorklogEvent
    err := json.Unmarshal(message.Data, &fxmWorklogEvent)
    if err != nil {
        log.Error().Err(err).Msg("FxmWorklogEventHandler - Failed to un marshall the message")
        return swgykafka.HardFailure, err
    }
    log.Info().Msgf("Processing fxm worklog event for order %s", fxmWorklogEvent.OrderId)
    fxmEventToPersist := BuildFxmEventToPersist(fxmWorklogEvent)
    _, err = handler.am.SaveFxmWorklog(fxmEventToPersist)
    if err != nil {
        log.Error().Err(err).Msgf("Failed to save fxm worklog event in am for order %s", fxmWorklogEvent.OrderId)
        return swgykafka.SoftFailure, nil
    }

    return swgykafka.Success, nil
}
  1. Post Call
func (am *AssistanceManagerClient) SaveFxmWorklog(r request.FxmWorklogDetails) (*response.BaseResponse, error) {
    url := config.Client.GetString(amHost) + util.AssistanceManagerSaveFxmWorklog
    return am.hc.Post(url, r, http.Header{}, util.AssistanceManagerCommand)
}
  1. External Service Method
func SaveFxmWorklog(w http.ResponseWriter, r *http.Request) {
    var rb entity.FxmWorklogDetails
    err := json.NewDecoder(r.Body).Decode(&rb)
    if err != nil {
        log.Error().Err(err).Msgf("Failed to parse the fxm worklog request %s", util.ToJSON(rb))
        util.ErrorResponse(w, err.Error(), http.StatusBadRequest)
        return
    }
    log.Info().Msgf("Save fxm worklog request received for order %s", rb.OrderId)
    response, err := service.FxmService.SaveFxmWorklogEvent(rb)
    if err != nil {
        log.Error().Err(err).Msgf("Failed to save fxm worklog event %s", util.ToJSON(rb))
        util.ErrorResponse(w, err.Error(), http.StatusInternalServerError)
        return
    }
    w.WriteHeader(response.HTTPStatusCode)
    _ = json.NewEncoder(w).Encode(response)
}

How can I test this method by wiremocking the external service api call?

Jonathan Hall
  • 75,165
  • 16
  • 143
  • 189
Pankaj Kumar
  • 51
  • 1
  • 1
  • 4

0 Answers0