2017-08-03 08:09:16 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2017-08-03 08:09:16 +03:00
package user
import (
"net/http"
"testing"
2023-10-15 18:46:06 +03:00
"code.gitea.io/gitea/models/db"
2022-06-06 11:01:49 +03:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-12 17:36:47 +03:00
"code.gitea.io/gitea/models/unittest"
2019-08-23 19:40:30 +03:00
"code.gitea.io/gitea/modules/setting"
2024-03-04 04:02:51 +03:00
"code.gitea.io/gitea/modules/templates"
"code.gitea.io/gitea/services/context"
2024-02-27 10:12:22 +03:00
"code.gitea.io/gitea/services/contexttest"
2017-08-03 08:09:16 +03:00
"github.com/stretchr/testify/assert"
)
2021-01-13 07:19:17 +03:00
func TestArchivedIssues ( t * testing . T ) {
// Arrange
setting . UI . IssuePagingNum = 1
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . LoadFixtures ( ) )
2021-01-13 07:19:17 +03:00
2023-09-01 14:26:07 +03:00
ctx , _ := contexttest . MockContext ( t , "issues" )
contexttest . LoadUser ( t , ctx , 30 )
2021-01-13 07:19:17 +03:00
ctx . Req . Form . Set ( "state" , "open" )
// Assume: User 30 has access to two Repos with Issues, one of the Repos being archived.
2023-10-15 18:46:06 +03:00
repos , _ , _ := repo_model . GetUserRepositories ( db . DefaultContext , & repo_model . SearchRepoOptions { Actor : ctx . Doer } )
2022-12-12 15:45:21 +03:00
assert . Len ( t , repos , 3 )
2021-01-13 07:19:17 +03:00
IsArchived := make ( map [ int64 ] bool )
NumIssues := make ( map [ int64 ] int )
for _ , repo := range repos {
IsArchived [ repo . ID ] = repo . IsArchived
NumIssues [ repo . ID ] = repo . NumIssues
}
2021-06-07 08:27:09 +03:00
assert . False ( t , IsArchived [ 50 ] )
2021-01-13 07:19:17 +03:00
assert . EqualValues ( t , 1 , NumIssues [ 50 ] )
2021-06-07 08:27:09 +03:00
assert . True ( t , IsArchived [ 51 ] )
2021-01-13 07:19:17 +03:00
assert . EqualValues ( t , 1 , NumIssues [ 51 ] )
// Act
Issues ( ctx )
// Assert: One Issue (ID 30) from one Repo (ID 50) is retrieved, while nothing from archived Repo 51 is retrieved
assert . EqualValues ( t , http . StatusOK , ctx . Resp . Status ( ) )
assert . Len ( t , ctx . Data [ "Issues" ] , 1 )
}
2017-08-03 08:09:16 +03:00
func TestIssues ( t * testing . T ) {
setting . UI . IssuePagingNum = 1
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . LoadFixtures ( ) )
2017-08-03 08:09:16 +03:00
2023-09-01 14:26:07 +03:00
ctx , _ := contexttest . MockContext ( t , "issues" )
contexttest . LoadUser ( t , ctx , 2 )
2017-08-03 08:09:16 +03:00
ctx . Req . Form . Set ( "state" , "closed" )
Issues ( ctx )
assert . EqualValues ( t , http . StatusOK , ctx . Resp . Status ( ) )
assert . EqualValues ( t , true , ctx . Data [ "IsShowClosed" ] )
assert . Len ( t , ctx . Data [ "Issues" ] , 1 )
}
2019-12-15 17:20:08 +03:00
2021-01-13 07:19:17 +03:00
func TestPulls ( t * testing . T ) {
setting . UI . IssuePagingNum = 20
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . LoadFixtures ( ) )
2021-01-13 07:19:17 +03:00
2023-09-01 14:26:07 +03:00
ctx , _ := contexttest . MockContext ( t , "pulls" )
contexttest . LoadUser ( t , ctx , 2 )
2021-01-13 07:19:17 +03:00
ctx . Req . Form . Set ( "state" , "open" )
Pulls ( ctx )
assert . EqualValues ( t , http . StatusOK , ctx . Resp . Status ( ) )
2023-07-28 22:18:12 +03:00
assert . Len ( t , ctx . Data [ "Issues" ] , 5 )
2021-01-13 07:19:17 +03:00
}
2019-12-15 17:20:08 +03:00
func TestMilestones ( t * testing . T ) {
setting . UI . IssuePagingNum = 1
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . LoadFixtures ( ) )
2019-12-15 17:20:08 +03:00
2023-09-01 14:26:07 +03:00
ctx , _ := contexttest . MockContext ( t , "milestones" )
contexttest . LoadUser ( t , ctx , 2 )
2019-12-15 17:20:08 +03:00
ctx . SetParams ( "sort" , "issues" )
ctx . Req . Form . Set ( "state" , "closed" )
ctx . Req . Form . Set ( "sort" , "furthestduedate" )
Milestones ( ctx )
assert . EqualValues ( t , http . StatusOK , ctx . Resp . Status ( ) )
assert . EqualValues ( t , map [ int64 ] int64 { 1 : 1 } , ctx . Data [ "Counts" ] )
assert . EqualValues ( t , true , ctx . Data [ "IsShowClosed" ] )
assert . EqualValues ( t , "furthestduedate" , ctx . Data [ "SortType" ] )
assert . EqualValues ( t , 1 , ctx . Data [ "Total" ] )
assert . Len ( t , ctx . Data [ "Milestones" ] , 1 )
2020-03-31 10:47:00 +03:00
assert . Len ( t , ctx . Data [ "Repos" ] , 2 ) // both repo 42 and 1 have milestones and both are owned by user 2
2019-12-15 17:20:08 +03:00
}
func TestMilestonesForSpecificRepo ( t * testing . T ) {
setting . UI . IssuePagingNum = 1
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . LoadFixtures ( ) )
2019-12-15 17:20:08 +03:00
2023-09-01 14:26:07 +03:00
ctx , _ := contexttest . MockContext ( t , "milestones" )
contexttest . LoadUser ( t , ctx , 2 )
2019-12-15 17:20:08 +03:00
ctx . SetParams ( "sort" , "issues" )
ctx . SetParams ( "repo" , "1" )
ctx . Req . Form . Set ( "state" , "closed" )
ctx . Req . Form . Set ( "sort" , "furthestduedate" )
Milestones ( ctx )
assert . EqualValues ( t , http . StatusOK , ctx . Resp . Status ( ) )
assert . EqualValues ( t , map [ int64 ] int64 { 1 : 1 } , ctx . Data [ "Counts" ] )
assert . EqualValues ( t , true , ctx . Data [ "IsShowClosed" ] )
assert . EqualValues ( t , "furthestduedate" , ctx . Data [ "SortType" ] )
assert . EqualValues ( t , 1 , ctx . Data [ "Total" ] )
assert . Len ( t , ctx . Data [ "Milestones" ] , 1 )
2020-03-31 10:47:00 +03:00
assert . Len ( t , ctx . Data [ "Repos" ] , 2 ) // both repo 42 and 1 have milestones and both are owned by user 2
2019-12-15 17:20:08 +03:00
}
2024-03-04 04:02:51 +03:00
func TestDashboardPagination ( t * testing . T ) {
ctx , _ := contexttest . MockContext ( t , "/" , contexttest . MockContextOption { Render : templates . HTMLRenderer ( ) } )
page := context . NewPagination ( 10 , 3 , 1 , 3 )
setting . AppSubURL = "/SubPath"
out , err := ctx . RenderToHTML ( "base/paginate" , map [ string ] any { "Link" : setting . AppSubURL , "Page" : page } )
assert . NoError ( t , err )
assert . Contains ( t , out , ` <a class=" item navigation" href="/SubPath/?page=2"> ` )
setting . AppSubURL = ""
out , err = ctx . RenderToHTML ( "base/paginate" , map [ string ] any { "Link" : setting . AppSubURL , "Page" : page } )
assert . NoError ( t , err )
assert . Contains ( t , out , ` <a class=" item navigation" href="/?page=2"> ` )
}