mirror of
https://gitea.com/gitea/tea.git
synced 2026-09-10 07:26:33 -04:00
Add a --ssh-host option to tea login add and pass it through token and OAuth login creation. Expose the same SSH host setting in the interactive login optional settings so users can configure host or host:port when the SSH endpoint differs from the web URL. Update the generated CLI docs and integration helper for the new login creation parameter. Fixes #1032 Signed-off-by: GyeongHo Kim <gyeongho.dev@proton.me>
107 lines
2.9 KiB
Go
107 lines
2.9 KiB
Go
// Copyright 2026 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package integration
|
|
|
|
import (
|
|
stdctx "context"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
gitea "gitea.dev/sdk"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"gitea.dev/tea/modules/config"
|
|
"gitea.dev/tea/modules/task"
|
|
)
|
|
|
|
var (
|
|
integrationGiteaURL string
|
|
integrationUsername string
|
|
integrationPassword string
|
|
integrationToken string
|
|
integrationTokenID int64
|
|
integrationSetupErr error
|
|
integrationClient *gitea.Client
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
integrationGiteaURL = os.Getenv("GITEA_TEA_TEST_URL")
|
|
integrationUsername = os.Getenv("GITEA_TEA_TEST_USERNAME")
|
|
integrationPassword = os.Getenv("GITEA_TEA_TEST_PASSWORD")
|
|
|
|
if integrationGiteaURL != "" {
|
|
if integrationUsername == "" || integrationPassword == "" {
|
|
integrationSetupErr = fmt.Errorf("GITEA_TEA_TEST_USERNAME and GITEA_TEA_TEST_PASSWORD are required for integration tests")
|
|
} else {
|
|
integrationClient, integrationSetupErr = gitea.NewClient(
|
|
integrationGiteaURL,
|
|
gitea.SetBasicAuth(integrationUsername, integrationPassword),
|
|
gitea.SetGiteaVersion(""),
|
|
)
|
|
if integrationSetupErr == nil {
|
|
tokenName := fmt.Sprintf("tea-integration-%d", time.Now().UnixNano())
|
|
var token *gitea.AccessToken
|
|
token, _, integrationSetupErr = integrationClient.Users.CreateAccessToken(stdctx.Background(), gitea.CreateAccessTokenOption{
|
|
Name: tokenName,
|
|
Scopes: []gitea.AccessTokenScope{gitea.AccessTokenScopeAll},
|
|
})
|
|
if integrationSetupErr == nil {
|
|
integrationToken = token.Token
|
|
integrationTokenID = token.ID
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
exitCode := m.Run()
|
|
|
|
if integrationClient != nil && integrationTokenID != 0 {
|
|
if _, err := integrationClient.Users.DeleteAccessToken(stdctx.Background(), integrationTokenID); err != nil {
|
|
fmt.Fprintf(os.Stderr, "failed to delete integration token %d: %v\n", integrationTokenID, err)
|
|
if exitCode == 0 {
|
|
exitCode = 1
|
|
}
|
|
}
|
|
}
|
|
|
|
os.Exit(exitCode)
|
|
}
|
|
|
|
func useTempConfigPath(t *testing.T) string {
|
|
t.Helper()
|
|
|
|
configPath := filepath.Join(t.TempDir(), "config.yml")
|
|
config.SetConfigPathForTesting(configPath)
|
|
config.SetConfigForTesting(config.LocalConfig{})
|
|
t.Cleanup(func() {
|
|
config.SetConfigForTesting(config.LocalConfig{})
|
|
config.SetConfigPathForTesting("")
|
|
})
|
|
|
|
return configPath
|
|
}
|
|
|
|
func createIntegrationLogin(t *testing.T) *config.Login {
|
|
t.Helper()
|
|
|
|
_ = useTempConfigPath(t)
|
|
if integrationGiteaURL == "" {
|
|
t.Skip("GITEA_TEA_TEST_URL is not set, skipping integration test")
|
|
}
|
|
require.NoError(t, integrationSetupErr)
|
|
|
|
require.NotEmpty(t, integrationToken, "integration token setup failed")
|
|
|
|
require.NoError(t, task.CreateLogin(t.Context(), "integration", integrationToken, "", "", "", "", "", integrationGiteaURL, "", "", "", true, false, false, false))
|
|
|
|
login, err := config.GetLoginByName("integration")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, login)
|
|
|
|
return login
|
|
}
|