Files

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)
}