new favourites feature
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:myapp/models/home_filter_widget.dart';
|
||||
import 'package:myapp/models/transaction_meta.dart';
|
||||
import 'package:myapp/widgets/label_filter_dialog.dart';
|
||||
|
||||
void main() {
|
||||
test('HomeFilterWidget JSON round-trips', () {
|
||||
final widget = HomeFilterWidget.fromFilter(
|
||||
name: 'Groceries out',
|
||||
filter: const TransactionFilterSelection(
|
||||
labelIds: {'groceries'},
|
||||
flow: TxFlowFilter.expense,
|
||||
monthOnly: true,
|
||||
),
|
||||
);
|
||||
|
||||
final restored = HomeFilterWidget.fromJson(widget.toJson());
|
||||
expect(restored.name, 'Groceries out');
|
||||
expect(restored.flow, TxFlowFilter.expense);
|
||||
expect(restored.monthOnly, isTrue);
|
||||
expect(restored.labelIds, ['groceries']);
|
||||
expect(restored.showAmountOut, isTrue);
|
||||
expect(restored.showAmountIn, isFalse);
|
||||
expect(restored.showCount, isTrue);
|
||||
});
|
||||
|
||||
test('mergeHomeFilterWidgets unions by id with local wins', () {
|
||||
const local = HomeFilterWidget(
|
||||
id: 'hw_1',
|
||||
name: 'Local',
|
||||
display: true,
|
||||
showAmountIn: false,
|
||||
);
|
||||
const remote = HomeFilterWidget(
|
||||
id: 'hw_1',
|
||||
name: 'Remote',
|
||||
display: false,
|
||||
);
|
||||
const remoteOnly = HomeFilterWidget(
|
||||
id: 'hw_2',
|
||||
name: 'Other',
|
||||
sortOrder: 1,
|
||||
);
|
||||
|
||||
final merged = mergeHomeFilterWidgets([local], [remote, remoteOnly]);
|
||||
expect(merged.length, 2);
|
||||
expect(merged.firstWhere((w) => w.id == 'hw_1').name, 'Local');
|
||||
expect(merged.firstWhere((w) => w.id == 'hw_1').display, isTrue);
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:myapp/models/overview_favourite.dart';
|
||||
import 'package:myapp/models/transaction_meta.dart';
|
||||
import 'package:myapp/services/pb_sync_service.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,
|
||||
);
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
test('mergeOverviewFavourites unions by id with local wins', () {
|
||||
const local = OverviewFavourite(
|
||||
id: 'fav_1',
|
||||
name: 'Local name',
|
||||
display: true,
|
||||
);
|
||||
const remoteOnly = OverviewFavourite(
|
||||
id: 'fav_2',
|
||||
name: 'Remote only',
|
||||
display: false,
|
||||
metric: OverviewMetricMode.labels,
|
||||
);
|
||||
const remoteConflict = OverviewFavourite(
|
||||
id: 'fav_1',
|
||||
name: 'Remote name',
|
||||
display: false,
|
||||
);
|
||||
|
||||
final merged = mergeOverviewFavourites(
|
||||
[local],
|
||||
[remoteConflict, remoteOnly],
|
||||
);
|
||||
|
||||
expect(merged.length, 2);
|
||||
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');
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user