@@ -23,12 +23,37 @@ func getRepoEditOptionFromRepo(repo *models.Repository) *api.EditRepoOption {
23
23
website := repo .Website
24
24
private := repo .IsPrivate
25
25
hasIssues := false
26
- if _ , err := repo .GetUnit (models .UnitTypeIssues ); err == nil {
26
+ externalTracker := false
27
+ externalTrackerURL := ""
28
+ externalTrackerFormat := ""
29
+ externalTrackerStyle := ""
30
+ enableTimeTracker := false
31
+ letOnlyContributorsTrackTime := false
32
+ enableIssueDependencies := false
33
+ if unit , err := repo .GetUnit (models .UnitTypeIssues ); err == nil {
34
+ config := unit .IssuesConfig ()
27
35
hasIssues = true
36
+ enableTimeTracker = config .EnableTimetracker
37
+ letOnlyContributorsTrackTime = config .AllowOnlyContributorsToTrackTime
38
+ enableIssueDependencies = config .EnableDependencies
39
+ } else if unit , err := repo .GetUnit (models .UnitTypeExternalTracker ); err == nil {
40
+ config := unit .ExternalTrackerConfig ()
41
+ hasIssues = true
42
+ externalTracker = true
43
+ externalTrackerURL = config .ExternalTrackerURL
44
+ externalTrackerFormat = config .ExternalTrackerFormat
45
+ externalTrackerStyle = config .ExternalTrackerStyle
28
46
}
29
47
hasWiki := false
48
+ externalWiki := false
49
+ externalWikiURL := ""
30
50
if _ , err := repo .GetUnit (models .UnitTypeWiki ); err == nil {
31
51
hasWiki = true
52
+ } else if unit , err := repo .GetUnit (models .UnitTypeExternalWiki ); err == nil {
53
+ hasWiki = true
54
+ config := unit .ExternalWikiConfig ()
55
+ externalWiki = true
56
+ externalWikiURL = config .ExternalWikiURL
32
57
}
33
58
defaultBranch := repo .DefaultBranch
34
59
hasPullRequests := false
@@ -48,20 +73,29 @@ func getRepoEditOptionFromRepo(repo *models.Repository) *api.EditRepoOption {
48
73
}
49
74
archived := repo .IsArchived
50
75
return & api.EditRepoOption {
51
- Name : & name ,
52
- Description : & description ,
53
- Website : & website ,
54
- Private : & private ,
55
- HasIssues : & hasIssues ,
56
- HasWiki : & hasWiki ,
57
- DefaultBranch : & defaultBranch ,
58
- HasPullRequests : & hasPullRequests ,
59
- IgnoreWhitespaceConflicts : & ignoreWhitespaceConflicts ,
60
- AllowMerge : & allowMerge ,
61
- AllowRebase : & allowRebase ,
62
- AllowRebaseMerge : & allowRebaseMerge ,
63
- AllowSquash : & allowSquash ,
64
- Archived : & archived ,
76
+ Name : & name ,
77
+ Description : & description ,
78
+ Website : & website ,
79
+ Private : & private ,
80
+ HasIssues : & hasIssues ,
81
+ ExternalTracker : & externalTracker ,
82
+ ExternalTrackerURL : & externalTrackerURL ,
83
+ ExternalTrackerFormat : & externalTrackerFormat ,
84
+ ExternalTrackerStyle : & externalTrackerStyle ,
85
+ EnableTimeTracker : & enableTimeTracker ,
86
+ LetOnlyContributorsTrackTime : & letOnlyContributorsTrackTime ,
87
+ EnableIssueDependencies : & enableIssueDependencies ,
88
+ HasWiki : & hasWiki ,
89
+ ExternalWiki : & externalWiki ,
90
+ ExternalWikiURL : & externalWikiURL ,
91
+ DefaultBranch : & defaultBranch ,
92
+ HasPullRequests : & hasPullRequests ,
93
+ IgnoreWhitespaceConflicts : & ignoreWhitespaceConflicts ,
94
+ AllowMerge : & allowMerge ,
95
+ AllowRebase : & allowRebase ,
96
+ AllowRebaseMerge : & allowRebaseMerge ,
97
+ AllowSquash : & allowSquash ,
98
+ Archived : & archived ,
65
99
}
66
100
}
67
101
@@ -143,6 +177,81 @@ func TestAPIRepoEdit(t *testing.T) {
143
177
assert .Equal (t , * repoEditOption .Archived , * repo1editedOption .Archived )
144
178
assert .Equal (t , * repoEditOption .Private , * repo1editedOption .Private )
145
179
assert .Equal (t , * repoEditOption .HasWiki , * repo1editedOption .HasWiki )
180
+
181
+ //Test editing repo1 to use internal issue and wiki (default)
182
+ enableTimeTracker := false
183
+ letOnlyContributorsTrackTime := false
184
+ enableIssueDependencies := false
185
+ * repoEditOption .HasIssues = true
186
+ repoEditOption .ExternalTracker = nil
187
+ repoEditOption .EnableTimeTracker = & enableTimeTracker
188
+ repoEditOption .LetOnlyContributorsTrackTime = & letOnlyContributorsTrackTime
189
+ repoEditOption .EnableIssueDependencies = & enableIssueDependencies
190
+ * repoEditOption .HasWiki = true
191
+ repoEditOption .ExternalWiki = nil
192
+ url = fmt .Sprintf ("/api/v1/repos/%s/%s?token=%s" , user2 .Name , * repoEditOption .Name , token2 )
193
+ req = NewRequestWithJSON (t , "PATCH" , url , & repoEditOption )
194
+ resp = session .MakeRequest (t , req , http .StatusOK )
195
+ DecodeJSON (t , resp , & repo )
196
+ assert .NotNil (t , repo )
197
+ // check repo1 was written to database
198
+ repo1edited = models .AssertExistsAndLoadBean (t , & models.Repository {ID : 1 }).(* models.Repository )
199
+ repo1editedOption = getRepoEditOptionFromRepo (repo1edited )
200
+ assert .Equal (t , * repo1editedOption .HasIssues , true )
201
+ assert .Equal (t , * repo1editedOption .ExternalTracker , false )
202
+ assert .Equal (t , * repo1editedOption .EnableTimeTracker , false )
203
+ assert .Equal (t , * repo1editedOption .LetOnlyContributorsTrackTime , false )
204
+ assert .Equal (t , * repo1editedOption .EnableIssueDependencies , false )
205
+ assert .Equal (t , * repo1editedOption .HasWiki , true )
206
+ assert .Equal (t , * repo1editedOption .ExternalWiki , false )
207
+
208
+ //Test editing repo1 to use external issue and wiki
209
+ externalTracker := true
210
+ externalURL := "http://www.somewebsite.com"
211
+ externalTrackerFormat := "http://www.somewebsite.com/{user}/{repo}?issue={index}"
212
+ externalTrackerStyle := "alphanumeric"
213
+ externalWiki := true
214
+ repoEditOption .ExternalTracker = & externalTracker
215
+ repoEditOption .ExternalTrackerURL = & externalURL
216
+ repoEditOption .ExternalTrackerFormat = & externalTrackerFormat
217
+ repoEditOption .ExternalTrackerStyle = & externalTrackerStyle
218
+ repoEditOption .ExternalWiki = & externalWiki
219
+ repoEditOption .ExternalWikiURL = & externalURL
220
+ req = NewRequestWithJSON (t , "PATCH" , url , & repoEditOption )
221
+ resp = session .MakeRequest (t , req , http .StatusOK )
222
+ DecodeJSON (t , resp , & repo )
223
+ assert .NotNil (t , repo )
224
+ // check repo1 was written to database
225
+ repo1edited = models .AssertExistsAndLoadBean (t , & models.Repository {ID : 1 }).(* models.Repository )
226
+ repo1editedOption = getRepoEditOptionFromRepo (repo1edited )
227
+ assert .Equal (t , * repo1editedOption .HasIssues , true )
228
+ assert .Equal (t , * repo1editedOption .ExternalTracker , true )
229
+ assert .Equal (t , * repo1editedOption .ExternalTrackerURL , * repoEditOption .ExternalTrackerURL )
230
+ assert .Equal (t , * repo1editedOption .ExternalTrackerFormat , * repoEditOption .ExternalTrackerFormat )
231
+ assert .Equal (t , * repo1editedOption .ExternalTrackerStyle , * repoEditOption .ExternalTrackerStyle )
232
+ assert .Equal (t , * repo1editedOption .HasWiki , true )
233
+ assert .Equal (t , * repo1editedOption .ExternalWiki , true )
234
+ assert .Equal (t , * repo1editedOption .ExternalWikiURL , * repoEditOption .ExternalWikiURL )
235
+
236
+ //Test small repo change through API with issue and wiki option not set; They shall not be touched.
237
+ * repoEditOption .Description = "small change"
238
+ repoEditOption .HasIssues = nil
239
+ * repoEditOption .ExternalTracker = false
240
+ repoEditOption .HasWiki = nil
241
+ * repoEditOption .ExternalWiki = false
242
+ req = NewRequestWithJSON (t , "PATCH" , url , & repoEditOption )
243
+ resp = session .MakeRequest (t , req , http .StatusOK )
244
+ DecodeJSON (t , resp , & repo )
245
+ assert .NotNil (t , repo )
246
+ // check repo1 was written to database
247
+ repo1edited = models .AssertExistsAndLoadBean (t , & models.Repository {ID : 1 }).(* models.Repository )
248
+ repo1editedOption = getRepoEditOptionFromRepo (repo1edited )
249
+ assert .Equal (t , * repo1editedOption .Description , * repoEditOption .Description )
250
+ assert .Equal (t , * repo1editedOption .HasIssues , true )
251
+ assert .Equal (t , * repo1editedOption .ExternalTracker , true )
252
+ assert .Equal (t , * repo1editedOption .HasWiki , true )
253
+ assert .Equal (t , * repo1editedOption .ExternalWiki , true )
254
+
146
255
// reset repo in db
147
256
url = fmt .Sprintf ("/api/v1/repos/%s/%s?token=%s" , user2 .Name , * repoEditOption .Name , token2 )
148
257
req = NewRequestWithJSON (t , "PATCH" , url , & origRepoEditOption )
0 commit comments