func TestDeletePOST(t *testing.T) { db := mem.NewDB() u, _, err := user.Create(db, "username", "password") if err != nil { t.Fatalf("user.Create error: %v", err) } e := &models.Event{ Id: db.NewID().String(), OwnerId: u.Id, Name: "event name", Data: map[string]interface{}{ "sensor": 45.3, }, } if err := db.Save(e); err != nil { t.Fatalf("db.Save error: %v", err) } s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if strings.Contains(r.RequestURI, "/records/delete/") { records.DeletePOST(user.NewContext(context.Background(), u), w, r, db, services.NewTestLogger(t)) } records.QueryGET(user.NewContext(context.Background(), u), w, r, db, services.NewTestLogger(t)) })) p := s.URL + "/records/delete/?" + url.Values{ "kind": []string{"event"}, "id": []string{e.Id}, }.Encode() resp, err := http.Post(p, "", new(bytes.Buffer)) if err != nil { t.Fatalf("http.Post error: %v", err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { t.Fatalf("ioutil.ReadAll error: %v", err) } t.Logf("resp.Body:\n%s", body) if got, want := db.PopulateByID(e), data.ErrNotFound; got != want { t.Fatalf("db.PopulateByID: got %v, want %v", got, want) } }
func TestQueryGET(t *testing.T) { db := mem.WithData(map[data.Kind][]data.Record{ models.UserKind: []data.Record{ &models.User{ Id: "1", CredentialsIds: []string{"2"}, }, &models.User{ Id: "2", }, }, models.CredentialKind: []data.Record{ &models.Credential{ Id: "3", CreatedAt: time.Now(), Spec: "password", Public: "username", Private: "password", }, }, models.EventKind: []data.Record{ &models.Event{ Id: "4", OwnerId: "1", Name: "event 1", }, &models.Event{ Id: "5", OwnerId: "1", Name: "event 2", }, &models.Event{ Id: "6", OwnerId: "1", Name: "event 3", }, &models.Event{ Id: "7", OwnerId: "1", Name: "generic event", }, &models.Event{ Id: "8", OwnerId: "1", Name: "generic event", }, // Not owned by User 1. &models.Event{ Id: "9", OwnerId: "2", Name: "not owned", }, }, }) s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { records.QueryGET(user.NewContext(context.Background(), &models.User{Id: "1"}), w, r, db, services.NewTestLogger(t)) })) p := s.URL + "?" + url.Values{ "query/Kind": []string{"event"}, }.Encode() resp, err := http.Get(p) if err != nil { t.Fatalf("http.Get error: %v", err) } defer resp.Body.Close() b, err := ioutil.ReadAll(resp.Body) body := string(b) if err != nil { t.Fatalf("ioutil.ReadAll error: %v", err) } t.Logf("resp.Body:\n%s", body) contents := map[string]bool{ "Query": true, "5 results.": true, "event 1": true, "event 2": true, "event 3": true, "generic event": true, "Edit": true, "/records/edit/?kind=event&id=8": true, "/records/edit/?kind=event&id=9": false, "not owned": false, } for content, want := range contents { if got := strings.Contains(body, content); got != want { t.Errorf("bytes.Contains(body, %q): got %t, want %t", content, got, want) } } }