[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>
This commit is contained in:
zareck 2023-11-01 11:46:17 +00:00 committed by Earl Warren
parent ac4f727f63
commit 40a4b8f1a8

View file

@ -4,6 +4,7 @@
package integration package integration
import ( import (
"context"
"fmt" "fmt"
"net/http" "net/http"
"net/url" "net/url"
@ -18,6 +19,7 @@ import (
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/services/migrations" "code.gitea.io/gitea/services/migrations"
"code.gitea.io/gitea/services/repository"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@ -49,7 +51,7 @@ func TestMigrateLocalPath(t *testing.T) {
setting.ImportLocalPaths = old setting.ImportLocalPaths = old
} }
func TestMigrateGiteaForm(t *testing.T) { func TestMigrate(t *testing.T) {
onGiteaRun(t, func(t *testing.T, u *url.URL) { onGiteaRun(t, func(t *testing.T, u *url.URL) {
AllowLocalNetworks := setting.Migrations.AllowLocalNetworks AllowLocalNetworks := setting.Migrations.AllowLocalNetworks
setting.Migrations.AllowLocalNetworks = true setting.Migrations.AllowLocalNetworks = true
@ -69,33 +71,44 @@ func TestMigrateGiteaForm(t *testing.T) {
session := loginUser(t, ownerName) session := loginUser(t, ownerName)
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository, auth_model.AccessTokenScopeReadMisc) token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository, auth_model.AccessTokenScopeReadMisc)
// Step 0: verify the repo is available for _, s := range []struct {
req := NewRequestf(t, "GET", fmt.Sprintf("/%s/%s", ownerName, repoName)) svc structs.GitServiceType
_ = session.MakeRequest(t, req, http.StatusOK) }{
// Step 1: get the Gitea migration form {svc: structs.GiteaService},
req = NewRequestf(t, "GET", "/repo/migrate/?service_type=%d", structs.GiteaService) {svc: structs.ForgejoService},
resp := session.MakeRequest(t, req, http.StatusOK) } {
// Step 2: load the form // Step 0: verify the repo is available
htmlDoc := NewHTMLParser(t, resp.Body) req := NewRequestf(t, "GET", fmt.Sprintf("/%s/%s", ownerName, repoName))
link, exists := htmlDoc.doc.Find(`form.ui.form[action^="/repo/migrate"]`).Attr("action") _ = session.MakeRequest(t, req, http.StatusOK)
assert.True(t, exists, "The template has changed") // Step 1: get the Gitea migration form
// Step 4: submit the migration to only migrate issues req = NewRequestf(t, "GET", "/repo/migrate/?service_type=%d", s.svc)
migratedRepoName := "otherrepo" resp := session.MakeRequest(t, req, http.StatusOK)
req = NewRequestWithValues(t, "POST", link, map[string]string{ // Step 2: load the form
"_csrf": htmlDoc.GetCSRF(), htmlDoc := NewHTMLParser(t, resp.Body)
"service": fmt.Sprintf("%d", structs.GiteaService), link, exists := htmlDoc.doc.Find(`form.ui.form[action^="/repo/migrate"]`).Attr("action")
"clone_addr": fmt.Sprintf("%s%s/%s", u, ownerName, repoName), assert.True(t, exists, "The template has changed")
"auth_token": token, // Step 4: submit the migration to only migrate issues
"issues": "on", migratedRepoName := "otherrepo"
"repo_name": migratedRepoName, req = NewRequestWithValues(t, "POST", link, map[string]string{
"description": "", "_csrf": htmlDoc.GetCSRF(),
"uid": fmt.Sprintf("%d", repoOwner.ID), "service": fmt.Sprintf("%d", s.svc),
}) "clone_addr": fmt.Sprintf("%s%s/%s", u, ownerName, repoName),
resp = session.MakeRequest(t, req, http.StatusSeeOther) "auth_token": token,
// Step 5: a redirection displays the migrated repository "issues": "on",
loc := resp.Header().Get("Location") "repo_name": migratedRepoName,
assert.EqualValues(t, fmt.Sprintf("/%s/%s", ownerName, migratedRepoName), loc) "description": "",
// Step 6: check the repo was created "uid": fmt.Sprintf("%d", repoOwner.ID),
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: migratedRepoName}) })
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)
}
}) })
} }