From 9765fb54a6d01e9c79d7ae9d19b905b7512b8e1f Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Mon, 30 Sep 2019 10:20:15 +0200 Subject: [PATCH] Add intg. test for record exporting, more strict param checking --- compose/rest/record.go | 5 ++++- tests/compose/record_test.go | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/compose/rest/record.go b/compose/rest/record.go index 7bbdcab78..0b9cfccb1 100644 --- a/compose/rest/record.go +++ b/compose/rest/record.go @@ -304,7 +304,6 @@ func (ctrl *Record) Export(ctx context.Context, r *request.RecordExport) (interf contentType string ) - // Access control. if _, err = ctrl.module.With(ctx).FindByID(r.NamespaceID, r.ModuleID); err != nil { return nil, err @@ -317,6 +316,10 @@ func (ctrl *Record) Export(ctx context.Context, r *request.RecordExport) (interf return func(w http.ResponseWriter, req *http.Request) { ff := encoder.MakeFields(r.Fields...) + if len(ff) == 0 { + http.Error(w, "no record value fields provided", http.StatusBadRequest) + } + switch strings.ToLower(r.Ext) { case "json", "jsonl", "ldjson", "ndjson": contentType = "application/jsonl" diff --git a/tests/compose/record_test.go b/tests/compose/record_test.go index 8a0925d53..dfb43413c 100644 --- a/tests/compose/record_test.go +++ b/tests/compose/record_test.go @@ -3,6 +3,7 @@ package compose import ( "context" "fmt" + "io/ioutil" "net/http" "testing" "time" @@ -197,3 +198,25 @@ func TestRecordDelete(t *testing.T) { _, err := h.repoRecord().FindByID(module.NamespaceID, record.ID) h.a.Error(err, "compose.repository.RecordNotFound") } + +func TestRecordExport(t *testing.T) { + h := newHelper(t) + + module := h.repoMakeRecordModuleWithFields("record export module") + for i := 0; i < 10; i++ { + h.repoMakeRecord(module, &types.RecordValue{Name: "name", Value: fmt.Sprintf("d%d", i)}) + } + + // we'll not use standard asserts (AssertNoErrors) here, + // because we're not returning JSON errors. + r := h.apiInit(). + Get(fmt.Sprintf("/namespace/%d/module/%d/record/export.csv", module.NamespaceID, module.ID)). + Query("fields", "name"). + Expect(t). + Status(http.StatusOK). + End() + + b, err := ioutil.ReadAll(r.Response.Body) + h.a.NoError(err) + h.a.Equal("name\nd0\nd1\nd2\nd3\nd4\nd5\nd6\nd7\nd8\nd9\n", string(b)) +}