81 lines
2.4 KiB
Dart
81 lines
2.4 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:myapp/models/overview_favourite.dart';
|
|
import 'package:myapp/models/transaction_meta.dart';
|
|
import 'package:myapp/widgets/label_filter_dialog.dart';
|
|
|
|
void main() {
|
|
test('OverviewFavourite JSON round-trips', () {
|
|
const fav = OverviewFavourite(
|
|
id: 'fav_1',
|
|
name: 'Groceries',
|
|
display: true,
|
|
metric: OverviewMetricMode.labels,
|
|
period: OverviewPeriodMode.monthly,
|
|
labelIds: ['groceries', 'custom_ah'],
|
|
flow: TxFlowFilter.expense,
|
|
barStyle: LabelChartBarStyle.stacked,
|
|
invertExpensePerspective: false,
|
|
updatedAt: 100,
|
|
deleted: false,
|
|
);
|
|
|
|
final restored = OverviewFavourite.fromJson(fav.toJson());
|
|
expect(restored.id, fav.id);
|
|
expect(restored.name, fav.name);
|
|
expect(restored.display, isTrue);
|
|
expect(restored.metric, OverviewMetricMode.labels);
|
|
expect(restored.period, OverviewPeriodMode.monthly);
|
|
expect(restored.labelIds, ['groceries', 'custom_ah']);
|
|
expect(restored.flow, TxFlowFilter.expense);
|
|
expect(restored.barStyle, LabelChartBarStyle.stacked);
|
|
expect(restored.updatedAt, 100);
|
|
expect(restored.deleted, isFalse);
|
|
});
|
|
|
|
test('mergeOverviewFavourites unions by id with last-write-wins', () {
|
|
const local = OverviewFavourite(
|
|
id: 'fav_1',
|
|
name: 'Local name',
|
|
display: true,
|
|
updatedAt: 200,
|
|
);
|
|
const remoteOnly = OverviewFavourite(
|
|
id: 'fav_2',
|
|
name: 'Remote only',
|
|
display: false,
|
|
metric: OverviewMetricMode.labels,
|
|
updatedAt: 50,
|
|
);
|
|
const remoteConflictOlder = OverviewFavourite(
|
|
id: 'fav_1',
|
|
name: 'Remote name',
|
|
display: false,
|
|
updatedAt: 100,
|
|
);
|
|
const remoteConflictNewer = OverviewFavourite(
|
|
id: 'fav_3',
|
|
name: 'Remote newer',
|
|
display: true,
|
|
updatedAt: 300,
|
|
);
|
|
const localOlder = OverviewFavourite(
|
|
id: 'fav_3',
|
|
name: 'Local older',
|
|
display: false,
|
|
updatedAt: 10,
|
|
);
|
|
|
|
final merged = mergeOverviewFavourites(
|
|
[local, localOlder],
|
|
[remoteConflictOlder, remoteOnly, remoteConflictNewer],
|
|
);
|
|
|
|
expect(merged.length, 3);
|
|
final byId = {for (final f in merged) f.id: f};
|
|
expect(byId['fav_1']!.name, 'Local name');
|
|
expect(byId['fav_1']!.display, isTrue);
|
|
expect(byId['fav_2']!.name, 'Remote only');
|
|
expect(byId['fav_3']!.name, 'Remote newer');
|
|
});
|
|
}
|