package handler

import (
	"net/http"
	"testing"

	"github.com/stretchr/testify/assert"

	"github.com/pingcap/test-infra/common/model"
	respM "github.com/pingcap/test-infra/common/model/tcms/response"
	htest "github.com/pingcap/test-infra/services/tcms/tests/httptest"
)

func TestJWT(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()

	_, u := htest.MustGET[model.User](h.Echo, "/api/v1/users/current", htest.WithUser(3))
	assert.Equal(t, "gaozifeng@pingcap.com", u.Email)
}

func TestLoginGoogleAuth_Failed(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()

	const expiredIDToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjZhMWQyNmQ5OTJiZTdhNGI2ODliZGNlMTkxMWY0ZTlhZGM3NWQ5ZjEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiYXpwIjoiMzM0NjQxOTI5NzM5LTFnMnNxMHFyZjE0OGdtaXQycGdlc2k1ZTBsNW1yZmtnLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwiYXVkIjoiMzM0NjQxOTI5NzM5LTFnMnNxMHFyZjE0OGdtaXQycGdlc2k1ZTBsNW1yZmtnLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwic3ViIjoiMTA1MDQ3Mjg2NDk5MjMwNDI0NjM0IiwiaGQiOiJwaW5nY2FwLmNvbSIsImVtYWlsIjoiZ2FvemlmZW5nQHBpbmdjYXAuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF0X2hhc2giOiJzRkxBQ0Y4TGJoRXZVMjN1YkFqUHV3IiwibmFtZSI6IlppZmVuZyBHYW8iLCJwaWN0dXJlIjoiaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EvQUFUWEFKeENsdENVZnROSUNBWlVPeTFFOHhVTlZReTI5VVJBcVk3QVlQbDY9czk2LWMiLCJnaXZlbl9uYW1lIjoiWmlmZW5nIiwiZmFtaWx5X25hbWUiOiJHYW8iLCJsb2NhbGUiOiJ6aC1DTiIsImlhdCI6MTYyMzMxNDI2OCwiZXhwIjoxNjIzMzE3ODY4LCJqdGkiOiJiMjc1MWVkNDczZDQzNTk1OTcxMDNlYmZhZmNiYWNhMDliYzZjNDYwIn0.jvUC9A6D-ZrdVMtTnikgpof7uOM5JYiPkyI-29wHDRUXZUNpYDLWaFhmIei4FB7QI8Lgph-U98f1AXFgh1gs6AvOr1Ymkriqie68sOQobldX0migltdcDXInsdq53qYANwya-vvrowLXu57Q8M1QMC5AX9QzDsBr2MZKImhOyPXC0u724K6215C-hYlAd2zRvXYwFhH2AF4d-Lm7c0DxcRw-UFfM5qYoM1wLvwrCetwLBG5fdDymIaZkECTYPCrxmt3X0sU0TraPTRsKOY02Pcz_jHCGUIv0eu_NbbPP9NZdmQajiZQU5l8mtgolUBWR1As6OskE49acQatt9aMLNw"
	rec, _ := htest.GET[any](h.Echo, "/api/v1/users/login/google-auth?id_token="+expiredIDToken)
	assert.Equal(t, http.StatusBadRequest, rec.Code)
}

func TestListUsers(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()

	// Filter by user ids
	_, users := htest.MustGET[respM.UserListResponse](h.Echo, "/api/v1/users?ids=1,2")
	assert.Equal(t, 2, users.Total)

	// Filter by user email
	_, users = htest.MustGET[respM.UserListResponse](h.Echo, "/api/v1/users?emails=manjunpeng@pingcap.com,gaozifeng@pingcap.com")
	assert.Equal(t, 2, users.Total)
}

func TestAutoCompleteUser(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()

	_, users := htest.MustGET[respM.UserListResponse](h.Echo, "/api/v1/users/autocomplete?query=g")
	assert.Equal(t, 2, users.Total)
}
