Files
2026-11-08 03:46:11 +00:00

95 lines
2.2 KiB
Go

package share
import (
"testing"
"git.entityseven.com/rilaxik/pllist/internal/domain"
)
func TestShareCallbackRoundTrips(t *testing.T) {
listID, role, err := parseRole(roleData(42, domain.RoleEditor))
if err != nil || listID != 42 || role != domain.RoleEditor {
t.Fatalf("parseRole() = %d, %q, %v", listID, role, err)
}
for _, pending := range []bool{false, true} {
want := shareRef{listID: 42, shareID: 7, pending: pending}
ref, err := parseView(viewData(42, 7, pending))
if err != nil {
t.Fatalf("parseView() error = %v", err)
}
if ref != want {
t.Fatalf("parseView() = %+v, want %+v", ref, want)
}
ref, role, err := parseSet(setData(42, 7, pending, domain.RoleReader))
if err != nil || role != domain.RoleReader {
t.Fatalf("parseSet() = %+v, %q, %v", ref, role, err)
}
if ref != want {
t.Fatalf("parseSet() ref = %+v, want %+v", ref, want)
}
ref, err = parseRevoke(revokeData(42, 7, pending))
if err != nil {
t.Fatalf("parseRevoke() error = %v", err)
}
if ref != want {
t.Fatalf("parseRevoke() = %+v, want %+v", ref, want)
}
ref, err = parseRevokeYes(revokeYesData(42, 7, pending))
if err != nil {
t.Fatalf("parseRevokeYes() error = %v", err)
}
if ref != want {
t.Fatalf("parseRevokeYes() = %+v, want %+v", ref, want)
}
}
}
func TestShareCallbackRejectsBadData(t *testing.T) {
for _, data := range []string{
"v1:share_role:42",
"v1:share_role:0:editor",
"v1:share_role:42:owner",
"v1:share_view:42:u",
"v1:share_view:42:x:7",
"v1:share_view:42:u:0",
"v1:share_set:42:u:7",
"v1:share_set:42:u:7:owner",
"v1:share_revoke:42:u",
} {
if _, err := parseRefOrRole(data); err == nil {
t.Fatalf("accepted invalid callback data %q", data)
}
}
}
func parseRefOrRole(data string) (any, error) {
ref, role, err := parseSet(data)
if err == nil {
return struct {
ref shareRef
role domain.Role
}{ref, role}, nil
}
if ref, err := parseView(data); err == nil {
return ref, nil
}
if ref, err := parseRevoke(data); err == nil {
return ref, nil
}
if ref, err := parseRevokeYes(data); err == nil {
return ref, nil
}
if listID, role, err := parseRole(data); err == nil {
return struct {
listID int64
role domain.Role
}{listID, role}, nil
}
return nil, err
}