Issue 23 test
This commit is contained in:
parent
0f8db75420
commit
84037855fa
1 changed files with 94 additions and 0 deletions
94
graphql_parser/test/issue23_test.dart
Normal file
94
graphql_parser/test/issue23_test.dart
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
import 'package:graphql_parser/graphql_parser.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
/// This is an *extremely* verbose test, but basically it
|
||||||
|
/// parses both documents, and makes sure that $memberId has
|
||||||
|
/// a valid value.
|
||||||
|
///
|
||||||
|
/// Resolves https://github.com/angel-dart/graphql/issues/23.
|
||||||
|
void main() {
|
||||||
|
void testStr<T>(String name, String text) {
|
||||||
|
test('name', () {
|
||||||
|
final List<Token> tokens = scan(text);
|
||||||
|
final Parser parser = Parser(tokens);
|
||||||
|
|
||||||
|
if (parser.errors.isNotEmpty) {
|
||||||
|
print(parser.errors.toString());
|
||||||
|
}
|
||||||
|
expect(parser.errors, isEmpty);
|
||||||
|
|
||||||
|
// Parse the GraphQL document using recursive descent
|
||||||
|
final DocumentContext doc = parser.parseDocument();
|
||||||
|
|
||||||
|
expect(doc.definitions, isNotNull);
|
||||||
|
expect(doc.definitions, isNotEmpty);
|
||||||
|
|
||||||
|
// Sanity check
|
||||||
|
var queryDef = doc.definitions[0] as OperationDefinitionContext;
|
||||||
|
expect(queryDef.isQuery, true);
|
||||||
|
expect(queryDef.name, 'customerMemberAttributes');
|
||||||
|
expect(queryDef.variableDefinitions.variableDefinitions, hasLength(1));
|
||||||
|
var memberIdDef = queryDef.variableDefinitions.variableDefinitions[0];
|
||||||
|
expect(memberIdDef.variable.name, 'memberId');
|
||||||
|
|
||||||
|
// Find $memberId
|
||||||
|
var customerByCustomerId = queryDef.selectionSet.selections[0];
|
||||||
|
var customerMemberAttributesByCustomerId =
|
||||||
|
customerByCustomerId.field.selectionSet.selections[0];
|
||||||
|
var nodes0 =
|
||||||
|
customerMemberAttributesByCustomerId.field.selectionSet.selections[0];
|
||||||
|
var customerMemberAttributeId = nodes0.field.selectionSet.selections[0];
|
||||||
|
expect(customerMemberAttributeId.field.fieldName.name,
|
||||||
|
'customerMemberAttributeId');
|
||||||
|
var memberAttr = nodes0.field.selectionSet.selections[1];
|
||||||
|
expect(memberAttr.field.fieldName.name,
|
||||||
|
'memberAttributesByCustomerMemberAttributeId');
|
||||||
|
expect(memberAttr.field.arguments, hasLength(1));
|
||||||
|
var condition = memberAttr.field.arguments[0];
|
||||||
|
expect(condition.name, 'condition');
|
||||||
|
expect(condition.value, TypeMatcher<ObjectValueContext>());
|
||||||
|
var conditionValue = condition.value as ObjectValueContext;
|
||||||
|
var memberId =
|
||||||
|
conditionValue.fields.singleWhere((f) => f.NAME.text == 'memberId');
|
||||||
|
expect(memberId.value, TypeMatcher<T>());
|
||||||
|
print('Found \$memberId: Instance of $T');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
testStr<VariableContext>('member id as var', memberIdAsVar);
|
||||||
|
testStr<NumberValueContext>('member id as constant', memberIdAsConstant);
|
||||||
|
}
|
||||||
|
|
||||||
|
final String memberIdAsVar = r'''
|
||||||
|
query customerMemberAttributes($memberId: Int!){
|
||||||
|
customerByCustomerId(customerId: 7) {
|
||||||
|
customerMemberAttributesByCustomerId {
|
||||||
|
nodes {
|
||||||
|
customerMemberAttributeId
|
||||||
|
memberAttributesByCustomerMemberAttributeId(condition: {memberId: $memberId}) {
|
||||||
|
nodes {
|
||||||
|
memberAttributeId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
''';
|
||||||
|
|
||||||
|
final String memberIdAsConstant = r'''
|
||||||
|
query customerMemberAttributes($memberId: Int!){
|
||||||
|
customerByCustomerId(customerId: 7) {
|
||||||
|
customerMemberAttributesByCustomerId {
|
||||||
|
nodes {
|
||||||
|
customerMemberAttributeId
|
||||||
|
memberAttributesByCustomerMemberAttributeId(condition: {memberId: 7}) {
|
||||||
|
nodes {
|
||||||
|
memberAttributeId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
''';
|
Loading…
Reference in a new issue