2022-03-30 11:42:47 +03:00
// Copyright 2021 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2022-03-30 11:42:47 +03:00
package nuget
import (
"archive/zip"
"bytes"
"testing"
"github.com/stretchr/testify/assert"
)
const (
id = "System.Gitea"
semver = "1.0.1"
authors = "Gitea Authors"
projectURL = "https://gitea.io"
description = "Package Description"
releaseNotes = "Package Release Notes"
2024-04-07 19:46:59 +03:00
readme = "Readme"
2022-03-30 11:42:47 +03:00
repositoryURL = "https://gitea.io/gitea/gitea"
targetFramework = ".NETStandard2.1"
dependencyID = "System.Text.Json"
dependencyVersion = "5.0.0"
)
const nuspecContent = ` < ? xml version = "1.0" encoding = "utf-8" ? >
< package xmlns = "http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd" >
< metadata >
< id > ` + id + ` < / id >
< version > ` + semver + ` < / version >
< authors > ` + authors + ` < / authors >
< requireLicenseAcceptance > true < / requireLicenseAcceptance >
< projectUrl > ` + projectURL + ` < / projectUrl >
< description > ` + description + ` < / description >
< releaseNotes > ` + releaseNotes + ` < / releaseNotes >
< repository url = "` + repositoryURL + `" / >
2024-04-07 19:46:59 +03:00
< readme > README . md < / readme >
2022-03-30 11:42:47 +03:00
< dependencies >
< group targetFramework = "` + targetFramework + `" >
< dependency id = "` + dependencyID + `" version = "` + dependencyVersion + `" exclude = "Build,Analyzers" / >
< / group >
< / dependencies >
< / metadata >
< / package > `
const symbolsNuspecContent = ` < ? xml version = "1.0" encoding = "utf-8" ? >
< package xmlns = "http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd" >
< metadata >
< id > ` + id + ` < / id >
< version > ` + semver + ` < / version >
< description > ` + description + ` < / description >
< packageTypes >
< packageType name = "SymbolsPackage" / >
< / packageTypes >
< dependencies >
< group targetFramework = "` + targetFramework + `" / >
< / dependencies >
< / metadata >
< / package > `
func TestParsePackageMetaData ( t * testing . T ) {
2024-04-07 19:46:59 +03:00
createArchive := func ( files map [ string ] string ) [ ] byte {
2022-03-30 11:42:47 +03:00
var buf bytes . Buffer
archive := zip . NewWriter ( & buf )
2024-04-07 19:46:59 +03:00
for name , content := range files {
w , _ := archive . Create ( name )
w . Write ( [ ] byte ( content ) )
}
2022-03-30 11:42:47 +03:00
archive . Close ( )
return buf . Bytes ( )
}
t . Run ( "MissingNuspecFile" , func ( t * testing . T ) {
2024-04-07 19:46:59 +03:00
data := createArchive ( map [ string ] string { "dummy.txt" : "" } )
2022-03-30 11:42:47 +03:00
np , err := ParsePackageMetaData ( bytes . NewReader ( data ) , int64 ( len ( data ) ) )
assert . Nil ( t , np )
assert . ErrorIs ( t , err , ErrMissingNuspecFile )
} )
t . Run ( "MissingNuspecFileInRoot" , func ( t * testing . T ) {
2024-04-07 19:46:59 +03:00
data := createArchive ( map [ string ] string { "sub/package.nuspec" : "" } )
2022-03-30 11:42:47 +03:00
np , err := ParsePackageMetaData ( bytes . NewReader ( data ) , int64 ( len ( data ) ) )
assert . Nil ( t , np )
assert . ErrorIs ( t , err , ErrMissingNuspecFile )
} )
t . Run ( "InvalidNuspecFile" , func ( t * testing . T ) {
2024-04-07 19:46:59 +03:00
data := createArchive ( map [ string ] string { "package.nuspec" : "" } )
2022-03-30 11:42:47 +03:00
np , err := ParsePackageMetaData ( bytes . NewReader ( data ) , int64 ( len ( data ) ) )
assert . Nil ( t , np )
assert . Error ( t , err )
} )
t . Run ( "InvalidPackageId" , func ( t * testing . T ) {
2024-04-07 19:46:59 +03:00
data := createArchive ( map [ string ] string { "package.nuspec" : ` < ? xml version = "1.0" encoding = "utf-8" ? >
2022-03-30 11:42:47 +03:00
< package xmlns = "http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd" >
< metadata > < / metadata >
2024-04-07 19:46:59 +03:00
< / package > ` } )
2022-03-30 11:42:47 +03:00
np , err := ParsePackageMetaData ( bytes . NewReader ( data ) , int64 ( len ( data ) ) )
assert . Nil ( t , np )
assert . ErrorIs ( t , err , ErrNuspecInvalidID )
} )
t . Run ( "InvalidPackageVersion" , func ( t * testing . T ) {
2024-04-07 19:46:59 +03:00
data := createArchive ( map [ string ] string { "package.nuspec" : ` < ? xml version = "1.0" encoding = "utf-8" ? >
2022-03-30 11:42:47 +03:00
< package xmlns = "http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd" >
< metadata >
2024-04-07 19:46:59 +03:00
< id > ` + id + ` < / id >
2022-03-30 11:42:47 +03:00
< / metadata >
2024-04-07 19:46:59 +03:00
< / package > ` } )
2022-03-30 11:42:47 +03:00
np , err := ParsePackageMetaData ( bytes . NewReader ( data ) , int64 ( len ( data ) ) )
assert . Nil ( t , np )
assert . ErrorIs ( t , err , ErrNuspecInvalidVersion )
} )
2024-04-07 19:46:59 +03:00
t . Run ( "MissingReadme" , func ( t * testing . T ) {
data := createArchive ( map [ string ] string { "package.nuspec" : nuspecContent } )
2022-03-30 11:42:47 +03:00
np , err := ParsePackageMetaData ( bytes . NewReader ( data ) , int64 ( len ( data ) ) )
assert . NoError ( t , err )
assert . NotNil ( t , np )
2024-04-07 19:46:59 +03:00
assert . Empty ( t , np . Metadata . Readme )
2022-03-30 11:42:47 +03:00
} )
t . Run ( "Dependency Package" , func ( t * testing . T ) {
2024-04-07 19:46:59 +03:00
data := createArchive ( map [ string ] string {
"package.nuspec" : nuspecContent ,
"README.md" : readme ,
} )
np , err := ParsePackageMetaData ( bytes . NewReader ( data ) , int64 ( len ( data ) ) )
2022-03-30 11:42:47 +03:00
assert . NoError ( t , err )
assert . NotNil ( t , np )
assert . Equal ( t , DependencyPackage , np . PackageType )
assert . Equal ( t , id , np . ID )
assert . Equal ( t , semver , np . Version )
assert . Equal ( t , authors , np . Metadata . Authors )
assert . Equal ( t , projectURL , np . Metadata . ProjectURL )
assert . Equal ( t , description , np . Metadata . Description )
assert . Equal ( t , releaseNotes , np . Metadata . ReleaseNotes )
2024-04-07 19:46:59 +03:00
assert . Equal ( t , readme , np . Metadata . Readme )
2022-03-30 11:42:47 +03:00
assert . Equal ( t , repositoryURL , np . Metadata . RepositoryURL )
assert . Len ( t , np . Metadata . Dependencies , 1 )
assert . Contains ( t , np . Metadata . Dependencies , targetFramework )
deps := np . Metadata . Dependencies [ targetFramework ]
assert . Len ( t , deps , 1 )
assert . Equal ( t , dependencyID , deps [ 0 ] . ID )
assert . Equal ( t , dependencyVersion , deps [ 0 ] . Version )
2022-12-21 06:20:23 +03:00
t . Run ( "NormalizedVersion" , func ( t * testing . T ) {
2024-04-07 19:46:59 +03:00
data := createArchive ( map [ string ] string { "package.nuspec" : ` < ? xml version = "1.0" encoding = "utf-8" ? >
< package xmlns = "http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd" >
< metadata >
< id > test < / id >
< version > 1.04 .5 .2 .5 - rc .1 + metadata < / version >
< / metadata >
< / package > ` } )
np , err := ParsePackageMetaData ( bytes . NewReader ( data ) , int64 ( len ( data ) ) )
2022-12-21 06:20:23 +03:00
assert . NoError ( t , err )
assert . NotNil ( t , np )
assert . Equal ( t , "1.4.5.2-rc.1" , np . Version )
} )
2022-03-30 11:42:47 +03:00
} )
t . Run ( "Symbols Package" , func ( t * testing . T ) {
2024-04-07 19:46:59 +03:00
data := createArchive ( map [ string ] string { "package.nuspec" : symbolsNuspecContent } )
np , err := ParsePackageMetaData ( bytes . NewReader ( data ) , int64 ( len ( data ) ) )
2022-03-30 11:42:47 +03:00
assert . NoError ( t , err )
assert . NotNil ( t , np )
assert . Equal ( t , SymbolsPackage , np . PackageType )
assert . Equal ( t , id , np . ID )
assert . Equal ( t , semver , np . Version )
assert . Equal ( t , description , np . Metadata . Description )
assert . Empty ( t , np . Metadata . Dependencies )
} )
}