- // Copyright 2021 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package integration
-
- import (
- "fmt"
- "net/http"
- "net/url"
- "os"
- "path/filepath"
- "testing"
-
- auth_model "code.gitea.io/gitea/models/auth"
- repo_model "code.gitea.io/gitea/models/repo"
- "code.gitea.io/gitea/models/unittest"
- user_model "code.gitea.io/gitea/models/user"
- "code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/structs"
- "code.gitea.io/gitea/services/migrations"
-
- "github.com/stretchr/testify/assert"
- )
-
- func TestMigrateLocalPath(t *testing.T) {
- assert.NoError(t, unittest.PrepareTestDatabase())
-
- adminUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
-
- old := setting.ImportLocalPaths
- setting.ImportLocalPaths = true
-
- basePath := t.TempDir()
-
- lowercasePath := filepath.Join(basePath, "lowercase")
- err := os.Mkdir(lowercasePath, 0o700)
- assert.NoError(t, err)
-
- err = migrations.IsMigrateURLAllowed(lowercasePath, adminUser)
- assert.NoError(t, err, "case lowercase path")
-
- mixedcasePath := filepath.Join(basePath, "mIxeDCaSe")
- err = os.Mkdir(mixedcasePath, 0o700)
- assert.NoError(t, err)
-
- err = migrations.IsMigrateURLAllowed(mixedcasePath, adminUser)
- assert.NoError(t, err, "case mixedcase path")
-
- setting.ImportLocalPaths = old
- }
-
- func TestMigrateGiteaForm(t *testing.T) {
- onGiteaRun(t, func(t *testing.T, u *url.URL) {
- AllowLocalNetworks := setting.Migrations.AllowLocalNetworks
- setting.Migrations.AllowLocalNetworks = true
- AppVer := setting.AppVer
- // Gitea SDK (go-sdk) need to parse the AppVer from server response, so we must set it to a valid version string.
- setting.AppVer = "1.16.0"
- defer func() {
- setting.Migrations.AllowLocalNetworks = AllowLocalNetworks
- setting.AppVer = AppVer
- migrations.Init()
- }()
- assert.NoError(t, migrations.Init())
-
- ownerName := "user2"
- repoName := "repo1"
- repoOwner := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: ownerName})
- session := loginUser(t, ownerName)
- token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository, auth_model.AccessTokenScopeReadMisc)
-
- // Step 0: verify the repo is available
- req := NewRequestf(t, "GET", fmt.Sprintf("/%s/%s", ownerName, repoName))
- _ = session.MakeRequest(t, req, http.StatusOK)
- // Step 1: get the Gitea migration form
- req = NewRequestf(t, "GET", "/repo/migrate/?service_type=%d", structs.GiteaService)
- resp := session.MakeRequest(t, req, http.StatusOK)
- // Step 2: load the form
- htmlDoc := NewHTMLParser(t, resp.Body)
- link, exists := htmlDoc.doc.Find(`form.ui.form[action^="/repo/migrate"]`).Attr("action")
- assert.True(t, exists, "The template has changed")
- // Step 4: submit the migration to only migrate issues
- migratedRepoName := "otherrepo"
- req = NewRequestWithValues(t, "POST", link, map[string]string{
- "_csrf": htmlDoc.GetCSRF(),
- "service": fmt.Sprintf("%d", structs.GiteaService),
- "clone_addr": fmt.Sprintf("%s%s/%s", u, ownerName, repoName),
- "auth_token": token,
- "issues": "on",
- "repo_name": migratedRepoName,
- "description": "",
- "uid": fmt.Sprintf("%d", repoOwner.ID),
- })
- resp = session.MakeRequest(t, req, http.StatusSeeOther)
- // Step 5: a redirection displays the migrated repository
- loc := resp.Header().Get("Location")
- assert.EqualValues(t, fmt.Sprintf("/%s/%s", ownerName, migratedRepoName), loc)
- // Step 6: check the repo was created
- unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: migratedRepoName})
- })
- }
|