ae325d4bec
Signed-off-by: Martijn van der Kleijn <martijn.niji@gmail.com>
180 lines
5.8 KiB
Go
180 lines
5.8 KiB
Go
// Copyright 2024 The Forgejo Authors. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Copyright 2020 The Gitea Authors. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package forgejo
|
|
|
|
import (
|
|
"log"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestRepoBranches(t *testing.T) {
|
|
log.Println("== TestRepoBranches ==")
|
|
c := newTestClient()
|
|
repoName := "branches"
|
|
|
|
repo := prepareBranchTest(t, c, repoName)
|
|
if repo == nil {
|
|
return
|
|
}
|
|
time.Sleep(1 * time.Second)
|
|
bl, _, err := c.ListRepoBranches(repo.Owner.UserName, repo.Name, ListRepoBranchesOptions{})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, bl, 3)
|
|
|
|
branchNames := make([]string, len(bl))
|
|
branches := make(map[string]Branch, len(bl))
|
|
for index, branch := range bl {
|
|
branchNames[index] = branch.Name
|
|
branches[branch.Name] = *branch
|
|
}
|
|
assert.ElementsMatch(t, []string{"feature", "main", "update"}, branchNames)
|
|
|
|
b, _, err := c.GetRepoBranch(repo.Owner.UserName, repo.Name, "update")
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, branches["update"].Commit.ID, b.Commit.ID)
|
|
assert.EqualValues(t, branches["update"].Commit.Added, b.Commit.Added)
|
|
|
|
s, _, err := c.DeleteRepoBranch(repo.Owner.UserName, repo.Name, "main")
|
|
assert.NoError(t, err)
|
|
assert.False(t, s)
|
|
s, _, err = c.DeleteRepoBranch(repo.Owner.UserName, repo.Name, "feature")
|
|
assert.NoError(t, err)
|
|
assert.True(t, s)
|
|
|
|
bl, _, err = c.ListRepoBranches(repo.Owner.UserName, repo.Name, ListRepoBranchesOptions{})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, bl, 2)
|
|
|
|
b, _, err = c.GetRepoBranch(repo.Owner.UserName, repo.Name, "feature")
|
|
assert.Error(t, err)
|
|
assert.Nil(t, b)
|
|
|
|
bNew, _, err := c.CreateBranch(repo.Owner.UserName, repo.Name, CreateBranchOption{BranchName: "NewBranch"})
|
|
assert.NoError(t, err)
|
|
|
|
b, _, err = c.GetRepoBranch(repo.Owner.UserName, repo.Name, bNew.Name)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, bNew, b)
|
|
}
|
|
|
|
func TestRepoBranchProtection(t *testing.T) {
|
|
log.Println("== TestRepoBranchProtection ==")
|
|
c := newTestClient()
|
|
repoName := "BranchProtection"
|
|
|
|
repo := prepareBranchTest(t, c, repoName)
|
|
if repo == nil {
|
|
return
|
|
}
|
|
assert.NotNil(t, repo)
|
|
|
|
// ListBranchProtections
|
|
bpl, _, err := c.ListBranchProtections(repo.Owner.UserName, repo.Name, ListBranchProtectionsOptions{})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, bpl, 0)
|
|
|
|
// CreateBranchProtection
|
|
bp, _, err := c.CreateBranchProtection(repo.Owner.UserName, repo.Name, CreateBranchProtectionOption{
|
|
BranchName: "main",
|
|
EnablePush: true,
|
|
EnablePushWhitelist: true,
|
|
PushWhitelistUsernames: []string{"test01"},
|
|
EnableMergeWhitelist: true,
|
|
MergeWhitelistUsernames: []string{"test01"},
|
|
BlockOnOutdatedBranch: true,
|
|
})
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, "main", bp.BranchName)
|
|
assert.EqualValues(t, false, bp.EnableStatusCheck)
|
|
assert.EqualValues(t, true, bp.EnablePush)
|
|
assert.EqualValues(t, true, bp.EnablePushWhitelist)
|
|
assert.EqualValues(t, []string{"test01"}, bp.PushWhitelistUsernames)
|
|
|
|
bp, _, err = c.CreateBranchProtection(repo.Owner.UserName, repo.Name, CreateBranchProtectionOption{
|
|
BranchName: "update",
|
|
EnablePush: false,
|
|
EnableMergeWhitelist: true,
|
|
MergeWhitelistUsernames: []string{"test01"},
|
|
})
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, bp)
|
|
|
|
bpl, _, err = c.ListBranchProtections(repo.Owner.UserName, repo.Name, ListBranchProtectionsOptions{})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, bpl, 2)
|
|
|
|
// GetBranchProtection
|
|
bp, _, err = c.GetBranchProtection(repo.Owner.UserName, repo.Name, bpl[0].BranchName)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, bpl[0], bp)
|
|
|
|
// EditBranchProtection
|
|
bp, _, err = c.EditBranchProtection(repo.Owner.UserName, repo.Name, bpl[0].BranchName, EditBranchProtectionOption{
|
|
EnablePush: OptionalBool(false),
|
|
EnablePushWhitelist: OptionalBool(false),
|
|
PushWhitelistUsernames: nil,
|
|
RequiredApprovals: OptionalInt64(1),
|
|
EnableApprovalsWhitelist: OptionalBool(true),
|
|
ApprovalsWhitelistUsernames: []string{"test01"},
|
|
})
|
|
assert.NoError(t, err)
|
|
assert.NotEqual(t, bpl[0], bp)
|
|
assert.EqualValues(t, bpl[0].BranchName, bp.BranchName)
|
|
assert.EqualValues(t, bpl[0].EnableMergeWhitelist, bp.EnableMergeWhitelist)
|
|
assert.EqualValues(t, bpl[0].Created, bp.Created)
|
|
|
|
// DeleteBranchProtection
|
|
_, err = c.DeleteBranchProtection(repo.Owner.UserName, repo.Name, bpl[1].BranchName)
|
|
assert.NoError(t, err)
|
|
bpl, _, err = c.ListBranchProtections(repo.Owner.UserName, repo.Name, ListBranchProtectionsOptions{})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, bpl, 1)
|
|
}
|
|
|
|
func prepareBranchTest(t *testing.T, c *Client, repoName string) *Repository {
|
|
origRepo, err := createTestRepo(t, repoName, c)
|
|
if !assert.NoError(t, err) {
|
|
return nil
|
|
}
|
|
|
|
mainLicense, _, err := c.GetContents(origRepo.Owner.UserName, origRepo.Name, "main", "README.md")
|
|
if !assert.NoError(t, err) || !assert.NotNil(t, mainLicense) {
|
|
return nil
|
|
}
|
|
|
|
updatedFile, _, err := c.UpdateFile(origRepo.Owner.UserName, origRepo.Name, "README.md", UpdateFileOptions{
|
|
FileOptions: FileOptions{
|
|
Message: "update it",
|
|
BranchName: "main",
|
|
NewBranchName: "update",
|
|
},
|
|
SHA: mainLicense.SHA,
|
|
Content: "Tk9USElORyBJUyBIRVJFIEFOWU1PUkUKSUYgWU9VIExJS0UgVE8gRklORCBTT01FVEhJTkcKV0FJVCBGT1IgVEhFIEZVVFVSRQo=",
|
|
})
|
|
if !assert.NoError(t, err) || !assert.NotNil(t, updatedFile) {
|
|
return nil
|
|
}
|
|
|
|
newFile, _, err := c.CreateFile(origRepo.Owner.UserName, origRepo.Name, "WOW-file", CreateFileOptions{
|
|
Content: "QSBuZXcgRmlsZQo=",
|
|
FileOptions: FileOptions{
|
|
Message: "creat a new file",
|
|
BranchName: "main",
|
|
NewBranchName: "feature",
|
|
},
|
|
})
|
|
if !assert.NoError(t, err) || !assert.NotNil(t, newFile) {
|
|
return nil
|
|
}
|
|
|
|
return origRepo
|
|
}
|