Files
backend/tests/01_login_test.go
Yi-Ting Shih e6713dddc4
Some checks failed
Go test / check-swagger-up-to-date (push) Successful in 10s
Go test / run-go-test (push) Failing after 21s
Go test / run-go-vet (push) Successful in 6s
Go test / release-image (push) Has been skipped
Go test / cleanup-go-test (push) Successful in 4s
Debug: wtf
2025-12-13 02:43:24 +08:00

70 lines
1.5 KiB
Go

package tests
import (
"net/http"
"net/url"
"testing"
)
type genLoginUrlPayload struct {
LoginUrl string `json:"loginUrl"`
}
type loginPayload struct {
Token string `json:"token"`
}
func Test_01_Login(t *testing.T) {
t.Run("check preshared key failed", func(t *testing.T) {
resp, err := client.R().
SetBody(`{"userId": "testuser1"}`).
Post("/auth/gen-login-url")
if err != nil {
t.Fatal("request failed")
}
if resp.StatusCode() != http.StatusUnauthorized {
t.Fatal("preshared key check should failed")
}
})
var payload genLoginUrlPayload
resp, err := client.R().
SetBody(`{"userId": "testuser1"}`).
SetAuthToken("poop").
SetResult(&payload).
Post("/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")
}
client.SetCookie(cookie)
return
}
}
t.Fatal("refresh token not exist")
}