diff --git a/tests/integration/linkaccount_test.go b/tests/integration/linkaccount_test.go
new file mode 100644
index 0000000000..e7b9f9c261
--- /dev/null
+++ b/tests/integration/linkaccount_test.go
@@ -0,0 +1,63 @@
+// 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)
+	}
+}