mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2026-07-24 18:38:42 +00:00
While working on #11356, I noticed https://codeberg.org/forgejo/forgejo/pulls/9906#issuecomment-10826066 which could have benefited from a `forgery.CreateProject` helper. Since this helper wasn't available, the PR had to: - adjust the global `project.yml` fixture - fix the unrelated `models/project/project_test.go`, because of the fixture update So 2/4 changed files in the PR were due to the usage of global fixtures. This PR attempts at fixing this. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12796 Reviewed-by: Gusted <gusted@noreply.codeberg.org> Reviewed-by: Antonin Delpeuch <wetneb@noreply.codeberg.org>
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
// Copyright 2026 The Forgejo Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package forgery
|
|
|
|
import (
|
|
"testing"
|
|
|
|
org_model "forgejo.org/models/organization"
|
|
project_model "forgejo.org/models/project"
|
|
repo_model "forgejo.org/models/repo"
|
|
user_model "forgejo.org/models/user"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type CreateProjectOptions struct {
|
|
TemplateType project_model.TemplateType
|
|
CardType project_model.CardType
|
|
}
|
|
|
|
func CreateProject[T org_model.Organization | user_model.User | repo_model.Repository](t testing.TB, owner *T, opts *CreateProjectOptions) *project_model.Project {
|
|
t.Helper()
|
|
|
|
if opts == nil {
|
|
opts = &CreateProjectOptions{}
|
|
}
|
|
|
|
p := &project_model.Project{
|
|
Title: t.Name(),
|
|
Description: "Test project",
|
|
TemplateType: opts.TemplateType,
|
|
CardType: opts.CardType,
|
|
}
|
|
switch o := any(owner).(type) {
|
|
case *org_model.Organization:
|
|
p.Owner = o.AsUser()
|
|
p.OwnerID = o.ID
|
|
p.Type = project_model.TypeOrganization
|
|
case *user_model.User:
|
|
p.Owner = o
|
|
p.OwnerID = o.ID
|
|
p.Type = project_model.TypeIndividual
|
|
case *repo_model.Repository:
|
|
p.Repo = o
|
|
p.RepoID = o.ID
|
|
p.Type = project_model.TypeRepository
|
|
default:
|
|
t.Fatalf("unexpected owner type %T", o)
|
|
}
|
|
err := project_model.NewProject(t.Context(), p)
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() {
|
|
_ = project_model.DeleteProjectByID(t.Context(), p.ID)
|
|
})
|
|
return p
|
|
}
|