Files
Gogs/internal/database/repo_test.go

86 lines
2.4 KiB
Go

package database
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gogs.io/gogs/internal/conf"
"gogs.io/gogs/internal/markup"
"gogs.io/gogs/internal/osutil"
)
func TestRepository_ComposeMetas(t *testing.T) {
repo := &Repository{
Name: "testrepo",
Owner: &User{
Name: "testuser",
},
ExternalTrackerFormat: "https://someurl.com/{user}/{repo}/{issue}",
}
t.Run("no external tracker is configured", func(t *testing.T) {
repo.EnableExternalTracker = false
metas := repo.ComposeMetas()
assert.Equal(t, metas["repoLink"], repo.Link())
// Should not have format and style if no external tracker is configured
_, ok := metas["format"]
assert.False(t, ok)
_, ok = metas["style"]
assert.False(t, ok)
})
t.Run("an external issue tracker is configured", func(t *testing.T) {
repo.ExternalMetas = nil
repo.EnableExternalTracker = true
// Default to numeric issue style
assert.Equal(t, markup.IssueNameStyleNumeric, repo.ComposeMetas()["style"])
repo.ExternalMetas = nil
repo.ExternalTrackerStyle = markup.IssueNameStyleNumeric
assert.Equal(t, markup.IssueNameStyleNumeric, repo.ComposeMetas()["style"])
repo.ExternalMetas = nil
repo.ExternalTrackerStyle = markup.IssueNameStyleAlphanumeric
assert.Equal(t, markup.IssueNameStyleAlphanumeric, repo.ComposeMetas()["style"])
repo.ExternalMetas = nil
metas := repo.ComposeMetas()
assert.Equal(t, "testuser", metas["user"])
assert.Equal(t, "testrepo", metas["repo"])
assert.Equal(t, "https://someurl.com/{user}/{repo}/{issue}", metas["format"])
})
}
func Test_CreateRepository_PreventDeletion(t *testing.T) {
tempRepositoryRoot := filepath.Join(os.TempDir(), "createRepository-tempRepositoryRoot")
conf.SetMockRepository(
t,
conf.RepositoryOpts{
Root: tempRepositoryRoot,
},
)
err := os.RemoveAll(tempRepositoryRoot)
require.NoError(t, err)
defer func() { _ = os.RemoveAll(tempRepositoryRoot) }()
owner := &User{Name: "testuser"}
opts := CreateRepoOptionsLegacy{Name: "safety-test"}
repoPath := RepoPath(owner.Name, opts.Name)
require.NoError(t, os.MkdirAll(repoPath, os.ModePerm))
canary := filepath.Join(repoPath, "canary.txt")
require.NoError(t, os.WriteFile(canary, []byte("should survive"), 0o644))
_, err = CreateRepository(owner, owner, opts)
require.Error(t, err)
assert.Contains(t, err.Error(), "repository directory already exists")
assert.True(t, osutil.Exist(canary))
}