Skip to content

Commit 7ac7f9a

Browse files
committed
Add typescript quickstart smoketest
1 parent 0b07bff commit 7ac7f9a

File tree

1 file changed

+37
-5
lines changed

1 file changed

+37
-5
lines changed

smoketests/tests/quickstart.py

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import shutil
44
from pathlib import Path
55
import tempfile
6+
import os
67

78
import smoketests
89
from .. import Smoketest, STDB_DIR, run_cmd, TEMPLATE_CARGO_TOML
@@ -18,12 +19,12 @@ def _append_to_file(path: Path, content: str):
1819
f.write(content)
1920

2021

21-
def _parse_quickstart(doc_path: Path, language: str) -> str:
22+
def _parse_quickstart(doc_path: Path, language: str, extra_langs: list[str] = None) -> str:
2223
"""Extract code blocks from `quickstart.md` docs.
2324
This will replicate the steps in the quickstart guide, so if it fails the quickstart guide is broken.
2425
"""
2526
content = Path(doc_path).read_text()
26-
blocks = re.findall(rf"```{language}\n(.*?)\n```", content, re.DOTALL)
27+
blocks = re.findall(rf"```(?:{'|'.join([language, *extra_langs])})\n(.*?)\n```", content, re.DOTALL)
2728

2829
end = ""
2930
if language == "csharp":
@@ -60,6 +61,8 @@ class BaseQuickstart(Smoketest):
6061
MODULE_CODE = ""
6162

6263
lang = None
64+
client_lang = None
65+
codeblock_lang = ()
6366
server_doc = None
6467
client_doc = None
6568
server_file = None
@@ -92,7 +95,7 @@ def generate_server(self, server_path: Path):
9295
self.spacetime("init", "--lang", self.lang, server_path, capture_stderr=True)
9396
shutil.copy2(STDB_DIR / "rust-toolchain.toml", server_path)
9497
# Replay the quickstart guide steps
95-
_write_file(server_path / self.server_file, _parse_quickstart(self.server_doc, self.lang))
98+
_write_file(server_path / self.server_file, _parse_quickstart(self.server_doc, self.lang, self.codeblock_lang))
9699
self.server_postprocess(server_path)
97100
self.spacetime("build", "-d", "-p", server_path, capture_stderr=True)
98101

@@ -115,12 +118,12 @@ def _test_quickstart(self):
115118
run_cmd(*self.build_cmd, cwd=client_path, capture_stderr=True)
116119

117120
self.spacetime(
118-
"generate", "--lang", self.lang,
121+
"generate", "--lang", self.client_lang or self.lang,
119122
"--out-dir", client_path / self.module_bindings,
120123
"--project-path", self.project_path, capture_stderr=True
121124
)
122125
# Replay the quickstart guide steps
123-
main = _parse_quickstart(self.client_doc, self.lang)
126+
main = _parse_quickstart(self.client_doc, self.lang, self.codeblock_lang)
124127
for src, dst in self.replacements.items():
125128
main = main.replace(src, dst)
126129
main += "\n" + self.extra_code
@@ -257,3 +260,32 @@ def test_quickstart(self):
257260
if not smoketests.HAVE_DOTNET:
258261
self.skipTest("C# SDK requires .NET to be installed.")
259262
self._test_quickstart()
263+
264+
class TypeScript(BaseQuickstart):
265+
lang = "typescript"
266+
client_lang = "rust"
267+
codeblock_lang = ["ts", "tsx", "rust"]
268+
server_doc = STDB_DIR / "docs/docs/modules/typescript/quickstart.md"
269+
client_doc = Rust.client_doc
270+
server_file = "src/index.ts"
271+
client_file = Rust.client_file
272+
module_bindings = Rust.module_bindings
273+
run_cmd = Rust.run_cmd
274+
build_cmd = Rust.build_cmd
275+
276+
replacements = Rust.replacements
277+
extra_code = Rust.extra_code
278+
connected_str = Rust.connected_str
279+
280+
project_init = Rust.project_init
281+
282+
283+
sdk_setup = Rust.sdk_setup
284+
285+
def server_postprocess(self, server_path: Path):
286+
spacetimedb_dep = "spacetimedb@file:" + str((STDB_DIR / "sdks/typescript").absolute())
287+
run_cmd("pnpm", "install", spacetimedb_dep, cwd=server_path)
288+
289+
def test_quickstart(self):
290+
"""Run the TypeScript quickstart guides for server."""
291+
self._test_quickstart()

0 commit comments

Comments
 (0)