package standard import ( "net/http" "net/http/httptest" "testing" "modernc.org/quickjs" "reichard.io/poiesis/internal/builtin" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestFetchReturnsPromise(t *testing.T) { vm, err := quickjs.NewVM() require.NoError(t, err) defer func() { _ = vm.Close() }() vm.SetCanBlock(true) builtin.RegisterBuiltins(vm) result, err := vm.Eval(`fetch({input: "https://example.com"})`, quickjs.EvalGlobal) require.NoError(t, err) assert.NotNil(t, result) } func TestFetchAsyncAwait(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte(`{"status":"ok"}`)) })) defer server.Close() vm, err := quickjs.NewVM() require.NoError(t, err) defer func() { _ = vm.Close() }() vm.SetCanBlock(true) builtin.RegisterBuiltins(vm) result, err := vm.Eval(`fetch({input: "`+server.URL+`"})`, quickjs.EvalGlobal) require.NoError(t, err) if obj, ok := result.(*quickjs.Object); ok { var arr []any if err := obj.Into(&arr); err == nil && len(arr) > 0 { if response, ok := arr[0].(map[string]any); ok { assert.True(t, response["ok"].(bool)) } } } }