code.gitea.io/gitea@v1.22.3/models/project/board_test.go (about)

     1  // Copyright 2020 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package project
     5  
     6  import (
     7  	"fmt"
     8  	"strings"
     9  	"testing"
    10  
    11  	"code.gitea.io/gitea/models/db"
    12  	"code.gitea.io/gitea/models/unittest"
    13  
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  func TestGetDefaultBoard(t *testing.T) {
    18  	assert.NoError(t, unittest.PrepareTestDatabase())
    19  
    20  	projectWithoutDefault, err := GetProjectByID(db.DefaultContext, 5)
    21  	assert.NoError(t, err)
    22  
    23  	// check if default board was added
    24  	board, err := projectWithoutDefault.GetDefaultBoard(db.DefaultContext)
    25  	assert.NoError(t, err)
    26  	assert.Equal(t, int64(5), board.ProjectID)
    27  	assert.Equal(t, "Uncategorized", board.Title)
    28  
    29  	projectWithMultipleDefaults, err := GetProjectByID(db.DefaultContext, 6)
    30  	assert.NoError(t, err)
    31  
    32  	// check if multiple defaults were removed
    33  	board, err = projectWithMultipleDefaults.GetDefaultBoard(db.DefaultContext)
    34  	assert.NoError(t, err)
    35  	assert.Equal(t, int64(6), board.ProjectID)
    36  	assert.Equal(t, int64(9), board.ID)
    37  
    38  	// set 8 as default board
    39  	assert.NoError(t, SetDefaultBoard(db.DefaultContext, board.ProjectID, 8))
    40  
    41  	// then 9 will become a non-default board
    42  	board, err = GetBoard(db.DefaultContext, 9)
    43  	assert.NoError(t, err)
    44  	assert.Equal(t, int64(6), board.ProjectID)
    45  	assert.False(t, board.Default)
    46  }
    47  
    48  func Test_moveIssuesToAnotherColumn(t *testing.T) {
    49  	assert.NoError(t, unittest.PrepareTestDatabase())
    50  
    51  	column1 := unittest.AssertExistsAndLoadBean(t, &Board{ID: 1, ProjectID: 1})
    52  
    53  	issues, err := column1.GetIssues(db.DefaultContext)
    54  	assert.NoError(t, err)
    55  	assert.Len(t, issues, 1)
    56  	assert.EqualValues(t, 1, issues[0].ID)
    57  
    58  	column2 := unittest.AssertExistsAndLoadBean(t, &Board{ID: 2, ProjectID: 1})
    59  	issues, err = column2.GetIssues(db.DefaultContext)
    60  	assert.NoError(t, err)
    61  	assert.Len(t, issues, 1)
    62  	assert.EqualValues(t, 3, issues[0].ID)
    63  
    64  	err = column1.moveIssuesToAnotherColumn(db.DefaultContext, column2)
    65  	assert.NoError(t, err)
    66  
    67  	issues, err = column1.GetIssues(db.DefaultContext)
    68  	assert.NoError(t, err)
    69  	assert.Len(t, issues, 0)
    70  
    71  	issues, err = column2.GetIssues(db.DefaultContext)
    72  	assert.NoError(t, err)
    73  	assert.Len(t, issues, 2)
    74  	assert.EqualValues(t, 3, issues[0].ID)
    75  	assert.EqualValues(t, 0, issues[0].Sorting)
    76  	assert.EqualValues(t, 1, issues[1].ID)
    77  	assert.EqualValues(t, 1, issues[1].Sorting)
    78  }
    79  
    80  func Test_MoveColumnsOnProject(t *testing.T) {
    81  	assert.NoError(t, unittest.PrepareTestDatabase())
    82  
    83  	project1 := unittest.AssertExistsAndLoadBean(t, &Project{ID: 1})
    84  	columns, err := project1.GetBoards(db.DefaultContext)
    85  	assert.NoError(t, err)
    86  	assert.Len(t, columns, 3)
    87  	assert.EqualValues(t, 0, columns[0].Sorting) // even if there is no default sorting, the code should also work
    88  	assert.EqualValues(t, 0, columns[1].Sorting)
    89  	assert.EqualValues(t, 0, columns[2].Sorting)
    90  
    91  	err = MoveColumnsOnProject(db.DefaultContext, project1, map[int64]int64{
    92  		0: columns[1].ID,
    93  		1: columns[2].ID,
    94  		2: columns[0].ID,
    95  	})
    96  	assert.NoError(t, err)
    97  
    98  	columnsAfter, err := project1.GetBoards(db.DefaultContext)
    99  	assert.NoError(t, err)
   100  	assert.Len(t, columnsAfter, 3)
   101  	assert.EqualValues(t, columns[1].ID, columnsAfter[0].ID)
   102  	assert.EqualValues(t, columns[2].ID, columnsAfter[1].ID)
   103  	assert.EqualValues(t, columns[0].ID, columnsAfter[2].ID)
   104  }
   105  
   106  func Test_NewBoard(t *testing.T) {
   107  	assert.NoError(t, unittest.PrepareTestDatabase())
   108  
   109  	project1 := unittest.AssertExistsAndLoadBean(t, &Project{ID: 1})
   110  	columns, err := project1.GetBoards(db.DefaultContext)
   111  	assert.NoError(t, err)
   112  	assert.Len(t, columns, 3)
   113  
   114  	for i := 0; i < maxProjectColumns-3; i++ {
   115  		err := NewBoard(db.DefaultContext, &Board{
   116  			Title:     fmt.Sprintf("board-%d", i+4),
   117  			ProjectID: project1.ID,
   118  		})
   119  		assert.NoError(t, err)
   120  	}
   121  	err = NewBoard(db.DefaultContext, &Board{
   122  		Title:     "board-21",
   123  		ProjectID: project1.ID,
   124  	})
   125  	assert.Error(t, err)
   126  	assert.True(t, strings.Contains(err.Error(), "maximum number of columns reached"))
   127  }