gitforge/tests/forgery/project.go
oliverpool 8c3c3ca5db refactor(forgery): CreateProject helper to reduce dependency on global fixture when testing (#12796)
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>
2026-05-31 16:46:54 +02:00

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
}