1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
# - 1. test fragments
# - 2. test variables
# - 3. test input objects
# - 4. test mutations (raise?)
# - 5. test subscriptions (raise)
from pathlib import Path
import pytest
from pytest_snapshot.plugin import Snapshot
from strawberry.codegen import QueryCodegen, QueryCodegenPlugin
from strawberry.codegen.exceptions import (
MultipleOperationsProvidedError,
NoOperationNameProvidedError,
NoOperationProvidedError,
)
from strawberry.codegen.plugins.python import PythonPlugin
from strawberry.codegen.plugins.typescript import TypeScriptPlugin
HERE = Path(__file__).parent
QUERIES = list(HERE.glob("queries/*.graphql"))
@pytest.mark.parametrize(
("plugin_class", "plugin_name", "extension"),
[
(PythonPlugin, "python", "py"),
(TypeScriptPlugin, "typescript", "ts"),
],
ids=["python", "typescript"],
)
@pytest.mark.parametrize("query", QUERIES, ids=[x.name for x in QUERIES])
def test_codegen(
query: Path,
plugin_class: type[QueryCodegenPlugin],
plugin_name: str,
extension: str,
snapshot: Snapshot,
schema,
):
generator = QueryCodegen(schema, plugins=[plugin_class(query)])
result = generator.run(query.read_text())
code = result.to_string()
snapshot.snapshot_dir = HERE / "snapshots" / plugin_name
snapshot.assert_match(code, f"{query.with_suffix('').stem}.{extension}")
def test_codegen_fails_if_no_operation_name(schema, tmp_path):
query = tmp_path / "query.graphql"
data = "query { hello }"
with query.open("w") as f:
f.write(data)
generator = QueryCodegen(schema, plugins=[PythonPlugin(query)])
with pytest.raises(NoOperationNameProvidedError):
generator.run(data)
def test_codegen_fails_if_no_operation(schema, tmp_path):
query = tmp_path / "query.graphql"
data = "type X { hello: String }"
with query.open("w") as f:
f.write(data)
generator = QueryCodegen(schema, plugins=[PythonPlugin(query)])
with pytest.raises(NoOperationProvidedError):
generator.run(data)
def test_fails_with_multiple_operations(schema, tmp_path):
query = tmp_path / "query.graphql"
data = "query { hello } query { world }"
with query.open("w") as f:
f.write(data)
generator = QueryCodegen(schema, plugins=[PythonPlugin(query)])
with pytest.raises(MultipleOperationsProvidedError):
generator.run(data)
|