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)) }