Monorepo for Tangled
tangled.org
1package oauth
2
3import (
4 "errors"
5 "fmt"
6 "testing"
7)
8
9func TestIsPermanentAuthErr(t *testing.T) {
10 cases := []struct {
11 name string
12 err error
13 want bool
14 }{
15 {"nil", nil, false},
16 {"empty", errors.New(""), false},
17 {"random", errors.New("network unreachable"), false},
18 {"rate limited", errors.New("token refresh failed (HTTP 429): rate_limited"), false},
19 {"invalid grant direct", errors.New("token refresh failed (HTTP 400): invalid_grant"), true},
20 {"invalid grant wrapped", fmt.Errorf("put record: %w", errors.New("failed to refresh OAuth tokens: token refresh failed: auth server request failed (HTTP 400): invalid_grant")), true},
21 {"invalid client", errors.New("auth server request failed (HTTP 401): invalid_client"), true},
22 {"unauthorized client", errors.New("token refresh failed (HTTP 400): unauthorized_client"), true},
23 {"substring trap", errors.New("our invalid_grant_alternative ran out"), false},
24 {"case-sensitive", errors.New("INVALID_GRANT"), false},
25 }
26 for _, c := range cases {
27 t.Run(c.name, func(t *testing.T) {
28 got := IsPermanentAuthErr(c.err)
29 if got != c.want {
30 t.Fatalf("got %v want %v", got, c.want)
31 }
32 })
33 }
34}
35
36func TestIsStaleAccessTokenErr(t *testing.T) {
37 cases := []struct {
38 name string
39 err error
40 want bool
41 }{
42 {"nil", nil, false},
43 {"random", errors.New("hello"), false},
44 {"500", errors.New("API request failed (HTTP 500): InternalError"), false},
45 {"401 auth required", errors.New("API request failed (HTTP 401): AuthenticationRequired: Invalid OAuth access token"), true},
46 {"401 invalid token", errors.New("API request failed (HTTP 401): invalid_token"), true},
47 {"401 wrapped", fmt.Errorf("put record: %w", errors.New("API request failed (HTTP 401): AuthenticationRequired")), true},
48 {"403 forbidden", errors.New("API request failed (HTTP 403): Forbidden"), false},
49 }
50 for _, c := range cases {
51 t.Run(c.name, func(t *testing.T) {
52 got := IsStaleAccessTokenErr(c.err)
53 if got != c.want {
54 t.Fatalf("got %v want %v", got, c.want)
55 }
56 })
57 }
58}