func TestViewGET(t *testing.T) { db := mem.WithData(map[data.Kind][]data.Record{ models.UserKind: { &models.User{ Id: "1", CredentialsIds: []string{"2"}, }, }, models.CredentialKind: { &models.Credential{ Id: "2", OwnerId: "1", Spec: "password", Public: "public", Private: "private", }, }, }) s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { records.ViewGET(user.NewContext(context.Background(), &models.User{Id: "1"}), w, r, db, services.NewTestLogger(t)) })) p := s.URL + "?" + url.Values{ "kind": []string{"credential"}, "id": []string{"2"}, }.Encode() resp, err := http.Get(p) if err != nil { t.Fatalf("http.Get(%q) error: %v", err) } defer resp.Body.Close() b, err := ioutil.ReadAll(resp.Body) if err != nil { t.Fatalf("ioutil.ReadAll error: %v", err) } body := string(b) t.Logf("resp.Body:\n%s", body) contents := map[string]bool{ "credential": true, "public": true, "password": true, "owner": true, "/records/edit/?kind=credential&id=2": true, "user": false, } for content, want := range contents { if got := strings.Contains(body, content); got != want { t.Fatalf("strings.Contains(body, %q): got %t, want %t", content, 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) } } }
// --- 'elos setup' (context: already have an account) {{{ func TestSetupCurrentUser(t *testing.T) { f, err := ioutil.TempFile("", "conf") if err != nil { t.Fatal(err) } defer f.Close() ui, conf, c := newMockSetupCommand(t) conf.Path = f.Name() conf.Host = "fake" // not needed here because doesn't hit api mem.WithData(map[data.Kind][]data.Record{ data.Kind(models.Kind_USER.String()): []data.Record{ &models.User{ Id: "1", }, }, data.Kind(models.Kind_CREDENTIAL.String()): []data.Record{ &models.Credential{ Id: "2", Type: models.Credential_PASSWORD, Public: "public", Private: "private", OwnerId: "1", }, }, }) // yes already account, then public key and private key and user id ui.InputReader = bytes.NewBufferString(fmt.Sprintf("y\npublic\nprivate\n%s\n", "1")) t.Log("running: `elos setup`") code := c.Run([]string{}) t.Log("command `setup` terminated") t.Log("Reading outputs") errput := ui.ErrorWriter.String() output := ui.OutputWriter.String() t.Logf("Error output:\n%s", errput) t.Logf("Output:\n%s", output) // verify there were no errors if errput != "" { t.Fatalf("Expected no error output, got: %s", errput) } // verify success if code != 0 { t.Fatalf("Expected successful exit code along with empty error output.") } // verify some of the output if !strings.Contains(output, "account") { t.Fatalf("Output should have contained a 'account' for saying something about an account") } t.Log("Configuration:\n%+v", conf) // verify conf was changed if conf.UserID != "1" { t.Fatalf("User id should be: %s", "1") } if conf.PublicCredential != "public" { t.Fatalf("public credential should be: public") } if conf.PrivateCredential != "private" { t.Fatalf("private credential should be: private") } }