def test_bigint_parse_literal(): from rating_agent.graphql.types import BigInt from graphql.language import ast # type: ignore from graphene.types.scalars import MAX_INT # type: ignore node = ast.IntValue(value=MAX_INT + 1) res = BigInt.parse_literal(node) assert type(res) == float node = ast.IntValue(value=MAX_INT) res = BigInt.parse_literal(node) assert type(res) == int
def test_invalid_email_parse_literal_wrong_ast_type(self): test_value = ast.IntValue(value="1234") with self.assertRaisesRegex( GraphQLError, scalar_error_only_types("strings", "email address", str(ast.Type))): EmailAddress.parse_literal(test_value)
def test_timestamp(self): now = datetime.datetime.now() timestamp_type = types.Timestamp() node = ast.IntValue(now.timestamp()) self.assertEqual(timestamp_type.serialize(now), int(now.timestamp())) self.assertEqual(timestamp_type.parse_literal(node), now)
def test_parse_creates_ast(): source = Source("""{ node(id: 4) { id, name } } """) result = parse(source) assert result == \ ast.Document( loc=Loc(start=0, end=41, source=source), definitions=[ast.OperationDefinition( loc=Loc(start=0, end=40, source=source), operation='query', name=None, variable_definitions=None, directives=[], selection_set=ast.SelectionSet( loc=Loc(start=0, end=40, source=source), selections=[ast.Field( loc=Loc(start=4, end=38, source=source), alias=None, name=ast.Name( loc=Loc(start=4, end=8, source=source), value='node'), arguments=[ast.Argument( name=ast.Name(loc=Loc(start=9, end=11, source=source), value='id'), value=ast.IntValue( loc=Loc(start=13, end=14, source=source), value='4'), loc=Loc(start=9, end=14, source=source))], directives=[], selection_set=ast.SelectionSet( loc=Loc(start=16, end=38, source=source), selections=[ast.Field( loc=Loc(start=22, end=24, source=source), alias=None, name=ast.Name( loc=Loc(start=22, end=24, source=source), value='id'), arguments=[], directives=[], selection_set=None), ast.Field( loc=Loc(start=30, end=34, source=source), alias=None, name=ast.Name( loc=Loc(start=30, end=34, source=source), value='name'), arguments=[], directives=[], selection_set=None)]))]))])
def get_ast_value(value): if isinstance(value, ast.Node): return value if isinstance(value, six.string_types): return ast.StringValue(value=value) elif isinstance(value, bool): return ast.BooleanValue(value=value) elif isinstance(value, (float, decimal.Decimal)): return ast.FloatValue(value=value) elif isinstance(value, int): return ast.IntValue(value=value) return None
def test_converts_input_objects(): value = OrderedDict([('foo', 3), ('bar', 'HELLO')]) assert ast_from_value(value) == ast.ObjectValue(fields=[ ast.ObjectField(name=ast.Name('foo'), value=ast.IntValue('3')), ast.ObjectField(name=ast.Name('bar'), value=ast.StringValue('HELLO')) ]) input_obj = GraphQLInputObjectType( 'MyInputObj', { 'foo': GraphQLInputObjectField(GraphQLFloat), 'bar': GraphQLInputObjectField(my_enum) }) assert ast_from_value(value, input_obj) == ast.ObjectValue(fields=[ ast.ObjectField(name=ast.Name('foo'), value=ast.FloatValue('3.0')), ast.ObjectField(name=ast.Name('bar'), value=ast.EnumValue('HELLO')) ])
def test_converts_input_objects(): value = OrderedDict([("foo", 3), ("bar", "HELLO")]) assert ast_from_value(value) == ast.ObjectValue(fields=[ ast.ObjectField(name=ast.Name("foo"), value=ast.IntValue("3")), ast.ObjectField(name=ast.Name("bar"), value=ast.StringValue("HELLO")), ]) input_obj = GraphQLInputObjectType( "MyInputObj", { "foo": GraphQLInputObjectField(GraphQLFloat), "bar": GraphQLInputObjectField(my_enum), }, ) assert ast_from_value(value, input_obj) == ast.ObjectValue(fields=[ ast.ObjectField(name=ast.Name("foo"), value=ast.FloatValue("3.0")), ast.ObjectField(name=ast.Name("bar"), value=ast.EnumValue("HELLO")), ])
def value_node_from_pyvalue(val: object): if isinstance(val, str): val = val.replace('\\', '\\\\') value = eql_quote.quote_literal(val) return gql_ast.StringValue(value=value[1:-1]) elif isinstance(val, bool): return gql_ast.BooleanValue(value=bool(val)) elif isinstance(val, int): return gql_ast.IntValue(value=str(val)) elif isinstance(val, float): return gql_ast.FloatValue(value=str(val)) elif isinstance(val, list): return gql_ast.ListValue( values=[value_node_from_pyvalue(v) for v in val]) elif isinstance(val, dict): return gql_ast.ObjectValue(fields=[ gql_ast.ObjectField(name=n, value=value_node_from_pyvalue(v)) for n, v in val.items() ]) else: raise ValueError(f'unexpected constant type: {type(val)!r}')
def test_wrong_ast_type_url_parse_literal(self): test_value = ast.IntValue(value="1234") with self.assertRaisesRegex( GraphQLError, scalar_error_only_types("strings", "URLs", str(ast.Type))): URL.parse_literal(test_value)
def test_parse_creates_ast(): # type: () -> None source = Source( """{ node(id: 4) { id, name } } """ ) result = parse(source) assert result == ast.Document( loc=Loc(start=0, end=41, source=source), definitions=[ ast.OperationDefinition( loc=Loc(start=0, end=40, source=source), operation="query", name=None, variable_definitions=None, directives=[], selection_set=ast.SelectionSet( loc=Loc(start=0, end=40, source=source), selections=[ ast.Field( loc=Loc(start=4, end=38, source=source), alias=None, name=ast.Name( loc=Loc(start=4, end=8, source=source), value="node" ), arguments=[ ast.Argument( name=ast.Name( loc=Loc(start=9, end=11, source=source), value="id", ), value=ast.IntValue( loc=Loc(start=13, end=14, source=source), value="4", ), loc=Loc(start=9, end=14, source=source), ) ], directives=[], selection_set=ast.SelectionSet( loc=Loc(start=16, end=38, source=source), selections=[ ast.Field( loc=Loc(start=22, end=24, source=source), alias=None, name=ast.Name( loc=Loc(start=22, end=24, source=source), value="id", ), arguments=[], directives=[], selection_set=None, ), ast.Field( loc=Loc(start=30, end=34, source=source), alias=None, name=ast.Name( loc=Loc(start=30, end=34, source=source), value="name", ), arguments=[], directives=[], selection_set=None, ), ], ), ) ], ), ) ], )
def test_converts_numeric_values_to_asts(): assert ast_from_value(123) == ast.IntValue("123") assert ast_from_value(123.0) == ast.IntValue("123") assert ast_from_value(123.5) == ast.FloatValue("123.5") assert ast_from_value(1e4) == ast.IntValue("10000") assert ast_from_value(1e40) == ast.FloatValue("1e+40")
def test_converts_numeric_values_to_asts(): assert ast_from_value(123) == ast.IntValue('123') assert ast_from_value(123.0) == ast.IntValue('123') assert ast_from_value(123.5) == ast.FloatValue('123.5') assert ast_from_value(1e4) == ast.IntValue('10000') assert ast_from_value(1e40) == ast.FloatValue('1e+40')