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