- TatuPalette.scheme aceita softenPrimary e passa a usar a seed como primary, onPrimary por contraste e surfaceTint, em vez da paleta tonal do Material 3 - nova opcao AppSettings.softenThemeColor (default false, ou seja cor exacta) - interruptor 'Suavizar cor do tema' em Configuracoes > Aparencia, com l10n en/pt - a opcao e sincronizada via account data (soften_theme_color) e mantida localmente como fallback, tal como a cor do tema - setApplicationAccountColor e updateApplicationAccountConfig preservam o novo campo - um unico sync de account data actualiza cor e opcao - testes de serializacao e round-trip para o novo campo
115 lines
3.6 KiB
Dart
115 lines
3.6 KiB
Dart
// SPDX-FileCopyrightText: 2026 TatuChat
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:tatchat/utils/account_config.dart';
|
|
|
|
void main() {
|
|
group('ApplicationAccountConfig', () {
|
|
test('Parses primary color from account data', () {
|
|
final config = ApplicationAccountConfig.fromJson({
|
|
'primary_color': 0xFF6750A4,
|
|
});
|
|
expect(config.primaryColor, 0xFF6750A4);
|
|
});
|
|
|
|
test('Ignores primary color of unexpected type', () {
|
|
expect(
|
|
ApplicationAccountConfig.fromJson({
|
|
'primary_color': '4286369748',
|
|
}).primaryColor,
|
|
isNull,
|
|
);
|
|
expect(
|
|
ApplicationAccountConfig.fromJson({'primary_color': 1.5}).primaryColor,
|
|
isNull,
|
|
);
|
|
});
|
|
|
|
test('Defaults primary color to null when absent', () {
|
|
expect(ApplicationAccountConfig.fromJson({}).primaryColor, isNull);
|
|
});
|
|
|
|
test('Serializes primary color', () {
|
|
const config = ApplicationAccountConfig(primaryColor: 0xFF00D084);
|
|
expect(config.toJson()['primary_color'], 0xFF00D084);
|
|
});
|
|
|
|
test('Serializes missing primary color as null', () {
|
|
const config = ApplicationAccountConfig(wallpaperOpacity: 0.5);
|
|
expect(config.toJson()['primary_color'], isNull);
|
|
});
|
|
|
|
test('Round trips through json', () {
|
|
final config = ApplicationAccountConfig(
|
|
wallpaperUrl: Uri.parse('mxc://example.invalid/wallpaper'),
|
|
wallpaperOpacity: 0.3,
|
|
wallpaperBlur: 4,
|
|
primaryColor: 0xFF6750A4,
|
|
softenThemeColor: true,
|
|
);
|
|
final parsed = ApplicationAccountConfig.fromJson(config.toJson());
|
|
expect(parsed.wallpaperUrl, config.wallpaperUrl);
|
|
expect(parsed.wallpaperOpacity, config.wallpaperOpacity);
|
|
expect(parsed.wallpaperBlur, config.wallpaperBlur);
|
|
expect(parsed.primaryColor, config.primaryColor);
|
|
expect(parsed.softenThemeColor, config.softenThemeColor);
|
|
});
|
|
|
|
test('Keeps existing wallpaper defaults when parsing color only', () {
|
|
final config = ApplicationAccountConfig.fromJson({
|
|
'primary_color': 0xFF6750A4,
|
|
});
|
|
expect(config.wallpaperUrl, isNull);
|
|
expect(config.wallpaperOpacity, 1);
|
|
expect(config.wallpaperBlur, isNull);
|
|
});
|
|
|
|
test('Parses soften theme color from account data', () {
|
|
expect(
|
|
ApplicationAccountConfig.fromJson({
|
|
'soften_theme_color': true,
|
|
}).softenThemeColor,
|
|
isTrue,
|
|
);
|
|
expect(
|
|
ApplicationAccountConfig.fromJson({
|
|
'soften_theme_color': false,
|
|
}).softenThemeColor,
|
|
isFalse,
|
|
);
|
|
});
|
|
|
|
test('Ignores soften theme color of unexpected type', () {
|
|
expect(
|
|
ApplicationAccountConfig.fromJson({
|
|
'soften_theme_color': 'yes',
|
|
}).softenThemeColor,
|
|
isNull,
|
|
);
|
|
});
|
|
|
|
test('Defaults soften theme color to null when absent', () {
|
|
expect(ApplicationAccountConfig.fromJson({}).softenThemeColor, isNull);
|
|
});
|
|
|
|
test('Serializes soften theme color', () {
|
|
const config = ApplicationAccountConfig(softenThemeColor: true);
|
|
expect(config.toJson()['soften_theme_color'], true);
|
|
});
|
|
|
|
test('Serializes missing soften theme color as null', () {
|
|
const config = ApplicationAccountConfig(primaryColor: 0xFF00D084);
|
|
expect(config.toJson()['soften_theme_color'], isNull);
|
|
});
|
|
|
|
test('Round trips soften theme color through json', () {
|
|
final parsed = ApplicationAccountConfig.fromJson(
|
|
const ApplicationAccountConfig(softenThemeColor: true).toJson(),
|
|
);
|
|
expect(parsed.softenThemeColor, isTrue);
|
|
});
|
|
});
|
|
}
|