89 lines
3.4 KiB
Dart
89 lines
3.4 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:hesabix_ui/widgets/data_table/helpers/column_settings_service.dart';
|
|
|
|
void main() {
|
|
group('ColumnSettingsService', () {
|
|
test('should create default settings from column keys', () {
|
|
final columnKeys = ['id', 'name', 'email', 'createdAt'];
|
|
final settings = ColumnSettingsService.getDefaultSettings(columnKeys);
|
|
|
|
expect(settings.visibleColumns, equals(columnKeys));
|
|
expect(settings.columnOrder, equals(columnKeys));
|
|
expect(settings.columnWidths, isEmpty);
|
|
});
|
|
|
|
test('should merge user settings with defaults correctly', () {
|
|
final defaultKeys = ['id', 'name', 'email', 'createdAt', 'updatedAt'];
|
|
final userSettings = ColumnSettings(
|
|
visibleColumns: ['id', 'name', 'email'],
|
|
columnOrder: ['name', 'id', 'email'],
|
|
columnWidths: {'name': 200.0},
|
|
);
|
|
|
|
final merged = ColumnSettingsService.mergeWithDefaults(userSettings, defaultKeys);
|
|
|
|
expect(merged.visibleColumns, equals(['id', 'name', 'email']));
|
|
expect(merged.columnOrder, equals(['name', 'id', 'email']));
|
|
expect(merged.columnWidths, equals({'name': 200.0}));
|
|
});
|
|
|
|
test('should handle null user settings', () {
|
|
final defaultKeys = ['id', 'name', 'email'];
|
|
final merged = ColumnSettingsService.mergeWithDefaults(null, defaultKeys);
|
|
|
|
expect(merged.visibleColumns, equals(defaultKeys));
|
|
expect(merged.columnOrder, equals(defaultKeys));
|
|
expect(merged.columnWidths, isEmpty);
|
|
});
|
|
|
|
test('should filter out invalid columns from user settings', () {
|
|
final defaultKeys = ['id', 'name', 'email'];
|
|
final userSettings = ColumnSettings(
|
|
visibleColumns: ['id', 'name', 'invalidColumn', 'email'],
|
|
columnOrder: ['name', 'invalidColumn', 'id', 'email'],
|
|
columnWidths: {'name': 200.0, 'invalidColumn': 150.0},
|
|
);
|
|
|
|
final merged = ColumnSettingsService.mergeWithDefaults(userSettings, defaultKeys);
|
|
|
|
expect(merged.visibleColumns, equals(['id', 'name', 'email']));
|
|
expect(merged.columnOrder, equals(['name', 'id', 'email']));
|
|
expect(merged.columnWidths, equals({'name': 200.0}));
|
|
});
|
|
});
|
|
|
|
group('ColumnSettings', () {
|
|
test('should serialize and deserialize correctly', () {
|
|
final original = ColumnSettings(
|
|
visibleColumns: ['id', 'name', 'email'],
|
|
columnOrder: ['name', 'id', 'email'],
|
|
columnWidths: {'name': 200.0, 'email': 150.0},
|
|
);
|
|
|
|
final json = original.toJson();
|
|
final restored = ColumnSettings.fromJson(json);
|
|
|
|
expect(restored.visibleColumns, equals(original.visibleColumns));
|
|
expect(restored.columnOrder, equals(original.columnOrder));
|
|
expect(restored.columnWidths, equals(original.columnWidths));
|
|
});
|
|
|
|
test('should copy with new values correctly', () {
|
|
final original = ColumnSettings(
|
|
visibleColumns: ['id', 'name'],
|
|
columnOrder: ['name', 'id'],
|
|
columnWidths: {'name': 200.0},
|
|
);
|
|
|
|
final copied = original.copyWith(
|
|
visibleColumns: ['id', 'name', 'email'],
|
|
columnWidths: {'name': 250.0, 'email': 150.0},
|
|
);
|
|
|
|
expect(copied.visibleColumns, equals(['id', 'name', 'email']));
|
|
expect(copied.columnOrder, equals(['name', 'id'])); // unchanged
|
|
expect(copied.columnWidths, equals({'name': 250.0, 'email': 150.0}));
|
|
});
|
|
});
|
|
}
|