code.gitea.io/gitea@v1.22.3/modules/packages/swift/metadata_test.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package swift 5 6 import ( 7 "archive/zip" 8 "bytes" 9 "strings" 10 "testing" 11 12 "github.com/hashicorp/go-version" 13 "github.com/stretchr/testify/assert" 14 ) 15 16 const ( 17 packageName = "gitea" 18 packageVersion = "1.0.1" 19 packageDescription = "Package Description" 20 packageRepositoryURL = "https://gitea.io/gitea/gitea" 21 packageAuthor = "KN4CK3R" 22 packageLicense = "MIT" 23 ) 24 25 func TestParsePackage(t *testing.T) { 26 createArchive := func(files map[string][]byte) *bytes.Reader { 27 var buf bytes.Buffer 28 zw := zip.NewWriter(&buf) 29 for filename, content := range files { 30 w, _ := zw.Create(filename) 31 w.Write(content) 32 } 33 zw.Close() 34 return bytes.NewReader(buf.Bytes()) 35 } 36 37 t.Run("MissingManifestFile", func(t *testing.T) { 38 data := createArchive(map[string][]byte{"dummy.txt": {}}) 39 40 p, err := ParsePackage(data, data.Size(), nil) 41 assert.Nil(t, p) 42 assert.ErrorIs(t, err, ErrMissingManifestFile) 43 }) 44 45 t.Run("ManifestFileTooLarge", func(t *testing.T) { 46 data := createArchive(map[string][]byte{ 47 "Package.swift": make([]byte, maxManifestFileSize+1), 48 }) 49 50 p, err := ParsePackage(data, data.Size(), nil) 51 assert.Nil(t, p) 52 assert.ErrorIs(t, err, ErrManifestFileTooLarge) 53 }) 54 55 t.Run("WithoutMetadata", func(t *testing.T) { 56 content1 := "// swift-tools-version:5.7\n//\n// Package.swift" 57 content2 := "// swift-tools-version:5.6\n//\n// Package@swift-5.6.swift" 58 59 data := createArchive(map[string][]byte{ 60 "Package.swift": []byte(content1), 61 "Package@swift-5.5.swift": []byte(content2), 62 }) 63 64 p, err := ParsePackage(data, data.Size(), nil) 65 assert.NotNil(t, p) 66 assert.NoError(t, err) 67 68 assert.NotNil(t, p.Metadata) 69 assert.Empty(t, p.RepositoryURLs) 70 assert.Len(t, p.Metadata.Manifests, 2) 71 m := p.Metadata.Manifests[""] 72 assert.Equal(t, "5.7", m.ToolsVersion) 73 assert.Equal(t, content1, m.Content) 74 m = p.Metadata.Manifests["5.5"] 75 assert.Equal(t, "5.6", m.ToolsVersion) 76 assert.Equal(t, content2, m.Content) 77 }) 78 79 t.Run("WithMetadata", func(t *testing.T) { 80 data := createArchive(map[string][]byte{ 81 "Package.swift": []byte("// swift-tools-version:5.7\n//\n// Package.swift"), 82 }) 83 84 p, err := ParsePackage( 85 data, 86 data.Size(), 87 strings.NewReader(`{"name":"`+packageName+`","version":"`+packageVersion+`","description":"`+packageDescription+`","keywords":["swift","package"],"license":"`+packageLicense+`","codeRepository":"`+packageRepositoryURL+`","author":{"givenName":"`+packageAuthor+`"},"repositoryURLs":["`+packageRepositoryURL+`"]}`), 88 ) 89 assert.NotNil(t, p) 90 assert.NoError(t, err) 91 92 assert.NotNil(t, p.Metadata) 93 assert.Len(t, p.Metadata.Manifests, 1) 94 m := p.Metadata.Manifests[""] 95 assert.Equal(t, "5.7", m.ToolsVersion) 96 97 assert.Equal(t, packageDescription, p.Metadata.Description) 98 assert.ElementsMatch(t, []string{"swift", "package"}, p.Metadata.Keywords) 99 assert.Equal(t, packageLicense, p.Metadata.License) 100 assert.Equal(t, packageAuthor, p.Metadata.Author.GivenName) 101 assert.Equal(t, packageRepositoryURL, p.Metadata.RepositoryURL) 102 assert.ElementsMatch(t, []string{packageRepositoryURL}, p.RepositoryURLs) 103 }) 104 } 105 106 func TestTrimmedVersionString(t *testing.T) { 107 cases := []struct { 108 Version *version.Version 109 Expected string 110 }{ 111 { 112 Version: version.Must(version.NewVersion("1")), 113 Expected: "1.0", 114 }, 115 { 116 Version: version.Must(version.NewVersion("1.0")), 117 Expected: "1.0", 118 }, 119 { 120 Version: version.Must(version.NewVersion("1.0.0")), 121 Expected: "1.0", 122 }, 123 { 124 Version: version.Must(version.NewVersion("1.0.1")), 125 Expected: "1.0.1", 126 }, 127 { 128 Version: version.Must(version.NewVersion("1.0+meta")), 129 Expected: "1.0", 130 }, 131 { 132 Version: version.Must(version.NewVersion("1.0.0+meta")), 133 Expected: "1.0", 134 }, 135 { 136 Version: version.Must(version.NewVersion("1.0.1+meta")), 137 Expected: "1.0.1", 138 }, 139 } 140 141 for _, c := range cases { 142 assert.Equal(t, c.Expected, TrimmedVersionString(c.Version)) 143 } 144 }