mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-05-22 01:34:18 +00:00
feat: improve nuget nuspec api
This commit is contained in:
parent
8205ed9495
commit
bc72fd7f46
5 changed files with 413 additions and 175 deletions
121
tests/integration/doctor_packages_nuget_test.go
Normal file
121
tests/integration/doctor_packages_nuget_test.go
Normal file
|
@ -0,0 +1,121 @@
|
|||
// Copyright 2024 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package integration
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/models/db"
|
||||
packages_model "code.gitea.io/gitea/models/packages"
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
packages_module "code.gitea.io/gitea/modules/packages"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
"code.gitea.io/gitea/modules/test"
|
||||
doctor "code.gitea.io/gitea/services/doctor"
|
||||
packages_service "code.gitea.io/gitea/services/packages"
|
||||
"code.gitea.io/gitea/tests"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestDoctorPackagesNuget(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t, 1)()
|
||||
// use local storage for tests because minio is too flaky
|
||||
defer test.MockVariableValue(&setting.Packages.Storage.Type, setting.LocalStorageType)()
|
||||
|
||||
logger := log.GetLogger("doctor")
|
||||
|
||||
ctx := db.DefaultContext
|
||||
|
||||
packageName := "test.package"
|
||||
packageVersion := "1.0.3"
|
||||
packageAuthors := "KN4CK3R"
|
||||
packageDescription := "Gitea Test Package"
|
||||
|
||||
createPackage := func(id, version string) io.Reader {
|
||||
var buf bytes.Buffer
|
||||
archive := zip.NewWriter(&buf)
|
||||
w, _ := archive.Create("package.nuspec")
|
||||
w.Write([]byte(`<?xml version="1.0" encoding="utf-8"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>` + id + `</id>
|
||||
<version>` + version + `</version>
|
||||
<authors>` + packageAuthors + `</authors>
|
||||
<description>` + packageDescription + `</description>
|
||||
<dependencies>
|
||||
<group targetFramework=".NETStandard2.0">
|
||||
<dependency id="Microsoft.CSharp" version="4.5.0" />
|
||||
</group>
|
||||
</dependencies>
|
||||
</metadata>
|
||||
</package>`))
|
||||
archive.Close()
|
||||
return &buf
|
||||
}
|
||||
|
||||
pkg := createPackage(packageName, packageVersion)
|
||||
|
||||
pkgBuf, err := packages_module.CreateHashedBufferFromReader(pkg)
|
||||
assert.NoError(t, err, "Error creating hashed buffer from nupkg")
|
||||
defer pkgBuf.Close()
|
||||
|
||||
doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
assert.NoError(t, err, "Error getting user by ID 2")
|
||||
|
||||
t.Run("PackagesNugetNuspecCheck", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
pi := &packages_service.PackageInfo{
|
||||
Owner: doer,
|
||||
PackageType: packages_model.TypeNuGet,
|
||||
Name: packageName,
|
||||
Version: packageVersion,
|
||||
}
|
||||
_, _, err := packages_service.CreatePackageAndAddFile(
|
||||
ctx,
|
||||
&packages_service.PackageCreationInfo{
|
||||
PackageInfo: *pi,
|
||||
SemverCompatible: true,
|
||||
Creator: doer,
|
||||
Metadata: nil,
|
||||
},
|
||||
&packages_service.PackageFileCreationInfo{
|
||||
PackageFileInfo: packages_service.PackageFileInfo{
|
||||
Filename: strings.ToLower(fmt.Sprintf("%s.%s.nupkg", packageName, packageVersion)),
|
||||
},
|
||||
Creator: doer,
|
||||
Data: pkgBuf,
|
||||
IsLead: true,
|
||||
},
|
||||
)
|
||||
assert.NoError(t, err, "Error creating package and adding file")
|
||||
|
||||
assert.NoError(t, doctor.PackagesNugetNuspecCheck(ctx, logger, true), "Doctor check failed")
|
||||
|
||||
s, _, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
|
||||
ctx,
|
||||
&packages_service.PackageInfo{
|
||||
Owner: doer,
|
||||
PackageType: packages_model.TypeNuGet,
|
||||
Name: packageName,
|
||||
Version: packageVersion,
|
||||
},
|
||||
&packages_service.PackageFileInfo{
|
||||
Filename: strings.ToLower(fmt.Sprintf("%s.nuspec", packageName)),
|
||||
},
|
||||
)
|
||||
|
||||
assert.NoError(t, err, "Error getting nuspec file stream by package name and version")
|
||||
defer s.Close()
|
||||
|
||||
assert.Equal(t, fmt.Sprintf("%s.nuspec", packageName), pf.Name, "Not a nuspec")
|
||||
})
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue