You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

metadata_test.go 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package pub
  4. import (
  5. "archive/tar"
  6. "bytes"
  7. "compress/gzip"
  8. "io"
  9. "strings"
  10. "testing"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. const (
  14. packageName = "gitea"
  15. packageVersion = "1.0.1"
  16. description = "Package Description"
  17. projectURL = "https://gitea.com"
  18. repositoryURL = "https://gitea.com/gitea/gitea"
  19. documentationURL = "https://docs.gitea.com"
  20. )
  21. const pubspecContent = `name: ` + packageName + `
  22. version: ` + packageVersion + `
  23. description: ` + description + `
  24. homepage: ` + projectURL + `
  25. repository: ` + repositoryURL + `
  26. documentation: ` + documentationURL + `
  27. environment:
  28. sdk: '>=2.16.0 <3.0.0'
  29. dependencies:
  30. flutter:
  31. sdk: flutter
  32. path: '>=1.8.0 <3.0.0'
  33. dev_dependencies:
  34. http: '>=0.13.0'`
  35. func TestParsePackage(t *testing.T) {
  36. createArchive := func(files map[string][]byte) io.Reader {
  37. var buf bytes.Buffer
  38. zw := gzip.NewWriter(&buf)
  39. tw := tar.NewWriter(zw)
  40. for filename, content := range files {
  41. hdr := &tar.Header{
  42. Name: filename,
  43. Mode: 0o600,
  44. Size: int64(len(content)),
  45. }
  46. tw.WriteHeader(hdr)
  47. tw.Write(content)
  48. }
  49. tw.Close()
  50. zw.Close()
  51. return &buf
  52. }
  53. t.Run("MissingPubspecFile", func(t *testing.T) {
  54. data := createArchive(map[string][]byte{"dummy.txt": {}})
  55. pp, err := ParsePackage(data)
  56. assert.Nil(t, pp)
  57. assert.ErrorIs(t, err, ErrMissingPubspecFile)
  58. })
  59. t.Run("PubspecFileTooLarge", func(t *testing.T) {
  60. data := createArchive(map[string][]byte{"pubspec.yaml": make([]byte, 200*1024)})
  61. pp, err := ParsePackage(data)
  62. assert.Nil(t, pp)
  63. assert.ErrorIs(t, err, ErrPubspecFileTooLarge)
  64. })
  65. t.Run("InvalidPubspecFile", func(t *testing.T) {
  66. data := createArchive(map[string][]byte{"pubspec.yaml": {}})
  67. pp, err := ParsePackage(data)
  68. assert.Nil(t, pp)
  69. assert.Error(t, err)
  70. })
  71. t.Run("Valid", func(t *testing.T) {
  72. data := createArchive(map[string][]byte{"pubspec.yaml": []byte(pubspecContent)})
  73. pp, err := ParsePackage(data)
  74. assert.NoError(t, err)
  75. assert.NotNil(t, pp)
  76. assert.Empty(t, pp.Metadata.Readme)
  77. })
  78. t.Run("ValidWithReadme", func(t *testing.T) {
  79. data := createArchive(map[string][]byte{"pubspec.yaml": []byte(pubspecContent), "README.md": []byte("readme")})
  80. pp, err := ParsePackage(data)
  81. assert.NoError(t, err)
  82. assert.NotNil(t, pp)
  83. assert.Equal(t, "readme", pp.Metadata.Readme)
  84. })
  85. }
  86. func TestParsePubspecMetadata(t *testing.T) {
  87. t.Run("InvalidName", func(t *testing.T) {
  88. for _, name := range []string{"123abc", "ab-cd"} {
  89. pp, err := ParsePubspecMetadata(strings.NewReader(`name: ` + name))
  90. assert.Nil(t, pp)
  91. assert.ErrorIs(t, err, ErrInvalidName)
  92. }
  93. })
  94. t.Run("InvalidVersion", func(t *testing.T) {
  95. pp, err := ParsePubspecMetadata(strings.NewReader(`name: dummy
  96. version: invalid`))
  97. assert.Nil(t, pp)
  98. assert.ErrorIs(t, err, ErrInvalidVersion)
  99. })
  100. t.Run("Valid", func(t *testing.T) {
  101. pp, err := ParsePubspecMetadata(strings.NewReader(pubspecContent))
  102. assert.NoError(t, err)
  103. assert.NotNil(t, pp)
  104. assert.Equal(t, packageName, pp.Name)
  105. assert.Equal(t, packageVersion, pp.Version)
  106. assert.Equal(t, description, pp.Metadata.Description)
  107. assert.Equal(t, projectURL, pp.Metadata.ProjectURL)
  108. assert.Equal(t, repositoryURL, pp.Metadata.RepositoryURL)
  109. assert.Equal(t, documentationURL, pp.Metadata.DocumentationURL)
  110. assert.NotNil(t, pp.Metadata.Pubspec)
  111. })
  112. }