gitea源码

metadata_test.go 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package composer
  4. import (
  5. "archive/zip"
  6. "bytes"
  7. "strings"
  8. "testing"
  9. "code.gitea.io/gitea/modules/json"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. const (
  13. name = "gitea/composer-package"
  14. description = "Package Description"
  15. readme = "Package Readme"
  16. comments = "Package Comment"
  17. packageType = "composer-plugin"
  18. author = "Gitea Authors"
  19. email = "no.reply@gitea.io"
  20. homepage = "https://gitea.io"
  21. license = "MIT"
  22. )
  23. const composerContent = `{
  24. "name": "` + name + `",
  25. "description": "` + description + `",
  26. "type": "` + packageType + `",
  27. "license": "` + license + `",
  28. "authors": [
  29. {
  30. "name": "` + author + `",
  31. "email": "` + email + `"
  32. }
  33. ],
  34. "homepage": "` + homepage + `",
  35. "autoload": {
  36. "psr-4": {"Gitea\\ComposerPackage\\": "src/"}
  37. },
  38. "require": {
  39. "php": ">=7.2 || ^8.0"
  40. },
  41. "_comments": "` + comments + `"
  42. }`
  43. func TestLicenseUnmarshal(t *testing.T) {
  44. var l Licenses
  45. assert.NoError(t, json.NewDecoder(strings.NewReader(`["MIT"]`)).Decode(&l))
  46. assert.Len(t, l, 1)
  47. assert.Equal(t, "MIT", l[0])
  48. assert.NoError(t, json.NewDecoder(strings.NewReader(`"MIT"`)).Decode(&l))
  49. assert.Len(t, l, 1)
  50. assert.Equal(t, "MIT", l[0])
  51. }
  52. func TestCommentsUnmarshal(t *testing.T) {
  53. var c Comments
  54. assert.NoError(t, json.NewDecoder(strings.NewReader(`["comment"]`)).Decode(&c))
  55. assert.Len(t, c, 1)
  56. assert.Equal(t, "comment", c[0])
  57. assert.NoError(t, json.NewDecoder(strings.NewReader(`"comment"`)).Decode(&c))
  58. assert.Len(t, c, 1)
  59. assert.Equal(t, "comment", c[0])
  60. }
  61. func TestParsePackage(t *testing.T) {
  62. createArchive := func(files map[string]string) []byte {
  63. var buf bytes.Buffer
  64. archive := zip.NewWriter(&buf)
  65. for name, content := range files {
  66. w, _ := archive.Create(name)
  67. w.Write([]byte(content))
  68. }
  69. archive.Close()
  70. return buf.Bytes()
  71. }
  72. t.Run("MissingComposerFile", func(t *testing.T) {
  73. data := createArchive(map[string]string{"dummy.txt": ""})
  74. cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
  75. assert.Nil(t, cp)
  76. assert.ErrorIs(t, err, ErrMissingComposerFile)
  77. })
  78. t.Run("MissingComposerFileInRoot", func(t *testing.T) {
  79. data := createArchive(map[string]string{"sub/sub/composer.json": ""})
  80. cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
  81. assert.Nil(t, cp)
  82. assert.ErrorIs(t, err, ErrMissingComposerFile)
  83. })
  84. t.Run("InvalidComposerFile", func(t *testing.T) {
  85. data := createArchive(map[string]string{"composer.json": ""})
  86. cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
  87. assert.Nil(t, cp)
  88. assert.Error(t, err)
  89. })
  90. t.Run("InvalidPackageName", func(t *testing.T) {
  91. data := createArchive(map[string]string{"composer.json": "{}"})
  92. cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
  93. assert.Nil(t, cp)
  94. assert.ErrorIs(t, err, ErrInvalidName)
  95. })
  96. t.Run("InvalidPackageVersion", func(t *testing.T) {
  97. data := createArchive(map[string]string{"composer.json": `{"name": "gitea/composer-package", "version": "1.a.3"}`})
  98. cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
  99. assert.Nil(t, cp)
  100. assert.ErrorIs(t, err, ErrInvalidVersion)
  101. })
  102. t.Run("InvalidReadmePath", func(t *testing.T) {
  103. data := createArchive(map[string]string{"composer.json": `{"name": "gitea/composer-package", "readme": "sub/README.md"}`})
  104. cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
  105. assert.NoError(t, err)
  106. assert.NotNil(t, cp)
  107. assert.Empty(t, cp.Metadata.Readme)
  108. })
  109. t.Run("Valid", func(t *testing.T) {
  110. data := createArchive(map[string]string{"composer.json": composerContent, "README.md": readme})
  111. cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
  112. assert.NoError(t, err)
  113. assert.NotNil(t, cp)
  114. assert.Equal(t, name, cp.Name)
  115. assert.Empty(t, cp.Version)
  116. assert.Equal(t, description, cp.Metadata.Description)
  117. assert.Equal(t, readme, cp.Metadata.Readme)
  118. assert.Len(t, cp.Metadata.Comments, 1)
  119. assert.Equal(t, comments, cp.Metadata.Comments[0])
  120. assert.Len(t, cp.Metadata.Authors, 1)
  121. assert.Equal(t, author, cp.Metadata.Authors[0].Name)
  122. assert.Equal(t, email, cp.Metadata.Authors[0].Email)
  123. assert.Equal(t, homepage, cp.Metadata.Homepage)
  124. assert.Equal(t, packageType, cp.Type)
  125. assert.Len(t, cp.Metadata.License, 1)
  126. assert.Equal(t, license, cp.Metadata.License[0])
  127. })
  128. }