Files
backend/tests/01_login_test.go
2025-12-07 18:56:31 +08:00

62 lines
1.3 KiB
Go

package main
import (
"net/http"
"net/url"
"testing"
"github.com/go-resty/resty/v2"
)
var client *resty.Client
type genLoginUrlPayload struct {
LoginUrl string `json:"loginUrl"`
}
type loginPayload struct {
Token string `json:"token"`
}
func Test_01_Login(t *testing.T) {
client = resty.New()
var payload genLoginUrlPayload
resp, err := client.R().
SetBody(`{"userId": "testuser1"}`).
SetResult(&payload).
Post("http://localhost:8080/auth/gen-login-url")
if err != nil || resp.StatusCode() != http.StatusOK {
t.Fatal("failed to get login url")
}
loginUrl, err := url.Parse(payload.LoginUrl)
if err != nil {
t.Logf("login-url: %s", payload.LoginUrl)
t.Fatal("failed to parse login url")
}
resp, err = client.R().
SetBody(loginPayload{Token: loginUrl.Query().Get("token")}).
Post(loginUrl.Scheme + "://" + loginUrl.Host + "/auth/login")
if err != nil || resp.StatusCode() != http.StatusOK {
t.Fatal("failed to login")
}
for _, rawCookie := range resp.Header()["Set-Cookie"] {
cookie, err := http.ParseSetCookie(rawCookie)
if err != nil {
t.Fatal("failed to parse cookie")
}
if cookie.Name == "refresh_token" {
if len(cookie.Value) == 0 {
t.Fatal("empty refresh token")
}
return
}
}
t.Fatal("refresh token not exist")
}