clone

a self-hosted multitenant nostr relay with sites, file storage, git hosting, and inbox and outbox delivery

feat/tinyagent
tinyrelay / tinyclient / signin_test.go
signin_test.go 2.1K
1package tinyclient23import (4 "net/http"5 "net/http/httptest"6 "net/url"7 "strings"8 "testing"9)1011func TestSignInNavigationAndAccount(t *testing.T) {12 for _, actor := range []string{"", strings.Repeat("a", 64)} {13 app, err := New(&fakeBackend{}, Options{Actor: func(*http.Request) (string, error) { return actor, nil }})14 if err != nil {15 t.Fatal(err)16 }17 for _, path := range []string{"/", "/signin", "/manage/connect"} {18 response := httptest.NewRecorder()19 app.ServeHTTP(response, httptest.NewRequest(http.MethodGet, path, nil))20 body := response.Body.String()21 if actor == "" {22 wantLink := `href="/signin?next=`23 if path == "/signin" {24 wantLink = `href="/signin"`25 }26 if !strings.Contains(body, wantLink) {27 t.Fatalf("%s missing sign-in navigation", path)28 }29 }30 if actor != "" && (!strings.Contains(body, `title="`+actor+`"`) || strings.Count(body, `id="session-logout"`) != 1) {31 t.Fatalf("%s missing account or unique sign-out control", path)32 }33 if path == "/signin" && actor == "" && (!strings.Contains(body, `id="nostrconnect"`) || strings.Contains(body, `method="setconnections"`)) {34 t.Fatal("sign-in page must show signer controls without connection settings")35 }36 if actor != "" && strings.Contains(body, `id="nostrconnect"`) {37 t.Fatalf("%s shows signer controls to a signed-in account", path)38 }39 }40 }41}4243func TestSigninURLPreservesTenantPathAndQuery(t *testing.T) {44 got := signinURL("/r/work", "/rooms/abc", url.Values{45 "event": {"deadbeef"},46 "q": {"hello world"},47 })48 want := "/signin?next=%2Fr%2Fwork%2Frooms%2Fabc%3Fevent%3Ddeadbeef%26q%3Dhello%2Bworld"49 if got != want {50 t.Fatalf("signinURL() = %q, want %q", got, want)51 }52}5354func TestSigninURLWithoutTenant(t *testing.T) {55 if got := signinURL("", "/wiki", url.Values{"d": {"A page"}}); got != "/signin?next=%2Fwiki%3Fd%3DA%2Bpage" {56 t.Fatalf("signinURL() = %q", got)57 }58}5960func TestSigninURLDoesNotNestSignin(t *testing.T) {61 for _, base := range []string{"", "/r/work"} {62 if got := signinURL(base, "/signin", url.Values{"next": {"/rooms"}}); got != "/signin" {63 t.Fatalf("signinURL(%q) = %q, want /signin", base, got)64 }65 }66}