Files

64 lines
2.4 KiB
Go

package adminassets
import (
"os"
"path/filepath"
"strings"
"testing"
)
func TestValidateDiskChecksDynamicImportsAndEveryOutput(t *testing.T) {
root := t.TempDir()
if err := os.MkdirAll(filepath.Join(root, "assets"), 0o755); err != nil {
t.Fatal(err)
}
writeAssetTestFile(t, root, "index.html", `<script type="module" src="/admin/assets/index-12345678.js"></script>`)
writeAssetTestFile(t, root, "admin-build.json", `{"buildId":"build-1"}`)
writeAssetTestFile(t, root, "asset-manifest.json", `{
"src/main.ts":{"file":"assets/index-12345678.js","dynamicImports":["src/views/FeedbacksView.vue"]},
"src/views/FeedbacksView.vue":{"file":"assets/FeedbacksView-12345678.js","css":["assets/FeedbacksView-12345678.css"]}
}`)
writeAssetTestFile(t, root, "assets/index-12345678.js", "import('./FeedbacksView-12345678.js')")
writeAssetTestFile(t, root, "assets/FeedbacksView-12345678.js", "export default {}")
writeAssetTestFile(t, root, "assets/FeedbacksView-12345678.css", ".page{}")
status := ValidateDisk(root, "build-1")
if !status.Ready || status.ManifestEntries != 2 {
t.Fatalf("valid build rejected: %#v", status)
}
if err := os.Remove(filepath.Join(root, "assets", "FeedbacksView-12345678.js")); err != nil {
t.Fatal(err)
}
status = ValidateDisk(root, "build-1")
if status.Ready || !strings.Contains(status.ValidationError, "FeedbacksView-12345678.js") {
t.Fatalf("missing lazy chunk not diagnosed: %#v", status)
}
}
func TestValidateDiskRejectsBuildIDMismatch(t *testing.T) {
root := t.TempDir()
if err := os.MkdirAll(filepath.Join(root, "assets"), 0o755); err != nil {
t.Fatal(err)
}
writeAssetTestFile(t, root, "index.html", "<main></main>")
writeAssetTestFile(t, root, "admin-build.json", `{"buildId":"old"}`)
writeAssetTestFile(t, root, "asset-manifest.json", `{"src/main.ts":{"file":"assets/index-12345678.js"}}`)
writeAssetTestFile(t, root, "assets/index-12345678.js", "export{}")
status := ValidateDisk(root, "new")
if status.Ready || !strings.Contains(status.ValidationError, "does not match") {
t.Fatalf("build mismatch not rejected: %#v", status)
}
}
func writeAssetTestFile(t *testing.T, root, name, value string) {
t.Helper()
path := filepath.Join(root, filepath.FromSlash(name))
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(path, []byte(value), 0o644); err != nil {
t.Fatal(err)
}
}