+func TestCreateInfoJobHandler(t *testing.T) {
+ assertions := require.New(t)
+ jobHandlerMock := mocks.JobHandler{}
+
+ goodJobInfo := jobs.JobInfo{
+ Owner: "owner",
+ LastUpdated: "now",
+ InfoJobIdentity: "jobId",
+ TargetUri: "target",
+ InfoJobData: "{}",
+ InfoTypeIdentity: "type",
+ }
+ badJobInfo := jobs.JobInfo{
+ Owner: "bad",
+ }
+ jobHandlerMock.On("AddJob", goodJobInfo).Return(nil)
+ jobHandlerMock.On("AddJob", badJobInfo).Return(errors.New("error"))
+ jobs.Handler = &jobHandlerMock
+
+ type args struct {
+ responseRecorder *httptest.ResponseRecorder
+ r *http.Request
+ }
+ tests := []struct {
+ name string
+ args args
+ wantedStatus int
+ wantedBody string
+ }{
+ {
+ name: "CreateInfoJobHandler with correct path and method, should return OK",
+ args: args{
+ responseRecorder: httptest.NewRecorder(),
+ r: newRequest("POST", "/producer_simulator/info_job", &goodJobInfo, t),
+ },
+ wantedStatus: http.StatusOK,
+ wantedBody: "",
+ },
+ {
+ name: "CreateInfoJobHandler with incorrect job info, should return BadRequest",
+ args: args{
+ responseRecorder: httptest.NewRecorder(),
+ r: newRequest("POST", "/producer_simulator/info_job", &badJobInfo, t),
+ },
+ wantedStatus: http.StatusBadRequest,
+ wantedBody: "Invalid job info. Cause: error",
+ },
+ {
+ name: "CreateInfoJobHandler with incorrect path, should return NotFound",
+ args: args{
+ responseRecorder: httptest.NewRecorder(),
+ r: newRequest("GET", "/wrong", nil, t),
+ },
+ wantedStatus: http.StatusNotFound,
+ wantedBody: "404 not found.",
+ },
+ {
+ name: "CreateInfoJobHandler with incorrect method, should return MethodNotAllowed",
+ args: args{
+ responseRecorder: httptest.NewRecorder(),
+ r: newRequest("PUT", "/producer_simulator/info_job", nil, t),
+ },
+ wantedStatus: http.StatusMethodNotAllowed,
+ wantedBody: "Method is not supported.",
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ handler := http.HandlerFunc(CreateInfoJobHandler)
+ handler.ServeHTTP(tt.args.responseRecorder, tt.args.r)
+ assertions.Equal(tt.wantedStatus, tt.args.responseRecorder.Code)
+
+ assertions.Contains(tt.args.responseRecorder.Body.String(), tt.wantedBody)
+ })
+ }
+}
+
+func newRequest(method string, url string, jobInfo *jobs.JobInfo, t *testing.T) *http.Request {
+ var body io.Reader
+ if jobInfo != nil {
+ bodyAsBytes, _ := json.Marshal(jobInfo)
+ body = ioutil.NopCloser(bytes.NewReader(bodyAsBytes))
+ }