gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package files
  4. import (
  5. "html/template"
  6. "testing"
  7. "code.gitea.io/gitea/models/unittest"
  8. "code.gitea.io/gitea/modules/fileicon"
  9. "code.gitea.io/gitea/modules/git"
  10. api "code.gitea.io/gitea/modules/structs"
  11. "code.gitea.io/gitea/services/contexttest"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func TestGetTreeBySHA(t *testing.T) {
  15. unittest.PrepareTestEnv(t)
  16. ctx, _ := contexttest.MockContext(t, "user2/repo1")
  17. contexttest.LoadRepo(t, ctx, 1)
  18. contexttest.LoadRepoCommit(t, ctx)
  19. contexttest.LoadUser(t, ctx, 2)
  20. contexttest.LoadGitRepo(t, ctx)
  21. defer ctx.Repo.GitRepo.Close()
  22. sha := ctx.Repo.Repository.DefaultBranch
  23. page := 1
  24. perPage := 10
  25. ctx.SetPathParam("id", "1")
  26. ctx.SetPathParam("sha", sha)
  27. tree, err := GetTreeBySHA(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, ctx.PathParam("sha"), page, perPage, true)
  28. assert.NoError(t, err)
  29. expectedTree := &api.GitTreeResponse{
  30. SHA: "65f1bf27bc3bf70f64657658635e66094edbcb4d",
  31. URL: "https://try.gitea.io/api/v1/repos/user2/repo1/git/trees/65f1bf27bc3bf70f64657658635e66094edbcb4d",
  32. Entries: []api.GitEntry{
  33. {
  34. Path: "README.md",
  35. Mode: "100644",
  36. Type: "blob",
  37. Size: 30,
  38. SHA: "4b4851ad51df6a7d9f25c979345979eaeb5b349f",
  39. URL: "https://try.gitea.io/api/v1/repos/user2/repo1/git/blobs/4b4851ad51df6a7d9f25c979345979eaeb5b349f",
  40. },
  41. },
  42. Truncated: false,
  43. Page: 1,
  44. TotalCount: 1,
  45. }
  46. assert.Equal(t, expectedTree, tree)
  47. }
  48. func TestGetTreeViewNodes(t *testing.T) {
  49. unittest.PrepareTestEnv(t)
  50. ctx, _ := contexttest.MockContext(t, "user2/repo1")
  51. ctx.Repo.RefFullName = git.RefNameFromBranch("sub-home-md-img-check")
  52. contexttest.LoadRepo(t, ctx, 1)
  53. contexttest.LoadRepoCommit(t, ctx)
  54. contexttest.LoadUser(t, ctx, 2)
  55. contexttest.LoadGitRepo(t, ctx)
  56. defer ctx.Repo.GitRepo.Close()
  57. curRepoLink := "/any/repo-link"
  58. renderedIconPool := fileicon.NewRenderedIconPool()
  59. mockIconForFile := func(id string) template.HTML {
  60. return template.HTML(`<svg class="svg git-entry-icon octicon-file" width="16" height="16" aria-hidden="true"><use xlink:href="#` + id + `"></use></svg>`)
  61. }
  62. mockIconForFolder := func(id string) template.HTML {
  63. return template.HTML(`<svg class="svg git-entry-icon octicon-file-directory-fill" width="16" height="16" aria-hidden="true"><use xlink:href="#` + id + `"></use></svg>`)
  64. }
  65. mockOpenIconForFolder := func(id string) template.HTML {
  66. return template.HTML(`<svg class="svg git-entry-icon octicon-file-directory-open-fill" width="16" height="16" aria-hidden="true"><use xlink:href="#` + id + `"></use></svg>`)
  67. }
  68. treeNodes, err := GetTreeViewNodes(ctx, curRepoLink, renderedIconPool, ctx.Repo.Commit, "", "")
  69. assert.NoError(t, err)
  70. assert.Equal(t, []*TreeViewNode{
  71. {
  72. EntryName: "docs",
  73. EntryMode: "tree",
  74. FullPath: "docs",
  75. EntryIcon: mockIconForFolder(`svg-mfi-folder-docs`),
  76. EntryIconOpen: mockOpenIconForFolder(`svg-mfi-folder-docs`),
  77. },
  78. }, treeNodes)
  79. treeNodes, err = GetTreeViewNodes(ctx, curRepoLink, renderedIconPool, ctx.Repo.Commit, "", "docs/README.md")
  80. assert.NoError(t, err)
  81. assert.Equal(t, []*TreeViewNode{
  82. {
  83. EntryName: "docs",
  84. EntryMode: "tree",
  85. FullPath: "docs",
  86. EntryIcon: mockIconForFolder(`svg-mfi-folder-docs`),
  87. EntryIconOpen: mockOpenIconForFolder(`svg-mfi-folder-docs`),
  88. Children: []*TreeViewNode{
  89. {
  90. EntryName: "README.md",
  91. EntryMode: "blob",
  92. FullPath: "docs/README.md",
  93. EntryIcon: mockIconForFile(`svg-mfi-readme`),
  94. },
  95. },
  96. },
  97. }, treeNodes)
  98. treeNodes, err = GetTreeViewNodes(ctx, curRepoLink, renderedIconPool, ctx.Repo.Commit, "docs", "README.md")
  99. assert.NoError(t, err)
  100. assert.Equal(t, []*TreeViewNode{
  101. {
  102. EntryName: "README.md",
  103. EntryMode: "blob",
  104. FullPath: "docs/README.md",
  105. EntryIcon: mockIconForFile(`svg-mfi-readme`),
  106. },
  107. }, treeNodes)
  108. }