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  }