@@ -11,73 +11,104 @@ import (
1111 "code.gitea.io/gitea/models/unit"
1212 "code.gitea.io/gitea/models/unittest"
1313 "code.gitea.io/gitea/modules/web"
14+ "code.gitea.io/gitea/services/context"
1415 "code.gitea.io/gitea/services/contexttest"
1516 "code.gitea.io/gitea/services/forms"
1617
1718 "github.com/stretchr/testify/assert"
19+ "github.com/stretchr/testify/require"
1820)
1921
2022func TestNewReleasePost (t * testing.T ) {
21- for _ , testCase := range []struct {
22- RepoID int64
23- UserID int64
24- TagName string
25- IsTag bool
26- Form forms.NewReleaseForm
27- }{
28- { // pre-existing tag
29- RepoID : 1 ,
30- UserID : 2 ,
31- TagName : "v1.1" ,
32- Form : forms.NewReleaseForm {
33- TagName : "newtag" ,
34- Target : "master" ,
35- Title : "title" ,
36- Content : "content" ,
37- },
38- },
39- { // creating a new tag when there's already a pre-existing tag
40- RepoID : 1 ,
41- UserID : 2 ,
42- TagName : "delete-tag" ,
43- IsTag : true ,
44- Form : forms.NewReleaseForm {
45- TagName : "delete-tag" ,
46- Target : "master" ,
47- Title : "delete-tag" ,
48- TagOnly : true ,
49- },
50- },
51- {
52- RepoID : 1 ,
53- UserID : 2 ,
54- TagName : "newtag" ,
55- Form : forms.NewReleaseForm {
56- TagName : "newtag" ,
57- Target : "master" ,
58- Title : "title" ,
59- Content : "content" ,
60- },
61- },
62- } {
63- unittest .PrepareTestEnv (t )
23+ unittest .PrepareTestEnv (t )
24+
25+ get := func (t * testing.T , tagName string ) * context.Context {
26+ ctx , _ := contexttest .MockContext (t , "user2/repo1/releases/new?tag=" + tagName )
27+ contexttest .LoadUser (t , ctx , 2 )
28+ contexttest .LoadRepo (t , ctx , 1 )
29+ contexttest .LoadGitRepo (t , ctx )
30+ defer ctx .Repo .GitRepo .Close ()
31+ NewRelease (ctx )
32+ return ctx
33+ }
34+
35+ t .Run ("NewReleasePage" , func (t * testing.T ) {
36+ ctx := get (t , "v1.1" )
37+ assert .NotEmpty (t , ctx .Data ["TagNameReleaseExists" ])
38+ ctx = get (t , "new-tag-name" )
39+ assert .Empty (t , ctx .Data ["TagNameReleaseExists" ])
40+ })
6441
42+ post := func (t * testing.T , form forms.NewReleaseForm ) * context.Context {
6543 ctx , _ := contexttest .MockContext (t , "user2/repo1/releases/new" )
6644 contexttest .LoadUser (t , ctx , 2 )
6745 contexttest .LoadRepo (t , ctx , 1 )
6846 contexttest .LoadGitRepo (t , ctx )
69- web .SetForm (ctx , & testCase .Form )
47+ defer ctx .Repo .GitRepo .Close ()
48+ web .SetForm (ctx , & form )
7049 NewReleasePost (ctx )
71- unittest .AssertExistsAndLoadBean (t , & repo_model.Release {
72- RepoID : 1 ,
73- PublisherID : 2 ,
74- TagName : testCase .Form .TagName ,
75- Target : testCase .Form .Target ,
76- Title : testCase .Form .Title ,
77- Note : testCase .Form .Content ,
78- }, unittest .Cond ("is_tag=? AND is_draft=?" , testCase .IsTag , testCase .Form .Draft ))
79- _ = ctx .Repo .GitRepo .Close ()
50+ return ctx
8051 }
52+
53+ loadRelease := func (t * testing.T , tagName string ) * repo_model.Release {
54+ return unittest .GetBean (t , & repo_model.Release {}, unittest .Cond ("repo_id=1 AND tag_name=?" , tagName ))
55+ }
56+
57+ t .Run ("NewTagRelease" , func (t * testing.T ) {
58+ post (t , forms.NewReleaseForm {
59+ TagName : "newtag" ,
60+ Target : "master" ,
61+ Title : "title" ,
62+ Content : "content" ,
63+ })
64+ rel := loadRelease (t , "newtag" )
65+ require .NotNil (t , rel )
66+ assert .False (t , rel .IsTag )
67+ assert .Equal (t , "master" , rel .Target )
68+ assert .Equal (t , "title" , rel .Title )
69+ assert .Equal (t , "content" , rel .Note )
70+ })
71+
72+ t .Run ("ReleaseExistsDoUpdate" , func (t * testing.T ) {
73+ post (t , forms.NewReleaseForm {
74+ TagName : "v1.1" ,
75+ Target : "master" ,
76+ Title : "updated-title" ,
77+ Content : "updated-content" ,
78+ })
79+ rel := loadRelease (t , "v1.1" )
80+ require .NotNil (t , rel )
81+ assert .Equal (t , "updated-title" , rel .Title )
82+ assert .Equal (t , "updated-content" , rel .Note )
83+ })
84+
85+ t .Run ("TagOnly" , func (t * testing.T ) {
86+ ctx := post (t , forms.NewReleaseForm {
87+ TagName : "new-tag-only" ,
88+ Target : "master" ,
89+ Title : "title" ,
90+ Content : "content" ,
91+ TagOnly : true ,
92+ })
93+ rel := loadRelease (t , "new-tag-only" )
94+ require .NotNil (t , rel )
95+ assert .True (t , rel .IsTag )
96+ assert .Empty (t , ctx .Flash .ErrorMsg )
97+ })
98+
99+ t .Run ("TagOnlyConflict" , func (t * testing.T ) {
100+ ctx := post (t , forms.NewReleaseForm {
101+ TagName : "v1.1" ,
102+ Target : "master" ,
103+ Title : "title" ,
104+ Content : "content" ,
105+ TagOnly : true ,
106+ })
107+ rel := loadRelease (t , "v1.1" )
108+ require .NotNil (t , rel )
109+ assert .False (t , rel .IsTag )
110+ assert .NotEmpty (t , ctx .Flash .ErrorMsg )
111+ })
81112}
82113
83114func TestCalReleaseNumCommitsBehind (t * testing.T ) {
0 commit comments