gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package user
  4. import (
  5. "net/http"
  6. "testing"
  7. repo_model "code.gitea.io/gitea/models/repo"
  8. "code.gitea.io/gitea/models/unittest"
  9. "code.gitea.io/gitea/modules/setting"
  10. "code.gitea.io/gitea/modules/templates"
  11. "code.gitea.io/gitea/services/context"
  12. "code.gitea.io/gitea/services/contexttest"
  13. "github.com/stretchr/testify/assert"
  14. )
  15. func TestArchivedIssues(t *testing.T) {
  16. // Arrange
  17. setting.UI.IssuePagingNum = 1
  18. assert.NoError(t, unittest.LoadFixtures())
  19. ctx, _ := contexttest.MockContext(t, "issues")
  20. contexttest.LoadUser(t, ctx, 30)
  21. ctx.Req.Form.Set("state", "open")
  22. // Assume: User 30 has access to two Repos with Issues, one of the Repos being archived.
  23. repos, _, _ := repo_model.GetUserRepositories(t.Context(), repo_model.SearchRepoOptions{Actor: ctx.Doer})
  24. assert.Len(t, repos, 3)
  25. IsArchived := make(map[int64]bool)
  26. NumIssues := make(map[int64]int)
  27. for _, repo := range repos {
  28. IsArchived[repo.ID] = repo.IsArchived
  29. NumIssues[repo.ID] = repo.NumIssues
  30. }
  31. assert.False(t, IsArchived[50])
  32. assert.Equal(t, 1, NumIssues[50])
  33. assert.True(t, IsArchived[51])
  34. assert.Equal(t, 1, NumIssues[51])
  35. // Act
  36. Issues(ctx)
  37. // Assert: One Issue (ID 30) from one Repo (ID 50) is retrieved, while nothing from archived Repo 51 is retrieved
  38. assert.Equal(t, http.StatusOK, ctx.Resp.WrittenStatus())
  39. assert.Len(t, ctx.Data["Issues"], 1)
  40. }
  41. func TestIssues(t *testing.T) {
  42. setting.UI.IssuePagingNum = 1
  43. assert.NoError(t, unittest.LoadFixtures())
  44. ctx, _ := contexttest.MockContext(t, "issues")
  45. contexttest.LoadUser(t, ctx, 2)
  46. ctx.Req.Form.Set("state", "closed")
  47. Issues(ctx)
  48. assert.Equal(t, http.StatusOK, ctx.Resp.WrittenStatus())
  49. assert.EqualValues(t, true, ctx.Data["IsShowClosed"])
  50. assert.Len(t, ctx.Data["Issues"], 1)
  51. }
  52. func TestPulls(t *testing.T) {
  53. setting.UI.IssuePagingNum = 20
  54. assert.NoError(t, unittest.LoadFixtures())
  55. ctx, _ := contexttest.MockContext(t, "pulls")
  56. contexttest.LoadUser(t, ctx, 2)
  57. ctx.Req.Form.Set("state", "open")
  58. Pulls(ctx)
  59. assert.Equal(t, http.StatusOK, ctx.Resp.WrittenStatus())
  60. assert.Len(t, ctx.Data["Issues"], 5)
  61. }
  62. func TestMilestones(t *testing.T) {
  63. setting.UI.IssuePagingNum = 1
  64. assert.NoError(t, unittest.LoadFixtures())
  65. ctx, _ := contexttest.MockContext(t, "milestones")
  66. contexttest.LoadUser(t, ctx, 2)
  67. ctx.SetPathParam("sort", "issues")
  68. ctx.Req.Form.Set("state", "closed")
  69. ctx.Req.Form.Set("sort", "furthestduedate")
  70. Milestones(ctx)
  71. assert.Equal(t, http.StatusOK, ctx.Resp.WrittenStatus())
  72. assert.EqualValues(t, map[int64]int64{1: 1}, ctx.Data["Counts"])
  73. assert.EqualValues(t, true, ctx.Data["IsShowClosed"])
  74. assert.EqualValues(t, "furthestduedate", ctx.Data["SortType"])
  75. assert.EqualValues(t, 1, ctx.Data["Total"])
  76. assert.Len(t, ctx.Data["Milestones"], 1)
  77. assert.Len(t, ctx.Data["Repos"], 2) // both repo 42 and 1 have milestones and both are owned by user 2
  78. }
  79. func TestMilestonesForSpecificRepo(t *testing.T) {
  80. setting.UI.IssuePagingNum = 1
  81. assert.NoError(t, unittest.LoadFixtures())
  82. ctx, _ := contexttest.MockContext(t, "milestones")
  83. contexttest.LoadUser(t, ctx, 2)
  84. ctx.SetPathParam("sort", "issues")
  85. ctx.SetPathParam("repo", "1")
  86. ctx.Req.Form.Set("state", "closed")
  87. ctx.Req.Form.Set("sort", "furthestduedate")
  88. Milestones(ctx)
  89. assert.Equal(t, http.StatusOK, ctx.Resp.WrittenStatus())
  90. assert.EqualValues(t, map[int64]int64{1: 1}, ctx.Data["Counts"])
  91. assert.EqualValues(t, true, ctx.Data["IsShowClosed"])
  92. assert.EqualValues(t, "furthestduedate", ctx.Data["SortType"])
  93. assert.EqualValues(t, 1, ctx.Data["Total"])
  94. assert.Len(t, ctx.Data["Milestones"], 1)
  95. assert.Len(t, ctx.Data["Repos"], 2) // both repo 42 and 1 have milestones and both are owned by user 2
  96. }
  97. func TestDashboardPagination(t *testing.T) {
  98. ctx, _ := contexttest.MockContext(t, "/", contexttest.MockContextOption{Render: templates.HTMLRenderer()})
  99. page := context.NewPagination(10, 3, 1, 3)
  100. setting.AppSubURL = "/SubPath"
  101. out, err := ctx.RenderToHTML("base/paginate", map[string]any{"Link": setting.AppSubURL, "Page": page})
  102. assert.NoError(t, err)
  103. assert.Contains(t, out, `<a class=" item navigation" href="/SubPath/?page=2">`)
  104. setting.AppSubURL = ""
  105. out, err = ctx.RenderToHTML("base/paginate", map[string]any{"Link": setting.AppSubURL, "Page": page})
  106. assert.NoError(t, err)
  107. assert.Contains(t, out, `<a class=" item navigation" href="/?page=2">`)
  108. }