mirror of
https://github.com/langgenius/dify-plugin-daemon.git
synced 2026-07-22 01:35:24 -04:00
122 lines
3.4 KiB
Go
122 lines
3.4 KiB
Go
package bundle_packager
|
|
|
|
import (
|
|
"archive/zip"
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestNewMemoryZipBundlePackager_AssetsExtraction(t *testing.T) {
|
|
// Create a test ZIP file with assets
|
|
zipBuffer := bytes.NewBuffer([]byte{})
|
|
zipWriter := zip.NewWriter(zipBuffer)
|
|
|
|
// Add manifest.yaml
|
|
manifest, err := zipWriter.Create("manifest.yaml")
|
|
assert.NoError(t, err)
|
|
_, err = manifest.Write([]byte("version: 0.0.1\nname: test-bundle\n"))
|
|
assert.NoError(t, err)
|
|
|
|
// Add assets in _assets directory using forward slashes (ZIP standard)
|
|
asset1, err := zipWriter.Create("_assets/icon.png")
|
|
assert.NoError(t, err)
|
|
_, err = asset1.Write([]byte("fake-png-data"))
|
|
assert.NoError(t, err)
|
|
|
|
asset2, err := zipWriter.Create("_assets/logo.svg")
|
|
assert.NoError(t, err)
|
|
_, err = asset2.Write([]byte("fake-svg-data"))
|
|
assert.NoError(t, err)
|
|
|
|
// Add nested asset
|
|
asset3, err := zipWriter.Create("_assets/subdir/image.jpg")
|
|
assert.NoError(t, err)
|
|
_, err = asset3.Write([]byte("fake-jpg-data"))
|
|
assert.NoError(t, err)
|
|
|
|
err = zipWriter.Close()
|
|
assert.NoError(t, err)
|
|
|
|
// Test MemoryZipBundlePackager
|
|
packager, err := NewMemoryZipBundlePackager(zipBuffer.Bytes())
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, packager)
|
|
|
|
// Verify assets are correctly extracted
|
|
assets, err := packager.Assets()
|
|
assert.NoError(t, err)
|
|
assert.Len(t, assets, 3)
|
|
|
|
// Check each asset exists with correct content (without _assets prefix)
|
|
assert.Contains(t, assets, "icon.png")
|
|
assert.Equal(t, []byte("fake-png-data"), assets["icon.png"])
|
|
|
|
assert.Contains(t, assets, "logo.svg")
|
|
assert.Equal(t, []byte("fake-svg-data"), assets["logo.svg"])
|
|
|
|
assert.Contains(t, assets, "subdir/image.jpg")
|
|
assert.Equal(t, []byte("fake-jpg-data"), assets["subdir/image.jpg"])
|
|
}
|
|
|
|
func TestNewMemoryZipBundlePackager_NoAssets(t *testing.T) {
|
|
// Create a test ZIP file without assets
|
|
zipBuffer := bytes.NewBuffer([]byte{})
|
|
zipWriter := zip.NewWriter(zipBuffer)
|
|
|
|
// Add manifest.yaml only
|
|
manifest, err := zipWriter.Create("manifest.yaml")
|
|
assert.NoError(t, err)
|
|
_, err = manifest.Write([]byte("version: 0.0.1\nname: test-bundle\n"))
|
|
assert.NoError(t, err)
|
|
|
|
err = zipWriter.Close()
|
|
assert.NoError(t, err)
|
|
|
|
// Test MemoryZipBundlePackager
|
|
packager, err := NewMemoryZipBundlePackager(zipBuffer.Bytes())
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, packager)
|
|
|
|
// Verify no assets are extracted
|
|
assets, err := packager.Assets()
|
|
assert.NoError(t, err)
|
|
assert.Len(t, assets, 0)
|
|
}
|
|
|
|
func TestNewMemoryZipBundlePackager_ReadFile(t *testing.T) {
|
|
// Create a test ZIP file
|
|
zipBuffer := bytes.NewBuffer([]byte{})
|
|
zipWriter := zip.NewWriter(zipBuffer)
|
|
|
|
// Add manifest.yaml
|
|
manifest, err := zipWriter.Create("manifest.yaml")
|
|
assert.NoError(t, err)
|
|
_, err = manifest.Write([]byte("version: 0.0.1\nname: test-bundle\n"))
|
|
assert.NoError(t, err)
|
|
|
|
// Add a non-asset file
|
|
readme, err := zipWriter.Create("README.md")
|
|
assert.NoError(t, err)
|
|
_, err = readme.Write([]byte("# Test Bundle"))
|
|
assert.NoError(t, err)
|
|
|
|
err = zipWriter.Close()
|
|
assert.NoError(t, err)
|
|
|
|
// Test MemoryZipBundlePackager
|
|
packager, err := NewMemoryZipBundlePackager(zipBuffer.Bytes())
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, packager)
|
|
|
|
// Test reading file
|
|
content, err := packager.ReadFile("README.md")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []byte("# Test Bundle"), content)
|
|
|
|
// Test reading non-existent file
|
|
_, err = packager.ReadFile("nonexistent.md")
|
|
assert.Error(t, err)
|
|
}
|