2024-02-18 19:39:41 -05:00
|
|
|
package database
|
2016-04-22 17:28:08 -05:00
|
|
|
|
|
|
|
|
import (
|
2026-01-20 01:06:38 +05:30
|
|
|
"os"
|
|
|
|
|
"path/filepath"
|
2016-07-09 07:22:28 +02:00
|
|
|
"testing"
|
2016-04-22 17:28:08 -05:00
|
|
|
|
2020-04-19 04:24:08 +08:00
|
|
|
"github.com/stretchr/testify/assert"
|
2026-01-20 01:06:38 +05:30
|
|
|
"github.com/stretchr/testify/require"
|
2017-03-31 18:28:08 -04:00
|
|
|
|
2026-01-22 07:17:34 -05:00
|
|
|
"gogs.io/gogs/internal/conf"
|
2019-10-24 01:51:46 -07:00
|
|
|
"gogs.io/gogs/internal/markup"
|
2026-01-20 01:06:38 +05:30
|
|
|
"gogs.io/gogs/internal/osutil"
|
2016-04-22 17:28:08 -05:00
|
|
|
)
|
|
|
|
|
|
2020-04-19 04:24:08 +08:00
|
|
|
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
|
|
|
|
|
|
2020-09-29 23:07:16 +08:00
|
|
|
metas := repo.ComposeMetas()
|
|
|
|
|
assert.Equal(t, metas["repoLink"], repo.Link())
|
|
|
|
|
|
2025-04-14 18:00:07 -04:00
|
|
|
// Should not have format and style if no external tracker is configured
|
2020-09-29 23:07:16 +08:00
|
|
|
_, ok := metas["format"]
|
|
|
|
|
assert.False(t, ok)
|
|
|
|
|
_, ok = metas["style"]
|
|
|
|
|
assert.False(t, ok)
|
2020-04-19 04:24:08 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("an external issue tracker is configured", func(t *testing.T) {
|
2020-09-29 23:07:16 +08:00
|
|
|
repo.ExternalMetas = nil
|
2020-04-19 04:24:08 +08:00
|
|
|
repo.EnableExternalTracker = true
|
|
|
|
|
|
|
|
|
|
// Default to numeric issue style
|
2022-01-13 11:27:16 +08:00
|
|
|
assert.Equal(t, markup.IssueNameStyleNumeric, repo.ComposeMetas()["style"])
|
2020-04-19 04:24:08 +08:00
|
|
|
repo.ExternalMetas = nil
|
|
|
|
|
|
2022-01-13 11:27:16 +08:00
|
|
|
repo.ExternalTrackerStyle = markup.IssueNameStyleNumeric
|
|
|
|
|
assert.Equal(t, markup.IssueNameStyleNumeric, repo.ComposeMetas()["style"])
|
2020-04-19 04:24:08 +08:00
|
|
|
repo.ExternalMetas = nil
|
|
|
|
|
|
2022-01-13 11:27:16 +08:00
|
|
|
repo.ExternalTrackerStyle = markup.IssueNameStyleAlphanumeric
|
|
|
|
|
assert.Equal(t, markup.IssueNameStyleAlphanumeric, repo.ComposeMetas()["style"])
|
2020-04-19 04:24:08 +08:00
|
|
|
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"])
|
2016-04-22 17:28:08 -05:00
|
|
|
})
|
|
|
|
|
}
|
2026-01-20 01:06:38 +05:30
|
|
|
|
|
|
|
|
func Test_CreateRepository_PreventDeletion(t *testing.T) {
|
2026-01-22 07:17:34 -05:00
|
|
|
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) }()
|
|
|
|
|
|
2026-01-20 01:06:38 +05:30
|
|
|
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")
|
2026-01-19 14:54:13 -05:00
|
|
|
require.NoError(t, os.WriteFile(canary, []byte("should survive"), 0o644))
|
2026-01-20 01:06:38 +05:30
|
|
|
|
2026-01-22 07:17:34 -05:00
|
|
|
_, err = CreateRepository(owner, owner, opts)
|
2026-01-20 01:06:38 +05:30
|
|
|
require.Error(t, err)
|
|
|
|
|
assert.Contains(t, err.Error(), "repository directory already exists")
|
2026-01-21 22:22:07 -05:00
|
|
|
assert.True(t, osutil.Exist(canary))
|
2026-01-20 01:06:38 +05:30
|
|
|
}
|