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 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package vagrant
  4. import (
  5. "archive/tar"
  6. "bytes"
  7. "compress/gzip"
  8. "io"
  9. "testing"
  10. "code.gitea.io/gitea/modules/json"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. const (
  14. author = "gitea"
  15. description = "Package Description"
  16. projectURL = "https://gitea.io"
  17. repositoryURL = "https://gitea.io/gitea/gitea"
  18. )
  19. func TestParseMetadataFromBox(t *testing.T) {
  20. createArchive := func(files map[string][]byte) io.Reader {
  21. var buf bytes.Buffer
  22. zw := gzip.NewWriter(&buf)
  23. tw := tar.NewWriter(zw)
  24. for filename, content := range files {
  25. hdr := &tar.Header{
  26. Name: filename,
  27. Mode: 0o600,
  28. Size: int64(len(content)),
  29. }
  30. tw.WriteHeader(hdr)
  31. tw.Write(content)
  32. }
  33. tw.Close()
  34. zw.Close()
  35. return &buf
  36. }
  37. t.Run("MissingInfoFile", func(t *testing.T) {
  38. data := createArchive(map[string][]byte{"dummy.txt": {}})
  39. metadata, err := ParseMetadataFromBox(data)
  40. assert.NotNil(t, metadata)
  41. assert.NoError(t, err)
  42. })
  43. t.Run("Valid", func(t *testing.T) {
  44. content, err := json.Marshal(map[string]string{
  45. "description": description,
  46. "author": author,
  47. "website": projectURL,
  48. "repository": repositoryURL,
  49. })
  50. assert.NoError(t, err)
  51. data := createArchive(map[string][]byte{"info.json": content})
  52. metadata, err := ParseMetadataFromBox(data)
  53. assert.NotNil(t, metadata)
  54. assert.NoError(t, err)
  55. assert.Equal(t, author, metadata.Author)
  56. assert.Equal(t, description, metadata.Description)
  57. assert.Equal(t, projectURL, metadata.ProjectURL)
  58. assert.Equal(t, repositoryURL, metadata.RepositoryURL)
  59. })
  60. }
  61. func TestParseInfoFile(t *testing.T) {
  62. t.Run("UnknownKeys", func(t *testing.T) {
  63. content, err := json.Marshal(map[string]string{
  64. "package": "",
  65. "dummy": "",
  66. })
  67. assert.NoError(t, err)
  68. metadata, err := ParseInfoFile(bytes.NewReader(content))
  69. assert.NotNil(t, metadata)
  70. assert.NoError(t, err)
  71. assert.Empty(t, metadata.Author)
  72. assert.Empty(t, metadata.Description)
  73. assert.Empty(t, metadata.ProjectURL)
  74. assert.Empty(t, metadata.RepositoryURL)
  75. })
  76. t.Run("Valid", func(t *testing.T) {
  77. content, err := json.Marshal(map[string]string{
  78. "description": description,
  79. "author": author,
  80. "website": projectURL,
  81. "repository": repositoryURL,
  82. })
  83. assert.NoError(t, err)
  84. metadata, err := ParseInfoFile(bytes.NewReader(content))
  85. assert.NotNil(t, metadata)
  86. assert.NoError(t, err)
  87. assert.Equal(t, author, metadata.Author)
  88. assert.Equal(t, description, metadata.Description)
  89. assert.Equal(t, projectURL, metadata.ProjectURL)
  90. assert.Equal(t, repositoryURL, metadata.RepositoryURL)
  91. })
  92. }