Skip to content

Commit 2085fa2

Browse files
Add some integration tests for tracker and wiki settings through API
1 parent 7e5c953 commit 2085fa2

File tree

1 file changed

+124
-15
lines changed

1 file changed

+124
-15
lines changed

integrations/api_repo_edit_test.go

+124-15
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,37 @@ func getRepoEditOptionFromRepo(repo *models.Repository) *api.EditRepoOption {
2323
website := repo.Website
2424
private := repo.IsPrivate
2525
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()
2735
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
2846
}
2947
hasWiki := false
48+
externalWiki := false
49+
externalWikiURL := ""
3050
if _, err := repo.GetUnit(models.UnitTypeWiki); err == nil {
3151
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
3257
}
3358
defaultBranch := repo.DefaultBranch
3459
hasPullRequests := false
@@ -48,20 +73,29 @@ func getRepoEditOptionFromRepo(repo *models.Repository) *api.EditRepoOption {
4873
}
4974
archived := repo.IsArchived
5075
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,
6599
}
66100
}
67101

@@ -143,6 +177,81 @@ func TestAPIRepoEdit(t *testing.T) {
143177
assert.Equal(t, *repoEditOption.Archived, *repo1editedOption.Archived)
144178
assert.Equal(t, *repoEditOption.Private, *repo1editedOption.Private)
145179
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+
146255
// reset repo in db
147256
url = fmt.Sprintf("/api/v1/repos/%s/%s?token=%s", user2.Name, *repoEditOption.Name, token2)
148257
req = NewRequestWithJSON(t, "PATCH", url, &origRepoEditOption)

0 commit comments

Comments
 (0)