mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-05 01:39:13 +01:00
88171e0030
[FEAT] add Forgejo Git Service (squash) register a Forgejo factory If the Forgejo factory for the Forgejo service is not registered, newDownloader will fallback to a git service and not migrate issues etc. Refs: https://codeberg.org/forgejo/forgejo/issues/1678 (cherry picked from commit51938cd161
) [FEAT] add Forgero Git Service Signed-off-by: cassiozareck <cassiomilczareck@gmail.com> (cherry picked from commita878adfe62
) Adding description and Forgejo SVG (cherry picked from commit13738c0380
) Undo reordering and tmpl redirection (cherry picked from commit9ae51c46f4
) (cherry picked from commit70fffdc61d
) (cherry picked from commitc0ebfa9da3
) (cherry picked from commit9922c92787
) (cherry picked from commit00c0effbc7
) (cherry picked from commite4c9525b13
) (cherry picked from commit09d7b83211
) (cherry picked from commitbbcd5975c9
) (cherry picked from commit55c70a0e18
) (cherry picked from commit76596410c0
) (cherry picked from commit1308043931
) (cherry picked from commit919d6aedfe
) [FEAT] add Forgero Git Service (squash) more tests Previously only Gitea service was being tested under self-hosted migrations. Since Forgejo is also self-hosted and in fact use the same downloader/migrator we can add to this suite another test that will do the same, migrating the same repository under the same local instance but for the Forgejo service (represented by 9) Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/1709 Co-authored-by: zareck <cassiomilczareck@gmail.com> Co-committed-by: zareck <cassiomilczareck@gmail.com> (cherry picked from commit40a4b8f1a8
) (cherry picked from commit3198b4a642
) (cherry picked from commit4edda1f389
) (cherry picked from commit4d91b77d29
) (cherry picked from commitafe85c52e3
) (cherry picked from commit5ea7df79ad
) (cherry picked from commita667182542
) (cherry picked from commita9bebb1e71
) (cherry picked from commit4831a89e46
) (cherry picked from commite02a74651f
) (cherry picked from commit05dcef59aa
) (cherry picked from commitc8bac187f9
) (cherry picked from commitc87903a0cc
)
123 lines
4.1 KiB
Go
123 lines
4.1 KiB
Go
// Copyright 2021 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package integration
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
auth_model "code.gitea.io/gitea/models/auth"
|
|
"code.gitea.io/gitea/models/db"
|
|
issues_model "code.gitea.io/gitea/models/issues"
|
|
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"
|
|
"code.gitea.io/gitea/services/repository"
|
|
|
|
"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 TestMigrate(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)
|
|
|
|
for _, s := range []struct {
|
|
svc structs.GitServiceType
|
|
}{
|
|
{svc: structs.GiteaService},
|
|
{svc: structs.ForgejoService},
|
|
} {
|
|
// 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", s.svc)
|
|
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", s.svc),
|
|
"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
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: migratedRepoName})
|
|
|
|
// Step 7: delete the repository, so we can test with other services
|
|
err := repository.DeleteRepository(context.Background(), repoOwner, repo, false)
|
|
assert.NoError(t, err)
|
|
}
|
|
})
|
|
}
|
|
|
|
func Test_UpdateCommentsMigrationsByType(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
err := issues_model.UpdateCommentsMigrationsByType(db.DefaultContext, structs.GithubService, "1", 1)
|
|
assert.NoError(t, err)
|
|
}
|