Port datasette manager plugin test to Playwright

Refs #2779
This commit is contained in:
Simon Willison 2026-06-14 16:45:48 -07:00
commit b5fa485a9f
2 changed files with 30 additions and 70 deletions

View file

@ -6,76 +6,6 @@ import textwrap
STATIC_DIR = Path(__file__).resolve().parents[1] / "datasette" / "static"
def test_datasette_manager_make_column_field():
script = textwrap.dedent("""
const fs = require("fs");
const vm = require("vm");
const datasetteManagerJs = __DATASETTE_MANAGER_JS__;
const documentListeners = {};
global.CustomEvent = class {
constructor(name, options) {
this.type = name;
this.detail = options ? options.detail : undefined;
}
};
global.document = {
addEventListener(name, callback) {
documentListeners[name] = documentListeners[name] || [];
documentListeners[name].push(callback);
},
dispatchEvent(event) {
for (const callback of documentListeners[event.type] || []) {
callback(event);
}
},
};
global.window = { datasetteVersion: "test" };
vm.runInThisContext(
fs.readFileSync(datasetteManagerJs, "utf8"),
{ filename: "datasette-manager.js" }
);
for (const callback of documentListeners.DOMContentLoaded || []) {
callback();
}
window.__DATASETTE__.registerPlugin("declines", {
makeColumnField() {
return;
},
});
window.__DATASETTE__.registerPlugin("handles", {
makeColumnField(context) {
if (context.columnType.type !== "demo") {
return;
}
return { useTextarea: true };
},
});
const control = window.__DATASETTE__.makeColumnField({
column: "body",
columnType: { type: "demo", config: null },
});
console.log(JSON.stringify(control));
""").replace(
"__DATASETTE_MANAGER_JS__",
json.dumps(str(STATIC_DIR / "datasette-manager.js")),
)
result = subprocess.run(
["node", "-e", script],
text=True,
capture_output=True,
check=False,
)
assert result.returncode == 0, result.stderr
assert json.loads(result.stdout) == {
"pluginName": "handles",
"useTextarea": True,
}
def test_table_plugin_column_field_api():
script = textwrap.dedent("""
const fs = require("fs");

View file

@ -183,3 +183,33 @@ def test_navigation_search_renders_jump_sections_from_javascript_plugins(
}
""")
assert "Start a new agent chat" in html
@pytest.mark.playwright
def test_datasette_manager_make_column_field(page, datasette_server):
page.goto(datasette_server)
control = page.evaluate("""
() => {
window.__DATASETTE__.registerPlugin("declines", {
makeColumnField() {
return;
},
});
window.__DATASETTE__.registerPlugin("handles", {
makeColumnField(context) {
if (context.columnType.type !== "demo") {
return;
}
return { useTextarea: true };
},
});
return window.__DATASETTE__.makeColumnField({
column: "body",
columnType: { type: "demo", config: null },
});
}
""")
assert control == {
"pluginName": "handles",
"useTextarea": True,
}