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  }