59 lines
1.7 KiB
Go
59 lines
1.7 KiB
Go
package projectversion
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestCheckReleaseAssets(t *testing.T) {
|
|
t.Run("valid assets", func(t *testing.T) {
|
|
root := setupReleaseAssetRoot(t)
|
|
|
|
require.NoError(t, CheckReleaseAssets(root))
|
|
})
|
|
|
|
t.Run("lfs pointer", func(t *testing.T) {
|
|
root := setupReleaseAssetRoot(t)
|
|
writeReleaseAsset(t, root, "assets/icon.ico", []byte("version https://git-lfs.github.com/spec/v1\noid sha256:abc\nsize 123\n"))
|
|
|
|
err := CheckReleaseAssets(root)
|
|
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "assets/icon.ico 是 Git LFS pointer")
|
|
})
|
|
|
|
t.Run("invalid format", func(t *testing.T) {
|
|
root := setupReleaseAssetRoot(t)
|
|
writeReleaseAsset(t, root, "frontend/public/icon.png", []byte("not a png"))
|
|
|
|
err := CheckReleaseAssets(root)
|
|
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "frontend/public/icon.png 不是有效的前端 PNG 图标")
|
|
})
|
|
}
|
|
|
|
func setupReleaseAssetRoot(t *testing.T) string {
|
|
t.Helper()
|
|
|
|
root := t.TempDir()
|
|
writeReleaseAsset(t, root, "assets/icon.ico", []byte{0x00, 0x00, 0x01, 0x00, 0x01})
|
|
writeReleaseAsset(t, root, "assets/icon.icns", []byte("icnsdata"))
|
|
writeReleaseAsset(t, root, "assets/icon.png", []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00})
|
|
writeReleaseAsset(t, root, "frontend/public/icon.png", []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00})
|
|
|
|
return root
|
|
}
|
|
|
|
func writeReleaseAsset(t *testing.T, root, relPath string, content []byte) {
|
|
t.Helper()
|
|
|
|
fullPath := filepath.Join(root, relPath)
|
|
require.NoError(t, os.MkdirAll(filepath.Dir(fullPath), 0o755))
|
|
require.NoError(t, os.WriteFile(fullPath, content, 0o600))
|
|
}
|