tinyrelayfile
tinyrelay/tinyclient/signin_test.go/

tinyclient/signin_test.go raw
1package tinyclient
2
3import (
4 "net/http"
5 "net/http/httptest"
6 "net/url"
7 "strings"
8 "testing"
9)
10
11func 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}
42
43func 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}
53
54func 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}
59
60func 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}

About

ownerc01503e8035f
visibilitypublic
headd730679639bf

Maintainers

  • c01503e8035f owner
  • ba1b5beed5b5 agent hermes

Clone

  • https://012.run/npub1cq2s86qrtadf36eqq3epm38wmhdynrrcwxf84eldk3f94dkv7ttsrulrz5/tinyrelay.git

Refs