Go · 1561 bytes Raw Blame History
1 // SPDX-License-Identifier: AGPL-3.0-or-later
2
3 package billing
4
5 import (
6 "errors"
7 "testing"
8 )
9
10 func TestPrincipalValidate(t *testing.T) {
11 t.Parallel()
12 cases := []struct {
13 name string
14 p Principal
15 want error
16 }{
17 {"zero value", Principal{}, ErrInvalidPrincipal},
18 {"zero kind", Principal{Kind: "", ID: 1}, ErrInvalidPrincipal},
19 {"bogus kind", Principal{Kind: "alien", ID: 1}, ErrInvalidPrincipal},
20 {"zero id", Principal{Kind: SubjectKindUser, ID: 0}, ErrInvalidPrincipal},
21 {"negative id", Principal{Kind: SubjectKindOrg, ID: -42}, ErrInvalidPrincipal},
22 {"valid user", PrincipalForUser(7), nil},
23 {"valid org", PrincipalForOrg(7), nil},
24 }
25 for _, tc := range cases {
26 t.Run(tc.name, func(t *testing.T) {
27 err := tc.p.Validate()
28 if tc.want == nil && err != nil {
29 t.Fatalf("unexpected error: %v", err)
30 }
31 if tc.want != nil && !errors.Is(err, tc.want) {
32 t.Fatalf("want %v, got %v", tc.want, err)
33 }
34 })
35 }
36 }
37
38 func TestPrincipalKindPredicates(t *testing.T) {
39 t.Parallel()
40 if !PrincipalForUser(1).IsUser() || PrincipalForUser(1).IsOrg() {
41 t.Errorf("PrincipalForUser predicates wrong")
42 }
43 if !PrincipalForOrg(1).IsOrg() || PrincipalForOrg(1).IsUser() {
44 t.Errorf("PrincipalForOrg predicates wrong")
45 }
46 }
47
48 func TestPrincipalString(t *testing.T) {
49 t.Parallel()
50 if got, want := PrincipalForUser(42).String(), "user:42"; got != want {
51 t.Errorf("user String: got %q, want %q", got, want)
52 }
53 if got, want := PrincipalForOrg(7).String(), "org:7"; got != want {
54 t.Errorf("org String: got %q, want %q", got, want)
55 }
56 }
57