Skip to content

Feature/#142 up test coverage #144

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 10 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 0 additions & 13 deletions bin/model_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:model_generator/config/pubspec_config.dart';
import 'package:model_generator/config/yml_generator_config.dart';
import 'package:model_generator/model/field.dart';
import 'package:model_generator/model/model/custom_model.dart';
import 'package:model_generator/model/model/enum_model.dart';
import 'package:model_generator/model/model/json_converter_model.dart';
import 'package:model_generator/model/model/object_model.dart';
import 'package:model_generator/run_process/run_process.dart';
import 'package:model_generator/util/list_extensions.dart';
import 'package:model_generator/writer/enum_model_writer.dart';
import 'package:model_generator/writer/object_model_writer.dart';
import 'package:path/path.dart';
Expand Down Expand Up @@ -100,20 +98,9 @@ void writeToFiles(
}
String? content;
if (model is ObjectModel) {
final extendsModelfields = <Field>[];
var extendsModelextends = model.extendsModel;
while (extendsModelextends != null) {
final extendsModelextendsModel = modelGeneratorConfig.models
.firstWhereOrNull(
(element) => element.name == extendsModelextends)
as ObjectModel?; // ignore: avoid_as
extendsModelfields.addAll(extendsModelextendsModel?.fields ?? []);
extendsModelextends = extendsModelextendsModel?.extendsModel;
}
content = ObjectModelWriter(
pubspecConfig,
model,
extendsModelfields,
modelGeneratorConfig,
).write();
} else if (model is EnumModel) {
Expand Down
18 changes: 16 additions & 2 deletions lib/writer/object_model_writer.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:model_generator/model/field.dart';
import 'package:model_generator/model/item_type/map_type.dart';
import 'package:model_generator/util/generic_type.dart';
import 'package:model_generator/util/list_extensions.dart';

import '../config/pubspec_config.dart';
import '../config/yml_generator_config.dart';
Expand All @@ -15,17 +16,16 @@ class ObjectModelWriter {
'// GENERATED CODE - DO NOT MODIFY BY HAND';
final PubspecConfig pubspecConfig;
final ObjectModel jsonModel;
final List<Field> extendsFields;
final YmlGeneratorConfig yamlConfig;

const ObjectModelWriter(
this.pubspecConfig,
this.jsonModel,
this.extendsFields,
this.yamlConfig,
);

String write() {
final extendsFields = _getExtendedFields(jsonModel, yamlConfig);
final sb = StringBuffer()
..writeln(autoGeneratedWarning)
..writeln();
Expand Down Expand Up @@ -351,4 +351,18 @@ class ObjectModelWriter {
'List<Map<String, dynamic>> serialize${jsonModel.name}List(List<${jsonModel.name}> objects)')
..writeln(' => objects.map((object) => object.toJson()).toList();');
}

List<Field> _getExtendedFields(
ObjectModel model, YmlGeneratorConfig ymlConfig) {
final extendsModelfields = <Field>[];
var extendsModelextends = model.extendsModel;
while (extendsModelextends != null) {
final extendsModelextendsModel = ymlConfig.models.firstWhereOrNull(
(element) => element.name == extendsModelextends)
as ObjectModel?; // ignore: avoid_as
extendsModelfields.addAll(extendsModelextendsModel?.fields ?? []);
extendsModelextends = extendsModelextendsModel?.extendsModel;
}
return extendsModelfields;
}
}
40 changes: 34 additions & 6 deletions test/writer/model_reader_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ void main() {
PubspecConfig("name: test"),
"""
TestModel:
disallow_null_for_defaults: true
properties:
simpleString: string
nullableString: string?
Expand Down Expand Up @@ -65,6 +66,8 @@ TestModel:

expect(simpleDateTime.type, isA<DateTimeType>());
expect(simpleDateTime.isRequired, false);

expect(model.disallowNullForDefaults, true);
});

test('Test required not definable anymore', () {
Expand All @@ -91,8 +94,7 @@ TestModel:
expect(error, isNotNull);
expect(error, isArgumentError);
if (error is ArgumentError) {
expect(error.message,
'required is removed, follow the migration to version 7.0.0');
expect(error.message, 'required is removed, follow the migration to version 7.0.0');
}
});

Expand All @@ -118,8 +120,7 @@ TestModel:
expect(error, isNotNull);
expect(error, isException);
if (error is Exception) {
expect(error.toString(),
'Exception: Could not generate all models. `array` is not added to the config file');
expect(error.toString(), 'Exception: Could not generate all models. `array` is not added to the config file');
}
});

Expand All @@ -146,8 +147,7 @@ TestModel:
expect(error, isNotNull);
expect(error, isException);
if (error is Exception) {
expect(error.toString(),
'Exception: Could not generate all models. `map` is not added to the config file');
expect(error.toString(), 'Exception: Could not generate all models. `map` is not added to the config file');
}
});

Expand Down Expand Up @@ -216,6 +216,34 @@ TestModel2:
expect(nullableRef.type, isA<ObjectType>());
expect(nullableRef.isRequired, false);
});

test('Test enum item_type should be string or integer', () {
dynamic error;
try {
YmlGeneratorConfig(
PubspecConfig("name: test"),
"""
Gender:
path: user/person/
type: enum
item_type: List
properties:
MALE:
value: male
FEMALE:
value: female
""",
'')
.models;
} catch (e) {
error = e;
}
expect(error, isNotNull);
expect(error, isException);
if(error is Exception){
expect(error.toString(), 'Exception: item_type should be a string or integer. model: Gender');
}
});
});
}

Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/array/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'info', required: true)
@JsonKey(name: 'info', required: true, includeIfNull: false)
final List<String> info;

const Person({
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/converter/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Person:
- DateTimeConverter
properties:
birthDay:
type: DateTime
type: DateTime?
DateTimeConverter:
path: user/person/
type: json_converter
6 changes: 3 additions & 3 deletions test/writer/object_model_writer/converter/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
@DateTimeConverter()
class Person {
@JsonKey(name: 'birthday')
final DateTime? birthday;
@JsonKey(name: 'birthDay', includeIfNull: false)
final DateTime? birthDay;

const Person({
this.birthday,
this.birthDay,
});

factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/custom-from-to/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Person:
path: user/person/
type: object
properties:
time: Time
time: Time?
Time:
path: user/person/
type: custom_from_to_json
4 changes: 2 additions & 2 deletions test/writer/object_model_writer/custom-from-to/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'time', fromJson: handleTimeFromJson, toJson: handleTimeToJson)
Time? time;
final Time? time;

Person({
const Person({
this.time,
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ Person:
firstName:
description: A good description
type: String
default_field: "'test'"
default_value: "'test'"
disallow_null: true
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName', required: false, disallowNullValue: true)
@JsonKey(name: 'firstName', required: false, disallowNullValue: true, includeIfNull: false)
final String firstName;

const Person({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ Person:
firstName:
description: A good description
type: String
default_field: "'test'"
default_value: "'test'"
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName', required: false, disallowNullValue: false)
@JsonKey(name: 'firstName', required: false, disallowNullValue: false, includeIfNull: false)
final String firstName;

const Person({
Expand Down
4 changes: 2 additions & 2 deletions test/writer/object_model_writer/default-field/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ Person:
properties:
firstName:
description: A good description
type: string
default_field: "'test'"
type: String?
default_value: "'test'"
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/default-field/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;

const Person({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Admin:
type: object
extends: User
properties:
permission: String?
permission: String

User:
path: user/person/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ class Admin extends User {

const Admin({
required this.permission,
required String name,
required String email,
String? email,
String? name,
}) : super(
name: name,
email: email,
name: name,
);

factory Admin.fromJson(Map<String, dynamic> json) => _$AdminFromJson(json);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ User:
type: object
extends: Person
properties:
email: String?
email: String

Person:
path: user/person/
Expand Down
6 changes: 2 additions & 4 deletions test/writer/object_model_writer/extend-fields/config.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
User:
path: user/person/
type: object
extends: Person
properties:
email: String?
email: String

Person:
path: user/person/
type: object
properties:
name: String?
name: String
6 changes: 3 additions & 3 deletions test/writer/object_model_writer/ignore/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName', includeFromJson: false, includeToJson: false)
final String? firstName;
@JsonKey(name: 'firstName', includeIfNull: false, includeFromJson: false, includeToJson: false)
String? firstName;

const Person({
Person({
this.firstName,
});

Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/import_sorting/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ BModel:
path: user/b_model/
type: object
properties:
firstName: AModel?
aModel: AModel?
AModel:
path: user/a_model/
type: object
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Person:
path: user/person/
type: object
properties:
firstName:
include_if_null: true
type: String?
20 changes: 20 additions & 0 deletions test/writer/object_model_writer/include-if-null-true/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// GENERATED CODE - DO NOT MODIFY BY HAND

import 'package:json_annotation/json_annotation.dart';

part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName')
final String? firstName;

const Person({
this.firstName,
});

factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);

Map<String, dynamic> toJson() => _$PersonToJson(this);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
name: model_generator_example

model_generator:
config_path: model_generator/config.yaml
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/includeFromJson/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName', includeFromJson: false)
@JsonKey(name: 'firstName', includeIfNull: false, includeFromJson: false)
final String? firstName;

const Person({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ Person:
firstName:
includeFromJson: false
includeToJson: false
include_if_null: false
type: String?
Loading