64 lines
2.4 KiB
Go
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)
|
|
}
|
|
}
|