Skip to content

Commit 11bfe35

Browse files
authored
respect convert_to_snake_case settings
1 parent 137608c commit 11bfe35

File tree

3 files changed

+175
-2
lines changed

3 files changed

+175
-2
lines changed

CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
- Changed code typing to satisfy MyPy 1.11.0 version
66
- Added support for `async_client=false` to work with `enable_custom_operations=true`
7-
7+
- Fix propagating `convert_to_snake_case` to clients during package generation
88

99
## 0.14.0 (2024-07-17)
1010

ariadne_codegen/client_generators/package.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,10 @@ def get_package_generator(
456456
plugin_manager=plugin_manager,
457457
)
458458
custom_fields_generator = CustomFieldsGenerator(
459-
schema=schema, custom_scalars=settings.scalars, plugin_manager=plugin_manager
459+
schema=schema,
460+
custom_scalars=settings.scalars,
461+
convert_to_snake_case=settings.convert_to_snake_case,
462+
plugin_manager=plugin_manager,
460463
)
461464
custom_fields_typing_generator = CustomFieldsTypingGenerator(schema=schema)
462465
custom_query_generator = None
@@ -466,6 +469,7 @@ def get_package_generator(
466469
name="Query",
467470
base_name=BASE_GRAPHQL_OPERATION_CLASS_NAME,
468471
enums_module_name=settings.enums_module_name,
472+
convert_to_snake_case=settings.convert_to_snake_case,
469473
custom_scalars=settings.scalars,
470474
plugin_manager=plugin_manager,
471475
arguments_generator=ArgumentsGenerator(
@@ -482,6 +486,7 @@ def get_package_generator(
482486
name="Mutation",
483487
base_name=BASE_GRAPHQL_OPERATION_CLASS_NAME,
484488
enums_module_name=settings.enums_module_name,
489+
convert_to_snake_case=settings.convert_to_snake_case,
485490
custom_scalars=settings.scalars,
486491
plugin_manager=plugin_manager,
487492
arguments_generator=ArgumentsGenerator(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
from pathlib import Path
2+
3+
from graphql import build_ast_schema, parse
4+
5+
from ariadne_codegen.client_generators.package import get_package_generator
6+
from ariadne_codegen.client_generators.scalars import ScalarData
7+
from ariadne_codegen.plugins.manager import PluginManager
8+
from ariadne_codegen.settings import ClientSettings, CommentsStrategy
9+
10+
11+
def test_get_package_generator_without_default_settings(tmp_path: Path):
12+
schema_path = tmp_path / "schema.graphql"
13+
schema_path.touch()
14+
queries_path = tmp_path / "queries.graphql"
15+
queries_path.touch()
16+
base_client_file_path = tmp_path / "valid_file.txt"
17+
base_client_file_path.touch()
18+
base_client_file_path.write_text("class Class")
19+
20+
test_schema = build_ast_schema(
21+
parse(
22+
"""
23+
schema {
24+
query: Query
25+
mutation: Mutation
26+
subscription: Subscription
27+
}
28+
type Query {
29+
query1(num: Int!): Int!
30+
}
31+
32+
type Mutation {
33+
mutation1(num: Int!): Int!
34+
}
35+
36+
type Subscription {
37+
subscription1(num: Int!): Int!
38+
}
39+
"""
40+
)
41+
)
42+
43+
settings_without_defaults = ClientSettings(
44+
schema_path=schema_path.as_posix(),
45+
remote_schema_url="remote_schema_url",
46+
remote_schema_headers={"header": "header"},
47+
remote_schema_verify_ssl=False,
48+
enable_custom_operations=True,
49+
plugins=["imaplugin"],
50+
queries_path=schema_path.as_posix(),
51+
target_package_name="target_package_name",
52+
target_package_path=tmp_path.as_posix(),
53+
client_name="client_name",
54+
client_file_name="client_file_name",
55+
base_client_name="Class",
56+
base_client_file_path=base_client_file_path.as_posix(),
57+
enums_module_name="enums_module_name",
58+
input_types_module_name="input_types_module_name",
59+
fragments_module_name="fragments_module_name",
60+
include_comments=CommentsStrategy.NONE,
61+
convert_to_snake_case=False,
62+
include_all_inputs=False,
63+
include_all_enums=False,
64+
async_client=False,
65+
opentelemetry_client=True,
66+
files_to_include=[schema_path.as_posix()],
67+
scalars={"scalar1": ScalarData(type_="str", graphql_name="scalar1")},
68+
)
69+
package_generator = get_package_generator(
70+
schema=test_schema,
71+
fragments=[],
72+
settings=settings_without_defaults,
73+
plugin_manager=PluginManager(schema=test_schema),
74+
)
75+
76+
# separate out the generated clients
77+
client_generator = package_generator.client_generator
78+
input_types_generator = package_generator.input_types_generator
79+
fragments_generator = package_generator.fragments_generator
80+
custom_query_generator = package_generator.custom_query_generator
81+
custom_mutation_generator = package_generator.custom_mutation_generator
82+
83+
# client generator
84+
# pylint: disable=protected-access
85+
assert {i.module for i in client_generator._imports} == {
86+
"typing",
87+
"valid_file",
88+
"base_model",
89+
}
90+
assert (
91+
client_generator.arguments_generator.convert_to_snake_case
92+
== settings_without_defaults.convert_to_snake_case
93+
)
94+
assert (
95+
client_generator.arguments_generator.custom_scalars
96+
== settings_without_defaults.scalars
97+
)
98+
assert client_generator.name == settings_without_defaults.client_name
99+
# pylint: disable=protected-access
100+
assert (
101+
client_generator._class_def.bases[0].id
102+
== settings_without_defaults.base_client_name
103+
)
104+
assert (
105+
client_generator.enums_module_name
106+
== settings_without_defaults.enums_module_name
107+
)
108+
assert (
109+
client_generator.input_types_module_name
110+
== settings_without_defaults.input_types_module_name
111+
)
112+
assert client_generator.custom_scalars == settings_without_defaults.scalars
113+
# input types generator
114+
assert (
115+
input_types_generator.enums_module
116+
== settings_without_defaults.enums_module_name
117+
)
118+
assert (
119+
input_types_generator.convert_to_snake_case
120+
== settings_without_defaults.convert_to_snake_case
121+
)
122+
assert input_types_generator.custom_scalars == settings_without_defaults.scalars
123+
# fragments generator
124+
assert (
125+
fragments_generator.enums_module_name
126+
== settings_without_defaults.enums_module_name
127+
)
128+
assert (
129+
fragments_generator.convert_to_snake_case
130+
== settings_without_defaults.convert_to_snake_case
131+
)
132+
assert fragments_generator.custom_scalars == settings_without_defaults.scalars
133+
# custom query generator
134+
assert (
135+
custom_query_generator.enums_module_name
136+
== settings_without_defaults.enums_module_name
137+
)
138+
assert custom_query_generator.custom_scalars == settings_without_defaults.scalars
139+
assert (
140+
custom_query_generator.convert_to_snake_case
141+
== settings_without_defaults.convert_to_snake_case
142+
)
143+
assert (
144+
custom_query_generator.arguments_generator.convert_to_snake_case
145+
== settings_without_defaults.convert_to_snake_case
146+
)
147+
assert (
148+
custom_query_generator.arguments_generator.custom_scalars
149+
== settings_without_defaults.scalars
150+
)
151+
# custom mutation generator
152+
assert (
153+
custom_mutation_generator.enums_module_name
154+
== settings_without_defaults.enums_module_name
155+
)
156+
assert custom_mutation_generator.custom_scalars == settings_without_defaults.scalars
157+
assert (
158+
custom_mutation_generator.convert_to_snake_case
159+
== settings_without_defaults.convert_to_snake_case
160+
)
161+
assert (
162+
custom_mutation_generator.arguments_generator.convert_to_snake_case
163+
== settings_without_defaults.convert_to_snake_case
164+
)
165+
assert (
166+
custom_mutation_generator.arguments_generator.custom_scalars
167+
== settings_without_defaults.scalars
168+
)

0 commit comments

Comments
 (0)