code.gitea.io/gitea@v1.22.3/tests/integration/migrate_test.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package integration 5 6 import ( 7 "fmt" 8 "net/http" 9 "net/url" 10 "os" 11 "path/filepath" 12 "testing" 13 14 auth_model "code.gitea.io/gitea/models/auth" 15 "code.gitea.io/gitea/models/db" 16 issues_model "code.gitea.io/gitea/models/issues" 17 repo_model "code.gitea.io/gitea/models/repo" 18 "code.gitea.io/gitea/models/unittest" 19 user_model "code.gitea.io/gitea/models/user" 20 "code.gitea.io/gitea/modules/setting" 21 "code.gitea.io/gitea/modules/structs" 22 "code.gitea.io/gitea/services/migrations" 23 24 "github.com/stretchr/testify/assert" 25 ) 26 27 func TestMigrateLocalPath(t *testing.T) { 28 assert.NoError(t, unittest.PrepareTestDatabase()) 29 30 adminUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"}) 31 32 old := setting.ImportLocalPaths 33 setting.ImportLocalPaths = true 34 35 basePath := t.TempDir() 36 37 lowercasePath := filepath.Join(basePath, "lowercase") 38 err := os.Mkdir(lowercasePath, 0o700) 39 assert.NoError(t, err) 40 41 err = migrations.IsMigrateURLAllowed(lowercasePath, adminUser) 42 assert.NoError(t, err, "case lowercase path") 43 44 mixedcasePath := filepath.Join(basePath, "mIxeDCaSe") 45 err = os.Mkdir(mixedcasePath, 0o700) 46 assert.NoError(t, err) 47 48 err = migrations.IsMigrateURLAllowed(mixedcasePath, adminUser) 49 assert.NoError(t, err, "case mixedcase path") 50 51 setting.ImportLocalPaths = old 52 } 53 54 func TestMigrateGiteaForm(t *testing.T) { 55 onGiteaRun(t, func(t *testing.T, u *url.URL) { 56 AllowLocalNetworks := setting.Migrations.AllowLocalNetworks 57 setting.Migrations.AllowLocalNetworks = true 58 AppVer := setting.AppVer 59 // Gitea SDK (go-sdk) need to parse the AppVer from server response, so we must set it to a valid version string. 60 setting.AppVer = "1.16.0" 61 defer func() { 62 setting.Migrations.AllowLocalNetworks = AllowLocalNetworks 63 setting.AppVer = AppVer 64 migrations.Init() 65 }() 66 assert.NoError(t, migrations.Init()) 67 68 ownerName := "user2" 69 repoName := "repo1" 70 repoOwner := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: ownerName}) 71 session := loginUser(t, ownerName) 72 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository, auth_model.AccessTokenScopeReadMisc) 73 74 // Step 0: verify the repo is available 75 req := NewRequestf(t, "GET", fmt.Sprintf("/%s/%s", ownerName, repoName)) 76 _ = session.MakeRequest(t, req, http.StatusOK) 77 // Step 1: get the Gitea migration form 78 req = NewRequestf(t, "GET", "/repo/migrate/?service_type=%d", structs.GiteaService) 79 resp := session.MakeRequest(t, req, http.StatusOK) 80 // Step 2: load the form 81 htmlDoc := NewHTMLParser(t, resp.Body) 82 link, exists := htmlDoc.doc.Find(`form.ui.form[action^="/repo/migrate"]`).Attr("action") 83 assert.True(t, exists, "The template has changed") 84 // Step 4: submit the migration to only migrate issues 85 migratedRepoName := "otherrepo" 86 req = NewRequestWithValues(t, "POST", link, map[string]string{ 87 "_csrf": htmlDoc.GetCSRF(), 88 "service": fmt.Sprintf("%d", structs.GiteaService), 89 "clone_addr": fmt.Sprintf("%s%s/%s", u, ownerName, repoName), 90 "auth_token": token, 91 "issues": "on", 92 "repo_name": migratedRepoName, 93 "description": "", 94 "uid": fmt.Sprintf("%d", repoOwner.ID), 95 }) 96 resp = session.MakeRequest(t, req, http.StatusSeeOther) 97 // Step 5: a redirection displays the migrated repository 98 loc := resp.Header().Get("Location") 99 assert.EqualValues(t, fmt.Sprintf("/%s/%s", ownerName, migratedRepoName), loc) 100 // Step 6: check the repo was created 101 unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: migratedRepoName}) 102 }) 103 } 104 105 func Test_UpdateCommentsMigrationsByType(t *testing.T) { 106 assert.NoError(t, unittest.PrepareTestDatabase()) 107 108 err := issues_model.UpdateCommentsMigrationsByType(db.DefaultContext, structs.GithubService, "1", 1) 109 assert.NoError(t, err) 110 }