Skip to content

Commit

Permalink
Merge pull request #129 from netglade/fix/nullable-map
Browse files Browse the repository at this point in the history
Fix nullable source and target when null map
  • Loading branch information
tenhobi authored Oct 4, 2023
2 parents bbd698f + 7d55161 commit 591b273
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 3 deletions.
5 changes: 4 additions & 1 deletion packages/auto_mappr/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
[//]: # (## Unreleased)

## 2.0.2
- Fix null value when nullable source and target resulting in `{}` and not `null`. [#129](https://github.com/netglade/auto_mappr/pull/129)

## 2.0.1
- Fix type converters when used with reverse mappings.
- Fix type converters when used with reverse mappings. [#127](https://github.com/netglade/auto_mappr/pull/127)

## 2.0.0
- **Breaking**: Allow "absorbing" modules using `includes` on `@AutoMappr`. Previous `modules` is now `delegates`. [#117](https://github.com/netglade/auto_mappr/pull/117)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class MapAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMixin
final targetType = assignment.targetType;

final sourceNullable = sourceType.isNullable;
final targetNullable = targetType.isNullable;

final sourceKeyType = (sourceType as ParameterizedType).typeArguments.firstOrNull;
final sourceValueType = sourceType.typeArguments.lastOrNull;
Expand Down Expand Up @@ -101,7 +102,7 @@ class MapAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMixin
],
)
// When [sourceNullable], use default value.
.maybeIfNullThen(defaultMapValueExpression, isOnNullable: sourceNullable);
.maybeIfNullThen(defaultMapValueExpression, isOnNullable: sourceNullable && !targetNullable);
}

Expression _map(SourceAssignment assignment) {
Expand Down
2 changes: 1 addition & 1 deletion packages/auto_mappr/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: auto_mappr
description: Code generation for mapping between different objects with ease.
version: 2.0.1
version: 2.0.2
repository: https://github.com/netglade/auto_mappr
issue_tracker: https://github.com/netglade/auto_mappr/issues
screenshots:
Expand Down
25 changes: 25 additions & 0 deletions packages/auto_mappr/test/integration/fixture/map.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ import 'map.auto_mappr.dart';
MapType<ComplexComplexNullableKeyDto, ComplexComplex>(),
MapType<ComplexComplexNullableValueDto, ComplexComplex>(),
MapType<ComplexComplexNullableBothDto, ComplexComplex>(),
// nullable and non nullable
MapType<NullableMap, NullableMap>(),
MapType<NullableMap, NonNullableMap>(),
MapType<NonNullableMap, NullableMap>(),
MapType<NonNullableMap, NonNullableMap>(),
])
class Mappr extends $Mappr {
const Mappr();
Expand Down Expand Up @@ -194,3 +199,23 @@ class ComplexComplexNullableBothDto extends Equatable {

const ComplexComplexNullableBothDto(this.value);
}

// nullable and non nullable

class NullableMap extends Equatable {
final Map<String, Object?>? data;

@override
List<Object?> get props => [data];

const NullableMap({this.data});
}

class NonNullableMap extends Equatable {
final Map<String, Object?> data;

@override
List<Object?> get props => [data];

const NonNullableMap({required this.data});
}
44 changes: 44 additions & 0 deletions packages/auto_mappr/test/integration/map_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -196,4 +196,48 @@ void main() {
);
});
});

group('nullable data', () {
test('nullable to nullable - w/o data', () {
const dto = fixture.NullableMap();
final converted = mappr.convert<fixture.NullableMap, fixture.NullableMap>(dto);

expect(converted, equals(const fixture.NullableMap()));
});

test('nullable to nullable - w/ data', () {
const dto = fixture.NullableMap(data: {'Alpha': 111});
final converted = mappr.convert<fixture.NullableMap, fixture.NullableMap>(dto);

expect(converted, equals(const fixture.NullableMap(data: {'Alpha': 111})));
});

test('nullable to non nullable - w/o data', () {
const dto = fixture.NullableMap();
final converted = mappr.convert<fixture.NullableMap, fixture.NonNullableMap>(dto);

expect(converted, equals(const fixture.NonNullableMap(data: {})));
});

test('nullable to non nullable - w/ data', () {
const dto = fixture.NullableMap(data: {'Alpha': 111});
final converted = mappr.convert<fixture.NullableMap, fixture.NonNullableMap>(dto);

expect(converted, equals(const fixture.NonNullableMap(data: {'Alpha': 111})));
});

test('non nullable to nullable', () {
const dto = fixture.NonNullableMap(data: {'Beta': 222});
final converted = mappr.convert<fixture.NonNullableMap, fixture.NullableMap>(dto);

expect(converted, equals(const fixture.NullableMap(data: {'Beta': 222})));
});

test('non nullable to nullable', () {
const dto = fixture.NonNullableMap(data: {'Gama': 333});
final converted = mappr.convert<fixture.NonNullableMap, fixture.NonNullableMap>(dto);

expect(converted, equals(const fixture.NonNullableMap(data: {'Gama': 333})));
});
});
}

0 comments on commit 591b273

Please sign in to comment.