Skip to content

Commit

Permalink
Merge pull request #243 from comigor/multiple-fragment-on-simple
Browse files Browse the repository at this point in the history
Add test case, warning to README, fix CI test pipeline
  • Loading branch information
comigor committed Jan 6, 2021
2 parents b542306 + 0e91240 commit f25f739
Show file tree
Hide file tree
Showing 5 changed files with 190 additions and 5 deletions.
8 changes: 4 additions & 4 deletions .github/actions/dart-test/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -66,22 +66,22 @@ for ppath in $(find . -name pubspec.yaml | grep -ve "$DTA_EXCLUDE_REGEX"); do
OUTPUT=$(dartfmt -n . --set-exit-if-changed 2>&1)

if [ $? -ne 0 ]; then
send_message_and_bail "Linter has failed!" "$OUTPUT"
send_message_and_bail "Linter has failed! \`dartfmt -n . --set-exit-if-changed\`:" "$OUTPUT"
fi
fi

if [ "$DTA_DISABLE_ANALYZER" = "false" ]; then
echo "=== Running analyzer ==="
OUTPUT=$(dartanalyzer --fatal-infos --fatal-warnings . 2>&1) || send_message_and_bail "Analyzer has failed!" "$OUTPUT"
OUTPUT=$(dartanalyzer --fatal-infos --fatal-warnings . 2>&1) || send_message_and_bail "Analyzer has failed! \`dartanalyzer --fatal-infos --fatal-warnings .\`:" "$OUTPUT"
fi

[ -d "test" ] && {
if [ "$DTA_DISABLE_TESTS" = "false" ]; then
echo "=== Running tests ==="
if [ "$DTA_IS_FLUTTER" = "false" ]; then
OUTPUT=$(pub run test --no-color -r expanded -- test/query_generator/aliases/alias_on_leaves_test.dart 2>&1) || send_message_and_bail "Tests failed!" "$OUTPUT"
OUTPUT=$(pub run test --no-color -r expanded 2>&1) || send_message_and_bail "Tests failed!" "$OUTPUT"
else
OUTPUT=$(flutter test 2>&1) || send_message_and_bail "Tests failed!" "$OUTPUT"
OUTPUT=$(flutter test 2>&1) || send_message_and_bail "Tests have failed! \`pub run test\`:" "$OUTPUT"
fi
fi
}
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# CHANGELOG

## 6.17.3
- Add test case, warning to README, fix CI pipeline

## 6.17.2
- Update dependencies versions

Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ targets:
# custom configuration options!
```

> ⚠️ Make sure your configuration file is called `build.yaml` (with `.yaml` extension, not `.yml`)!
| Option | Default value | Description |
| - | - | - |
| `generate_helpers` | `true` | If Artemis should generate query/mutation helper GraphQLQuery subclasses. |
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: artemis
version: 6.17.2
version: 6.17.3

description: Build dart types from GraphQL schemas and queries (using Introspection Query).
homepage: https://github.com/comigor/artemis
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
// @dart = 2.8

import 'package:artemis/generator/data/data.dart';
import 'package:test/test.dart';

import '../../helpers.dart';

// While we don't have canonical classes generation, we can leverage class
// deduplication on fragments expansion and use the generated fragment mixin
// as "canonical data" when the fragment is the only selection of the field.
// Example:
// someObject {
// ...myFragment
// }
void main() {
test(
'On multiple reference of same fragment on simple naming',
() async => testGenerator(
query: r'''
fragment myFragment on SomeObject {
s, i
}
query some_query {
someObject {
...myFragment
}
moreData {
someObject {
...myFragment
}
}
}
''',
schema: r'''
schema {
query: QueryResponse
}
type QueryResponse {
someObject: SomeObject
moreData: MoreData
}
type MoreData {
someObject: SomeObject
}
type SomeObject {
s: String
i: Int
}
''',
libraryDefinition: libraryDefinition,
generatedFile: generatedFile,
namingScheme: 'simple',
),
);
}

final LibraryDefinition libraryDefinition =
LibraryDefinition(basename: r'query.graphql', queries: [
QueryDefinition(
name: QueryName(name: r'SomeQuery$_QueryResponse'),
operationName: r'some_query',
classes: [
FragmentClassDefinition(
name: FragmentName(name: r'MyFragmentMixin'),
properties: [
ClassProperty(
type: TypeName(name: r'String'),
name: ClassPropertyName(name: r's'),
isNonNull: false,
isResolveType: false),
ClassProperty(
type: TypeName(name: r'int'),
name: ClassPropertyName(name: r'i'),
isNonNull: false,
isResolveType: false)
]),
ClassDefinition(
name: ClassName(name: r'SomeObject'),
mixins: [FragmentName(name: r'MyFragmentMixin')],
factoryPossibilities: {},
typeNameField: TypeName(name: r'__typename'),
isInput: false),
ClassDefinition(
name: ClassName(name: r'SomeObject'),
mixins: [FragmentName(name: r'MyFragmentMixin')],
factoryPossibilities: {},
typeNameField: TypeName(name: r'__typename'),
isInput: false),
ClassDefinition(
name: ClassName(name: r'MoreData'),
properties: [
ClassProperty(
type: TypeName(name: r'SomeObject'),
name: ClassPropertyName(name: r'someObject'),
isNonNull: false,
isResolveType: false)
],
factoryPossibilities: {},
typeNameField: TypeName(name: r'__typename'),
isInput: false),
ClassDefinition(
name: ClassName(name: r'SomeQuery$_QueryResponse'),
properties: [
ClassProperty(
type: TypeName(name: r'SomeObject'),
name: ClassPropertyName(name: r'someObject'),
isNonNull: false,
isResolveType: false),
ClassProperty(
type: TypeName(name: r'MoreData'),
name: ClassPropertyName(name: r'moreData'),
isNonNull: false,
isResolveType: false)
],
factoryPossibilities: {},
typeNameField: TypeName(name: r'__typename'),
isInput: false)
],
generateHelpers: false,
suffix: r'Query')
]);

const generatedFile = r'''// GENERATED CODE - DO NOT MODIFY BY HAND
import 'package:json_annotation/json_annotation.dart';
import 'package:equatable/equatable.dart';
import 'package:gql/ast.dart';
part 'query.graphql.g.dart';
mixin MyFragmentMixin {
String s;
int i;
}
@JsonSerializable(explicitToJson: true)
class SomeObject with EquatableMixin, MyFragmentMixin {
SomeObject();
factory SomeObject.fromJson(Map<String, dynamic> json) =>
_$SomeObjectFromJson(json);
@override
List<Object> get props => [s, i];
Map<String, dynamic> toJson() => _$SomeObjectToJson(this);
}
@JsonSerializable(explicitToJson: true)
class MoreData with EquatableMixin {
MoreData();
factory MoreData.fromJson(Map<String, dynamic> json) =>
_$MoreDataFromJson(json);
SomeObject someObject;
@override
List<Object> get props => [someObject];
Map<String, dynamic> toJson() => _$MoreDataToJson(this);
}
@JsonSerializable(explicitToJson: true)
class SomeQuery$QueryResponse with EquatableMixin {
SomeQuery$QueryResponse();
factory SomeQuery$QueryResponse.fromJson(Map<String, dynamic> json) =>
_$SomeQuery$QueryResponseFromJson(json);
SomeObject someObject;
MoreData moreData;
@override
List<Object> get props => [someObject, moreData];
Map<String, dynamic> toJson() => _$SomeQuery$QueryResponseToJson(this);
}
''';

0 comments on commit f25f739

Please sign in to comment.