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

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 

6 

7import random 

8from typing import override 

9 

10 

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 

18 

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 

22 

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) 

27 

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, {}