Skip to content

Commit 2921d3c

Browse files
realaravinthLoïc Dachary
and
Loïc Dachary
authored
Add integration tests for the Gitea migration form (#20121)
* tests: integration tests for the Gitea migration form * use a mix of ` and " instead of backslash #20121 (comment) Co-authored-by: Loïc Dachary <[email protected]>
1 parent ba0f927 commit 2921d3c

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

integrations/migrate_test.go

+56
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@
55
package integrations
66

77
import (
8+
"fmt"
9+
"net/http"
10+
"net/url"
811
"os"
912
"testing"
1013

14+
repo_model "code.gitea.io/gitea/models/repo"
1115
"code.gitea.io/gitea/models/unittest"
1216
user_model "code.gitea.io/gitea/models/user"
1317
"code.gitea.io/gitea/modules/setting"
18+
"code.gitea.io/gitea/modules/structs"
1419
"code.gitea.io/gitea/services/migrations"
1520

1621
"github.com/stretchr/testify/assert"
@@ -40,3 +45,54 @@ func TestMigrateLocalPath(t *testing.T) {
4045

4146
setting.ImportLocalPaths = old
4247
}
48+
49+
func TestMigrateGiteaForm(t *testing.T) {
50+
onGiteaRun(t, func(t *testing.T, u *url.URL) {
51+
AllowLocalNetworks := setting.Migrations.AllowLocalNetworks
52+
setting.Migrations.AllowLocalNetworks = true
53+
AppVer := setting.AppVer
54+
// Gitea SDK (go-sdk) need to parse the AppVer from server response, so we must set it to a valid version string.
55+
setting.AppVer = "1.16.0"
56+
defer func() {
57+
setting.Migrations.AllowLocalNetworks = AllowLocalNetworks
58+
setting.AppVer = AppVer
59+
migrations.Init()
60+
}()
61+
assert.NoError(t, migrations.Init())
62+
63+
ownerName := "user2"
64+
repoName := "repo1"
65+
repoOwner := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: ownerName}).(*user_model.User)
66+
session := loginUser(t, ownerName)
67+
token := getTokenForLoggedInUser(t, session)
68+
69+
// Step 0: verify the repo is available
70+
req := NewRequestf(t, "GET", fmt.Sprintf("/%s/%s", ownerName, repoName))
71+
_ = session.MakeRequest(t, req, http.StatusOK)
72+
// Step 1: get the Gitea migration form
73+
req = NewRequestf(t, "GET", "/repo/migrate/?service_type=%d", structs.GiteaService)
74+
resp := session.MakeRequest(t, req, http.StatusOK)
75+
// Step 2: load the form
76+
htmlDoc := NewHTMLParser(t, resp.Body)
77+
link, exists := htmlDoc.doc.Find(`form.ui.form[action^="/repo/migrate"]`).Attr("action")
78+
assert.True(t, exists, "The template has changed")
79+
// Step 4: submit the migration to only migrate issues
80+
migratedRepoName := "otherrepo"
81+
req = NewRequestWithValues(t, "POST", link, map[string]string{
82+
"_csrf": htmlDoc.GetCSRF(),
83+
"service": fmt.Sprintf("%d", structs.GiteaService),
84+
"clone_addr": fmt.Sprintf("%s%s/%s", u, ownerName, repoName),
85+
"auth_token": token,
86+
"issues": "on",
87+
"repo_name": migratedRepoName,
88+
"description": "",
89+
"uid": fmt.Sprintf("%d", repoOwner.ID),
90+
})
91+
resp = session.MakeRequest(t, req, http.StatusSeeOther)
92+
// Step 5: a redirection displays the migrated repository
93+
loc := resp.Header().Get("Location")
94+
assert.EqualValues(t, fmt.Sprintf("/%s/%s", ownerName, migratedRepoName), loc)
95+
// Step 6: check the repo was created
96+
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: migratedRepoName})
97+
})
98+
}

0 commit comments

Comments
 (0)