package builder

import (
	"archive/zip"
	"os"
	"path/filepath"
	"testing"
)

func TestZipDirectory(t *testing.T) {
	dir := t.TempDir()
	if err := os.WriteFile(filepath.Join(dir, "README.txt"), []byte("hi"), 0644); err != nil {
		t.Fatal(err)
	}
	zipPath := filepath.Join(t.TempDir(), "pkg.zip")
	if err := zipDirectory(dir, zipPath); err != nil {
		t.Fatal(err)
	}
	r, err := zip.OpenReader(zipPath)
	if err != nil {
		t.Fatal(err)
	}
	defer r.Close()
	if len(r.File) != 1 || r.File[0].Name != "README.txt" {
		t.Fatalf("unexpected zip contents: %+v", r.File)
	}
}

func TestFusionBundleZipName(t *testing.T) {
	got := fusionBundleZipName("My Title")
	if got != "My-Title-package.zip" {
		t.Fatalf("got %q", got)
	}
}

func TestZipDirectoryRejectsInsideSource(t *testing.T) {
	dir := t.TempDir()
	zipPath := filepath.Join(dir, "nested.zip")
	err := zipDirectory(dir, zipPath)
	if err == nil {
		t.Fatal("expected error when zip path is inside source")
	}
}
