2019-04-17 12:06:35 -04:00
|
|
|
// Copyright 2019 The Gitea Authors. All rights reserved.
|
2022-11-27 13:20:29 -05:00
|
|
|
// SPDX-License-Identifier: MIT
|
2019-04-17 12:06:35 -04:00
|
|
|
|
2021-11-24 02:56:24 -05:00
|
|
|
package files
|
2019-04-17 12:06:35 -04:00
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
2021-12-09 20:27:50 -05:00
|
|
|
repo_model "code.gitea.io/gitea/models/repo"
|
2021-11-12 09:36:47 -05:00
|
|
|
"code.gitea.io/gitea/models/unittest"
|
2021-11-17 15:37:00 -05:00
|
|
|
"code.gitea.io/gitea/modules/json"
|
2024-02-27 02:12:22 -05:00
|
|
|
"code.gitea.io/gitea/services/contexttest"
|
2019-09-05 22:20:09 -04:00
|
|
|
"code.gitea.io/gitea/services/gitdiff"
|
2019-04-17 12:06:35 -04:00
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestGetDiffPreview(t *testing.T) {
|
2021-11-12 09:36:47 -05:00
|
|
|
unittest.PrepareTestEnv(t)
|
2023-09-01 07:26:07 -04:00
|
|
|
ctx, _ := contexttest.MockContext(t, "user2/repo1")
|
2019-04-17 12:06:35 -04:00
|
|
|
ctx.SetParams(":id", "1")
|
2023-09-01 07:26:07 -04:00
|
|
|
contexttest.LoadRepo(t, ctx, 1)
|
|
|
|
contexttest.LoadRepoCommit(t, ctx)
|
|
|
|
contexttest.LoadUser(t, ctx, 2)
|
|
|
|
contexttest.LoadGitRepo(t, ctx)
|
2019-11-13 02:01:19 -05:00
|
|
|
defer ctx.Repo.GitRepo.Close()
|
|
|
|
|
2019-04-17 12:06:35 -04:00
|
|
|
branch := ctx.Repo.Repository.DefaultBranch
|
|
|
|
treePath := "README.md"
|
|
|
|
content := "# repo1\n\nDescription for repo1\nthis is a new line"
|
|
|
|
|
2019-09-05 22:20:09 -04:00
|
|
|
expectedDiff := &gitdiff.Diff{
|
2019-04-17 12:06:35 -04:00
|
|
|
TotalAddition: 2,
|
|
|
|
TotalDeletion: 1,
|
2019-09-05 22:20:09 -04:00
|
|
|
Files: []*gitdiff.DiffFile{
|
2019-04-17 12:06:35 -04:00
|
|
|
{
|
|
|
|
Name: "README.md",
|
|
|
|
OldName: "README.md",
|
2022-05-08 18:29:50 -04:00
|
|
|
NameHash: "8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d",
|
2019-04-17 12:06:35 -04:00
|
|
|
Index: 1,
|
|
|
|
Addition: 2,
|
|
|
|
Deletion: 1,
|
|
|
|
Type: 2,
|
|
|
|
IsCreated: false,
|
|
|
|
IsDeleted: false,
|
|
|
|
IsBin: false,
|
|
|
|
IsLFSFile: false,
|
|
|
|
IsRenamed: false,
|
|
|
|
IsSubmodule: false,
|
2019-09-05 22:20:09 -04:00
|
|
|
Sections: []*gitdiff.DiffSection{
|
2019-04-17 12:06:35 -04:00
|
|
|
{
|
2020-06-30 17:34:03 -04:00
|
|
|
FileName: "README.md",
|
|
|
|
Name: "",
|
2019-09-05 22:20:09 -04:00
|
|
|
Lines: []*gitdiff.DiffLine{
|
2019-04-17 12:06:35 -04:00
|
|
|
{
|
2024-02-16 07:16:11 -05:00
|
|
|
LeftIdx: 0,
|
|
|
|
RightIdx: 0,
|
|
|
|
Type: 4,
|
|
|
|
Content: "@@ -1,3 +1,4 @@",
|
|
|
|
Conversations: nil,
|
2019-11-14 21:52:59 -05:00
|
|
|
SectionInfo: &gitdiff.DiffLineSectionInfo{
|
|
|
|
Path: "README.md",
|
|
|
|
LastLeftIdx: 0,
|
|
|
|
LastRightIdx: 0,
|
|
|
|
LeftIdx: 1,
|
|
|
|
RightIdx: 1,
|
|
|
|
LeftHunkSize: 3,
|
|
|
|
RightHunkSize: 4,
|
|
|
|
},
|
2019-04-17 12:06:35 -04:00
|
|
|
},
|
|
|
|
{
|
2024-02-16 07:16:11 -05:00
|
|
|
LeftIdx: 1,
|
|
|
|
RightIdx: 1,
|
|
|
|
Type: 1,
|
|
|
|
Content: " # repo1",
|
|
|
|
Conversations: nil,
|
2019-04-17 12:06:35 -04:00
|
|
|
},
|
|
|
|
{
|
2024-02-16 07:16:11 -05:00
|
|
|
LeftIdx: 2,
|
|
|
|
RightIdx: 2,
|
|
|
|
Type: 1,
|
|
|
|
Content: " ",
|
|
|
|
Conversations: nil,
|
2019-04-17 12:06:35 -04:00
|
|
|
},
|
|
|
|
{
|
2024-02-16 07:16:11 -05:00
|
|
|
LeftIdx: 3,
|
|
|
|
RightIdx: 0,
|
|
|
|
Match: 4,
|
|
|
|
Type: 3,
|
|
|
|
Content: "-Description for repo1",
|
|
|
|
Conversations: nil,
|
2019-04-17 12:06:35 -04:00
|
|
|
},
|
|
|
|
{
|
2024-02-16 07:16:11 -05:00
|
|
|
LeftIdx: 0,
|
|
|
|
RightIdx: 3,
|
|
|
|
Match: 3,
|
|
|
|
Type: 2,
|
|
|
|
Content: "+Description for repo1",
|
|
|
|
Conversations: nil,
|
2019-04-17 12:06:35 -04:00
|
|
|
},
|
|
|
|
{
|
2024-02-16 07:16:11 -05:00
|
|
|
LeftIdx: 0,
|
|
|
|
RightIdx: 4,
|
|
|
|
Match: -1,
|
|
|
|
Type: 2,
|
|
|
|
Content: "+this is a new line",
|
|
|
|
Conversations: nil,
|
2019-04-17 12:06:35 -04:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
IsIncomplete: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
IsIncomplete: false,
|
|
|
|
}
|
2020-05-26 01:58:07 -04:00
|
|
|
expectedDiff.NumFiles = len(expectedDiff.Files)
|
2019-04-17 12:06:35 -04:00
|
|
|
|
|
|
|
t.Run("with given branch", func(t *testing.T) {
|
2022-01-19 18:26:57 -05:00
|
|
|
diff, err := GetDiffPreview(ctx, ctx.Repo.Repository, branch, treePath, content)
|
2020-07-19 05:53:40 -04:00
|
|
|
assert.NoError(t, err)
|
2021-11-17 15:37:00 -05:00
|
|
|
expectedBs, err := json.Marshal(expectedDiff)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
bs, err := json.Marshal(diff)
|
|
|
|
assert.NoError(t, err)
|
2022-05-08 18:29:50 -04:00
|
|
|
assert.EqualValues(t, string(expectedBs), string(bs))
|
2019-04-17 12:06:35 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("empty branch, same results", func(t *testing.T) {
|
2022-01-19 18:26:57 -05:00
|
|
|
diff, err := GetDiffPreview(ctx, ctx.Repo.Repository, "", treePath, content)
|
2020-07-19 05:53:40 -04:00
|
|
|
assert.NoError(t, err)
|
2021-11-17 15:37:00 -05:00
|
|
|
expectedBs, err := json.Marshal(expectedDiff)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
bs, err := json.Marshal(diff)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, expectedBs, bs)
|
2019-04-17 12:06:35 -04:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetDiffPreviewErrors(t *testing.T) {
|
2021-11-12 09:36:47 -05:00
|
|
|
unittest.PrepareTestEnv(t)
|
2023-09-01 07:26:07 -04:00
|
|
|
ctx, _ := contexttest.MockContext(t, "user2/repo1")
|
2019-04-17 12:06:35 -04:00
|
|
|
ctx.SetParams(":id", "1")
|
2023-09-01 07:26:07 -04:00
|
|
|
contexttest.LoadRepo(t, ctx, 1)
|
|
|
|
contexttest.LoadRepoCommit(t, ctx)
|
|
|
|
contexttest.LoadUser(t, ctx, 2)
|
|
|
|
contexttest.LoadGitRepo(t, ctx)
|
2019-11-13 02:01:19 -05:00
|
|
|
defer ctx.Repo.GitRepo.Close()
|
|
|
|
|
2019-04-17 12:06:35 -04:00
|
|
|
branch := ctx.Repo.Repository.DefaultBranch
|
|
|
|
treePath := "README.md"
|
|
|
|
content := "# repo1\n\nDescription for repo1\nthis is a new line"
|
|
|
|
|
|
|
|
t.Run("empty repo", func(t *testing.T) {
|
2022-01-19 18:26:57 -05:00
|
|
|
diff, err := GetDiffPreview(ctx, &repo_model.Repository{}, branch, treePath, content)
|
2019-04-17 12:06:35 -04:00
|
|
|
assert.Nil(t, diff)
|
|
|
|
assert.EqualError(t, err, "repository does not exist [id: 0, uid: 0, owner_name: , name: ]")
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("bad branch", func(t *testing.T) {
|
|
|
|
badBranch := "bad_branch"
|
2022-01-19 18:26:57 -05:00
|
|
|
diff, err := GetDiffPreview(ctx, ctx.Repo.Repository, badBranch, treePath, content)
|
2019-04-17 12:06:35 -04:00
|
|
|
assert.Nil(t, diff)
|
|
|
|
assert.EqualError(t, err, "branch does not exist [name: "+badBranch+"]")
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("empty treePath", func(t *testing.T) {
|
2022-01-19 18:26:57 -05:00
|
|
|
diff, err := GetDiffPreview(ctx, ctx.Repo.Repository, branch, "", content)
|
2019-04-17 12:06:35 -04:00
|
|
|
assert.Nil(t, diff)
|
|
|
|
assert.EqualError(t, err, "path is invalid [path: ]")
|
|
|
|
})
|
|
|
|
}
|