HTTP API: Implement getting information about requests
authorMaciej Wereski <m.wereski@partner.samsung.com>
Thu, 28 Sep 2017 13:42:24 +0000 (15:42 +0200)
committerMaciej Wereski <m.wereski@partner.samsung.com>
Tue, 5 Jun 2018 09:26:40 +0000 (11:26 +0200)
Change-Id: Ia0e7675dbcaad1ac90c6bc50f9d9de0c4a02b32d
Signed-off-by: Maciej Wereski <m.wereski@partner.samsung.com>
server/api/v1/handlers.go
server/api/v1/handlers_test.go
server/api/v1/testdata/req-info-GET.json
server/api/v1/testdata/req-info-bad-id-GET.json [new file with mode: 0644]
server/api/v1/testdata/req-info-missing-GET.json [new file with mode: 0644]

index 40702bb..29cf5b2 100644 (file)
@@ -68,7 +68,19 @@ func (api *API) updateRequestHandler(r *http.Request, ps map[string]string) resp
 // getRequestInfoHandler parses HTTP request for getting information about Boruta
 // request and calls GetRequestInfo().
 func (api *API) getRequestInfoHandler(r *http.Request, ps map[string]string) responseData {
-       return newServerError(ErrNotImplemented, "get request info")
+       defer r.Body.Close()
+
+       reqid, err := parseReqID(ps["id"])
+       if err != nil {
+               return newServerError(ErrBadID)
+       }
+
+       reqinfo, err := api.reqs.GetRequestInfo(reqid)
+       if err != nil {
+               return newServerError(err)
+       }
+
+       return reqinfo
 }
 
 // listRequestsHandler parses HTTP request for listing Boruta requests and calls
index 0371651..5b0811f 100644 (file)
@@ -123,15 +123,33 @@ func TestGetRequestInfoHandler(t *testing.T) {
        assert, m, api := initTest(t)
        defer m.finish()
 
+       methods := []string{http.MethodGet, http.MethodHead}
+       prefix := "req-info-"
+       path := "/api/v1/reqs/"
+
+       var req ReqInfo
+       err := json.Unmarshal([]byte(validReqJSON), &req)
+       assert.Nil(err)
+
+       notFoundTest := testFromTempl(notFoundTestTempl, prefix, path+"2", methods...)
+       invalidIDTest := testFromTempl(invalidIDTestTempl, prefix, path+invalidID, methods...)
+       m.rq.EXPECT().GetRequestInfo(ReqID(1)).Return(req, nil).Times(2)
+       m.rq.EXPECT().GetRequestInfo(ReqID(2)).Return(ReqInfo{}, NotFoundError("Request")).Times(2)
+
        tests := []requestTest{
+               // Get information of existing request.
                {
                        name:        "req-info",
-                       path:        "/api/v1/reqs/8",
-                       methods:     []string{http.MethodGet, http.MethodHead},
+                       path:        path + "1",
+                       methods:     methods,
                        json:        ``,
                        contentType: contentTypeJSON,
-                       status:      http.StatusNotImplemented,
+                       status:      http.StatusOK,
                },
+               // Try to get request information of request that doesn't exist.
+               notFoundTest,
+               // Try to get request with invalid ID.
+               invalidIDTest,
        }
 
        runTests(assert, api, tests)
index 3c5978f..ee5a785 100644 (file)
@@ -1 +1 @@
-{"error":"not implemented yet: get request info"}
\ No newline at end of file
+{"ID":1,"Priority":8,"Owner":{"Groups":null},"Deadline":"2200-12-31T01:02:03Z","ValidAfter":"2100-01-01T04:05:06Z","State":"WAITING","Job":null,"Caps":{"architecture":"armv7l","monitor":"yes"}}
\ No newline at end of file
diff --git a/server/api/v1/testdata/req-info-bad-id-GET.json b/server/api/v1/testdata/req-info-bad-id-GET.json
new file mode 100644 (file)
index 0000000..9a1b539
--- /dev/null
@@ -0,0 +1 @@
+{"error":"invalid request: ID provided in URL isn't valid"}
\ No newline at end of file
diff --git a/server/api/v1/testdata/req-info-missing-GET.json b/server/api/v1/testdata/req-info-missing-GET.json
new file mode 100644 (file)
index 0000000..bb60840
--- /dev/null
@@ -0,0 +1 @@
+{"error":"Request not found"}
\ No newline at end of file