feat: identify required reauthentication
This commit is contained in:
@@ -137,6 +137,9 @@ func TestRefreshRejectsMissingNewServiceTokenWithoutSaving(t *testing.T) {
|
||||
}
|
||||
|
||||
err = client.refreshToken(context.Background())
|
||||
if !errors.Is(err, ErrReauthenticationRequired) {
|
||||
t.Fatalf("refreshToken() error = %v, want ErrReauthenticationRequired", err)
|
||||
}
|
||||
var loginErr *LoginError
|
||||
if !errors.As(err, &loginErr) {
|
||||
t.Fatalf("refreshToken() error = %v, want LoginError", err)
|
||||
@@ -153,6 +156,56 @@ func TestRefreshRejectsMissingNewServiceTokenWithoutSaving(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRefreshWithoutNewTokenRequiresReauthentication(t *testing.T) {
|
||||
var server *httptest.Server
|
||||
server = httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
|
||||
switch request.URL.Path {
|
||||
case "/v2/message/v2/check_new_msg":
|
||||
_, _ = io.WriteString(writer, `{"code":-10030,"message":"expired"}`)
|
||||
case "/serviceLogin":
|
||||
_, _ = io.WriteString(writer, `&&&START&&&{"code":70016,"location":"`+server.URL+`/qr"}`)
|
||||
default:
|
||||
http.NotFound(writer, request)
|
||||
}
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := testClient(t, server.Client())
|
||||
client.baseURL = server.URL
|
||||
client.serviceLoginURL = server.URL + "/serviceLogin"
|
||||
client.availabilityValid = false
|
||||
|
||||
err := client.refreshToken(context.Background())
|
||||
if !errors.Is(err, ErrReauthenticationRequired) {
|
||||
t.Fatalf("refreshToken() error = %v, want ErrReauthenticationRequired", err)
|
||||
}
|
||||
var loginErr *LoginError
|
||||
if !errors.As(err, &loginErr) {
|
||||
t.Fatalf("refreshToken() error = %v, want LoginError", err)
|
||||
}
|
||||
if loginErr.Code != -1 || loginErr.Message != "刷新Token失败,请重新登录" {
|
||||
t.Fatalf("LoginError = %#v", loginErr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestQRLoginTimeoutDoesNotRequireReauthentication(t *testing.T) {
|
||||
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(-time.Second))
|
||||
defer cancel()
|
||||
|
||||
client := testClient(t, http.DefaultClient)
|
||||
_, err := client.completeQRLogin(ctx, qrLoginData{LP: "https://example.invalid/long-poll"})
|
||||
var loginErr *LoginError
|
||||
if !errors.As(err, &loginErr) {
|
||||
t.Fatalf("completeQRLogin() error = %v, want LoginError", err)
|
||||
}
|
||||
if loginErr.Code != -1 {
|
||||
t.Fatalf("LoginError.Code = %d, want -1", loginErr.Code)
|
||||
}
|
||||
if errors.Is(err, ErrReauthenticationRequired) {
|
||||
t.Fatalf("completeQRLogin() error = %v, do not want ErrReauthenticationRequired", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAuthDataReturnsDeepCopy(t *testing.T) {
|
||||
client := testClient(t, http.DefaultClient)
|
||||
client.updateAuthData(func(authData *AuthData) { authData.Extra = map[string]string{"cookie": "original"} })
|
||||
|
||||
Reference in New Issue
Block a user