Skip to content

Commit 09f0dbc

Browse files
committed
new fixture generation
1 parent 81ca323 commit 09f0dbc

File tree

12 files changed

+606
-29
lines changed

12 files changed

+606
-29
lines changed

contrib/dev/dev.go

Lines changed: 76 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ package main
55

66
import (
77
"context"
8+
"fmt"
89
"io/fs"
910
"net/http"
1011
"os"
1112
"path"
1213
"path/filepath"
14+
"strings"
1315

1416
_ "code.gitea.io/gitea/models"
1517
"code.gitea.io/gitea/models/db"
@@ -19,6 +21,7 @@ import (
1921
"code.gitea.io/gitea/modules/setting"
2022
"code.gitea.io/gitea/modules/util"
2123
"code.gitea.io/gitea/routers"
24+
"code.gitea.io/gitea/routers/common"
2225
"gopkg.in/yaml.v3"
2326
)
2427

@@ -50,15 +53,82 @@ func main() {
5053
<-graceful.GetManager().Done()
5154
log.Info("PID: %d Gitea Web Finished", os.Getpid())
5255
fixGitReops()
53-
err = unittest.DumpAllFixtures()
56+
57+
ctxDb, cancel := context.WithCancel(context.Background())
58+
err = common.InitDBEngine(ctxDb)
59+
if err != nil {
60+
log.Fatal("common.InitDBEngine: %v", err)
61+
}
62+
err = unittest.DumpAllFixtures(filepath.Join(pwd, "models", "fixtures"))
63+
cancel()
64+
5465
if err != nil {
5566
log.Fatal("unittest.DumpAllFixtures: %v", err)
5667
}
5768
removeNotNeededFixtures(pwd)
69+
recheckFixtures(pwd)
5870

5971
log.GetManager().Close()
6072
}
6173

74+
func buildInterfacesSlice(records interface{}) ([]interface{}, error) {
75+
switch records := records.(type) {
76+
case []interface{}:
77+
return records, nil
78+
case map[string]interface{}:
79+
var result []interface{}
80+
for _, record := range records {
81+
result = append(result, record)
82+
}
83+
return result, nil
84+
}
85+
86+
return nil, fmt.Errorf("testfixtures: fixture is not a slice or map")
87+
}
88+
89+
func recheckFixtures(pathToGiteaRoot string) {
90+
err := filepath.Walk(path.Join(pathToGiteaRoot, "models", "fixtures"), func(pth string, info fs.FileInfo, _ error) error {
91+
if info.IsDir() {
92+
return nil
93+
}
94+
95+
fileName := path.Base(pth)
96+
if !strings.HasSuffix(fileName, ".yml") {
97+
return nil
98+
}
99+
100+
log.Info("recheck %s", fileName)
101+
102+
content, err := os.ReadFile(pth)
103+
if err != nil {
104+
return err
105+
}
106+
107+
var records interface{}
108+
if err := yaml.Unmarshal(content, &records); err != nil {
109+
return fmt.Errorf("could not unmarshal YAML: %w", err)
110+
}
111+
112+
result, err := buildInterfacesSlice(records)
113+
if err != nil {
114+
return err
115+
}
116+
117+
for _, record := range result {
118+
_, ok := record.(map[string]interface{})
119+
if !ok {
120+
return fmt.Errorf("testfixtures: could not cast record: not a map[interface{}]interface{}")
121+
}
122+
}
123+
124+
return nil
125+
})
126+
127+
if err != nil {
128+
log.Fatal("recheckFixtures: %v", err)
129+
}
130+
}
131+
62132
func listSubDir(dirname string, onDir func(path, name string) error) error {
63133
fileInfos, err := os.ReadDir(dirname)
64134
if err != nil {
@@ -228,8 +298,7 @@ func initDev(pathToGiteaRoot string) {
228298

229299
fixturesDir := filepath.Join(pathToGiteaRoot, "models", "fixtures")
230300
if err := unittest.InitFixtures(unittest.FixturesOptions{
231-
Dir: fixturesDir,
232-
InitDumper: true,
301+
Dir: fixturesDir,
233302
}); err != nil {
234303
log.Fatal("CreateTestEngine: %+v", err)
235304
}
@@ -271,6 +340,10 @@ func removeNotNeededFixtures(pathToGiteaRoot string) {
271340
}
272341

273342
fileName := path.Base(pth)
343+
if !strings.HasSuffix(fileName, ".yml") {
344+
return nil
345+
}
346+
274347
if util.SliceContains(nootNeededFixtures, fileName) {
275348
return os.Remove(pth)
276349
}

models/db/engine.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,3 +299,24 @@ func SetLogSQL(ctx context.Context, on bool) {
299299
sess.Engine().ShowSQL(on)
300300
}
301301
}
302+
303+
func AllTablesForEach(hanle func(info *schemas.Table, bean any) error) error {
304+
for _, table := range tables {
305+
info, err := TableInfo(table)
306+
if err != nil {
307+
return err
308+
}
309+
310+
err = hanle(info, table)
311+
if err != nil {
312+
return err
313+
}
314+
}
315+
316+
return nil
317+
}
318+
319+
// FixtureDumper custom interface to generate a fixture file
320+
type FixtureDumper interface {
321+
FixtureDumper(dbCtx context.Context, fd io.Writer) error
322+
}

models/fixture_generation.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ func GetYamlFixturesAccess() (string, error) {
3535
}
3636

3737
for i, a := range accesses {
38-
fmt.Fprintf(&b, "- id: %d\n", i+1)
39-
fmt.Fprintf(&b, " mode: %d\n", a.Mode)
40-
fmt.Fprintf(&b, " repo_id: %d\n", a.RepoID)
38+
fmt.Fprintf(&b, "-\n")
39+
fmt.Fprintf(&b, " id: %d\n", i+1)
4140
fmt.Fprintf(&b, " user_id: %d\n", a.UserID)
41+
fmt.Fprintf(&b, " repo_id: %d\n", a.RepoID)
42+
fmt.Fprintf(&b, " mode: %d\n\n", a.Mode)
4243
}
4344

4445
return b.String(), nil

models/issues/pull.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,10 @@ func (pr *PullRequest) LoadRequestedReviewers(ctx context.Context) error {
320320
return err
321321
}
322322
for _, review := range reviews {
323+
if review.Type != ReviewTypeRequest {
324+
continue
325+
}
326+
323327
pr.RequestedReviewers = append(pr.RequestedReviewers, review.Reviewer)
324328
}
325329

models/issues/pull_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ func TestLoadRequestedReviewers(t *testing.T) {
8888
user1, err := user_model.GetUserByID(db.DefaultContext, 1)
8989
assert.NoError(t, err)
9090

91+
assert.NoError(t, pull.LoadRequestedReviewers(db.DefaultContext))
92+
assert.Len(t, pull.RequestedReviewers, 0)
93+
9194
comment, err := issues_model.AddReviewRequest(db.DefaultContext, issue, user1, &user_model.User{})
9295
assert.NoError(t, err)
9396
assert.NotNil(t, comment)

models/issues/review.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ func (r *Review) LoadReviewer(ctx context.Context) (err error) {
159159
return err
160160
}
161161
r.Reviewer, err = user_model.GetPossibleUserByID(ctx, r.ReviewerID)
162+
if user_model.IsErrUserNotExist(err) {
163+
r.Reviewer = user_model.NewGhostUser()
164+
return nil
165+
}
166+
162167
return err
163168
}
164169

models/issues/review_list.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ func (reviews ReviewList) LoadReviewers(ctx context.Context) error {
3333
}
3434
for _, review := range reviews {
3535
review.Reviewer = userMap[review.ReviewerID]
36+
if review.Reviewer == nil {
37+
review.Reviewer = user_model.NewGhostUser()
38+
}
3639
}
3740
return nil
3841
}

models/issues/review_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,19 @@ func TestGetReviewersByIssueID(t *testing.T) {
142142
Reviewer: user2,
143143
Type: issues_model.ReviewTypeReject,
144144
UpdatedUnix: 946684814,
145+
},
146+
&issues_model.Review{
147+
Reviewer: user_model.NewGhostUser(),
148+
Type: issues_model.ReviewTypeReject,
149+
UpdatedUnix: 946684815,
145150
})
146151

147152
allReviews, err := issues_model.GetReviewsByIssueID(issue.ID)
148153
assert.NoError(t, err)
149154
for _, review := range allReviews {
150155
assert.NoError(t, review.LoadReviewer(db.DefaultContext))
151156
}
152-
if assert.Len(t, allReviews, 3) {
157+
if assert.Len(t, allReviews, 4) {
153158
for i, review := range allReviews {
154159
assert.Equal(t, expectedReviews[i].Reviewer, review.Reviewer)
155160
assert.Equal(t, expectedReviews[i].Type, review.Type)
@@ -160,7 +165,7 @@ func TestGetReviewersByIssueID(t *testing.T) {
160165
allReviews, err = issues_model.GetReviewsByIssueID(issue.ID)
161166
assert.NoError(t, err)
162167
assert.NoError(t, allReviews.LoadReviewers(db.DefaultContext))
163-
if assert.Len(t, allReviews, 3) {
168+
if assert.Len(t, allReviews, 4) {
164169
for i, review := range allReviews {
165170
assert.Equal(t, expectedReviews[i].Reviewer, review.Reviewer)
166171
assert.Equal(t, expectedReviews[i].Type, review.Type)

0 commit comments

Comments
 (0)