(t *testing.T)
| 86 | } |
| 87 | |
| 88 | func TestTokenRefreshOnExpiry(t *testing.T) { |
| 89 | refreshCalls := 0 |
| 90 | server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 91 | if r.URL.Path != "/oauth/tokens" { |
| 92 | t.Fatalf("unexpected path: %s", r.URL.Path) |
| 93 | } |
| 94 | refreshCalls++ |
| 95 | resp := OAuthToken{ |
| 96 | AccessToken: "refreshed-token", |
| 97 | RefreshToken: "new-refresh", |
| 98 | ExpiresIn: 3600, |
| 99 | } |
| 100 | w.Header().Set("Content-Type", "application/json") |
| 101 | json.NewEncoder(w).Encode(resp) |
| 102 | })) |
| 103 | defer server.Close() |
| 104 | |
| 105 | t.Setenv("HEY_TOKEN", "") |
| 106 | mgr := testManager(t, server) |
| 107 | |
| 108 | // Save credentials that are expired (ExpiresAt in the past) |
| 109 | expired := &Credentials{ |
| 110 | AccessToken: "old-token", |
| 111 | RefreshToken: "refresh-tok", |
| 112 | ExpiresAt: time.Now().Unix() - 600, |
| 113 | OAuthType: "oauth", |
| 114 | TokenEndpoint: fmt.Sprintf("%s/oauth/tokens", server.URL), |
| 115 | } |
| 116 | if err := mgr.GetStore().Save(mgr.CredentialKey(), expired); err != nil { |
| 117 | t.Fatalf("Save: %v", err) |
| 118 | } |
| 119 | |
| 120 | token, err := mgr.AccessToken(context.Background()) |
| 121 | if err != nil { |
| 122 | t.Fatalf("AccessToken: %v", err) |
| 123 | } |
| 124 | |
| 125 | if token != "refreshed-token" { |
| 126 | t.Errorf("token = %q, want %q", token, "refreshed-token") |
| 127 | } |
| 128 | if refreshCalls != 1 { |
| 129 | t.Errorf("refresh calls = %d, want 1", refreshCalls) |
| 130 | } |
| 131 | } |
nothing calls this directly
no test coverage detected