// Copyright 2023 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package integration

import (
	"net/http"
	"testing"

	gitea_context "code.gitea.io/gitea/modules/context"
	"code.gitea.io/gitea/tests"

	"github.com/markbates/goth"
	"github.com/stretchr/testify/assert"
)

func TestLinkAccountChoose(t *testing.T) {
	defer tests.PrepareTestEnv(t)()
	username := "linkaccountuser"
	email := "linkaccountuser@example.com"
	password := "linkaccountuser"
	defer createUser(t, username, email, password)()

	defer func() {
		testMiddlewareHook = nil
	}()

	for _, testCase := range []struct {
		gothUser  goth.User
		signupTab string
		signinTab string
	}{
		{
			gothUser:  goth.User{},
			signupTab: "item active",
			signinTab: "item ",
		},
		{
			gothUser: goth.User{
				Email: email,
			},
			signupTab: "item ",
			signinTab: "item active",
		},
	} {
		testMiddlewareHook = func(ctx *gitea_context.Context) {
			ctx.Session.Set("linkAccountGothUser", testCase.gothUser)
		}

		req := NewRequest(t, "GET", "/user/link_account")
		resp := MakeRequest(t, req, http.StatusOK)
		assert.Equal(t, resp.Code, http.StatusOK, resp.Body)
		doc := NewHTMLParser(t, resp.Body)

		class, exists := doc.Find(`.new-menu-inner .item[data-tab="auth-link-signup-tab"]`).Attr("class")
		assert.True(t, exists, resp.Body)
		assert.Equal(t, testCase.signupTab, class)

		class, exists = doc.Find(`.new-menu-inner .item[data-tab="auth-link-signin-tab"]`).Attr("class")
		assert.True(t, exists)
		assert.Equal(t, testCase.signinTab, class)
	}
}