Coverage for graphqler / fuzzer / engine / detectors / field_suggestion / field_suggestion_materializer.py: 100%
21 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-20 10:09 -0400
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-20 10:09 -0400
1from graphqler.fuzzer.engine.materializers.materializer import Materializer
2from graphqler.fuzzer.engine.materializers.getter import Getter
3from graphqler.fuzzer.engine.materializers.utils.materialization_utils import prettify_graphql_payload
4from graphqler.utils.api import API
5from graphqler.utils.objects_bucket import ObjectsBucket
7import random
8from typing import override
11class FieldSuggestionMaterializer(Materializer):
12 def __init__(self, api: API, fail_on_hard_dependency_not_met: bool = False, max_depth: int = 20, injection_getter: Getter = Getter()):
13 super().__init__(api, fail_on_hard_dependency_not_met, max_depth, injection_getter)
14 self.max_depth = max_depth
15 self.getter = injection_getter
16 self.api = api
17 self.fail_on_hard_dependency_not_met = fail_on_hard_dependency_not_met
19 @override
20 def get_payload(self, name: str, objects_bucket: ObjectsBucket, graphql_type: str = "") -> tuple[str, dict]:
21 """Materializes a query that has a field suggestion
23 Args:
24 name (str): The payload name of the Query or Mutation
25 objects_bucket (dict): The bucket of objects that have already been created
26 graphql_type (str): The type of the graphql operation (Query or Mutation)
28 Returns:
29 tuple[str, dict]: The string of the payload, and the used objects list
30 """
31 random_query_name = random.choice(list(self.api.queries.keys()))
32 random_query_name_mispelt = random_query_name + "abc"
33 payload = f"""
34 query {{
35 {random_query_name_mispelt} {{
36 id
37 }}
38 }}
39 """
40 pretty_payload = prettify_graphql_payload(payload)
41 return pretty_payload, {}