MCPcopy
hub / github.com/livebud/bud / TestSvelteAwait

Function TestSvelteAwait

framework/view/ssr/ssr_test.go:68–120  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

66}
67
68func TestSvelteAwait(t *testing.T) {
69 is := is.New(t)
70 log := testlog.New()
71 ctx := context.Background()
72 dir := t.TempDir()
73 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
74 w.Header().Add("Content-Type", "text/plain")
75 w.Write([]byte("all good"))
76 }))
77 defer server.Close()
78 td := testdir.New(dir)
79 td.Files["view/index.svelte"] = `
80 <script>
81 let promise = fetch("` + server.URL + `").then(res => res.text())
82 </script>
83
84 <div>
85 {#await promise}
86 Loading...
87 {:then value}
88 response: {value}
89 {/await}
90 </div>
91 `
92 td.NodeModules["svelte"] = versions.Svelte
93 is.NoErr(td.Write(ctx))
94 vm, err := v8.Load()
95 is.NoErr(err)
96 svelteCompiler, err := svelte.Load(vm)
97 is.NoErr(err)
98 transformer, err := transformrt.Default(log, svelteCompiler)
99 is.NoErr(err)
100 module, err := gomod.Find(dir)
101 is.NoErr(err)
102 gfs := genfs.New(dag.Discard, module, log)
103 is.NoErr(err)
104 gfs.FileGenerator("bud/view/_ssr.js", ssr.New(module, transformer))
105 // Read the wrapped version of index.svelte with node_modules rewritten
106 code, err := fs.ReadFile(gfs, "bud/view/_ssr.js")
107 is.NoErr(err)
108 result, err := vm.Eval("render.js", string(code)+`; bud.render("/", {})`)
109 is.NoErr(err)
110 var res ssr.Response
111 err = json.Unmarshal([]byte(result), &res)
112 is.NoErr(err)
113 is.Equal(res.Status, 200)
114 is.Equal(len(res.Headers), 1)
115 is.Equal(res.Headers["Content-Type"], "text/html")
116 is.True(strings.Contains(res.Body, `<script id="bud_props" type="text/template" defer>{}</script>`))
117 is.True(strings.Contains(res.Body, `<script type="module" src="/bud/view/_index.svelte.js" defer></script>`))
118 is.True(strings.Contains(res.Body, `<div id="bud_target">`))
119 is.True(strings.Contains(res.Body, `Loading...`))
120}
121
122// Wrap props with key
123func wrap(key string, props interface{}) map[string]interface{} {

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
NewFunction · 0.92
NewFunction · 0.92
NewFunction · 0.92
LoadFunction · 0.92
LoadFunction · 0.92
DefaultFunction · 0.92
FindFunction · 0.92
NewFunction · 0.92
NewFunction · 0.92
HeaderMethod · 0.80
NoErrMethod · 0.80

Tested by

no test coverage detected