diff --git a/src/cloudflare/internal/test/d1/BUILD.bazel b/src/cloudflare/internal/test/d1/BUILD.bazel index c00b9be041f..32dc957cefd 100644 --- a/src/cloudflare/internal/test/d1/BUILD.bazel +++ b/src/cloudflare/internal/test/d1/BUILD.bazel @@ -5,3 +5,9 @@ wd_test( args = ["--experimental"], data = glob(["*.js"]), ) + +wd_test( + src = "python-d1-api-test.wd-test", + args = ["--experimental"], + data = glob(["*.py", "*.js"]), +) diff --git a/src/cloudflare/internal/test/d1/d1-api-test.py b/src/cloudflare/internal/test/d1/d1-api-test.py new file mode 100644 index 00000000000..5b44f97b99d --- /dev/null +++ b/src/cloudflare/internal/test/d1/d1-api-test.py @@ -0,0 +1,37 @@ +# Copyright (c) 2023 Cloudflare, Inc. +# Licensed under the Apache 2.0 license found in the LICENSE file or at: +# https://opensource.org/licenses/Apache-2.0 + +def assertSuccess(ret): + # D1 operations return an object with a `success` field. + assert ret.success + +async def test(context, env): + DB = env.d1 + + assertSuccess( + await DB.prepare( + """CREATE TABLE users + ( + user_id INTEGER PRIMARY KEY, + name TEXT, + home TEXT, + features TEXT, + land_based BOOLEAN + ); + """ + ).run() + ) + + result = await DB.prepare( + """ + INSERT INTO users (name, home, features, land_based) VALUES + ('Albert Ross', 'sky', 'wingspan', false), + ('Al Dente', 'bowl', 'mouthfeel', true) + RETURNING * + """ + ).all() + + assertSuccess(result) + assert len(result.results) == 2 + assert result.results[0].name == "Albert Ross" diff --git a/src/cloudflare/internal/test/d1/python-d1-api-test.wd-test b/src/cloudflare/internal/test/d1/python-d1-api-test.wd-test new file mode 100644 index 00000000000..b8460c262bb --- /dev/null +++ b/src/cloudflare/internal/test/d1/python-d1-api-test.wd-test @@ -0,0 +1,44 @@ +using Workerd = import "/workerd/workerd.capnp"; + +const unitTests :Workerd.Config = ( + services = [ + ( name = "TEST_TMPDIR", disk = (writable = true) ), + ( name = "d1-api-test", + worker = ( + modules = [ + (name = "worker.py", pythonModule = embed "d1-api-test.py") + ], + compatibilityDate = "2023-01-15", + compatibilityFlags = ["nodejs_compat", "python_workers"], + bindings = [ + ( + name = "d1", + wrapped = ( + moduleName = "cloudflare-internal:d1-api", + innerBindings = [( + name = "fetcher", + service = "d1-mock" + )], + ) + ) + ], + ) + ), + ( name = "d1-mock", + worker = ( + compatibilityDate = "2023-01-15", + compatibilityFlags = ["experimental", "nodejs_compat"], + modules = [ + (name = "worker", esModule = embed "d1-mock.js") + ], + durableObjectNamespaces = [ + (className = "D1MockDO", uniqueKey = "210bd0cbd803ef7883a1ee9d86cce06e"), + ], + durableObjectStorage = (localDisk = "TEST_TMPDIR"), + bindings = [ + (name = "db", durableObjectNamespace = "D1MockDO"), + ], + ) + ) + ] +);