Files
backend/tests/01_login_test.go

76 lines
1.6 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()
t.Run("check preshared key failed", func(t *testing.T) {
resp, err := client.R().
SetBody(`{"userId": "testuser1"}`).
Post("http://localhost:8080/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("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")
}
client.SetCookie(cookie)
return
}
}
t.Fatal("refresh token not exist")
}