76 lines
1.6 KiB
Go
76 lines
1.6 KiB
Go
package tests
|
|
|
|
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")
|
|
}
|