feat: sincronizar cor do tema via account data da conta Matrix
A cor escolhida no Appearance passa a ser guardada em im.fluffychat.account_config (primary_color), em vez de apenas nas preferencias locais do dispositivo. - ApplicationAccountConfig ganha primaryColor, preservado em updateApplicationAccountConfig e no novo setApplicationAccountColor - ThemeController restaura a cor da conta activa, aguarda accountDataLoading e reage a alteracoes remotas via onSync - A cor final e derivada de _accountPrimaryColor ?? _localPrimaryColor, evitando corrida entre as preferencias locais e o sync - Matrix notifica a troca de conta activa em initMatrix, setActiveClient e logout, corrigindo o indice do cliente activo - Apagar o wallpaper preserva a cor; testes de serializacao do modelo
This commit is contained in:
67
test/account_config_test.dart
Normal file
67
test/account_config_test.dart
Normal file
@@ -0,0 +1,67 @@
|
||||
// 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,
|
||||
);
|
||||
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);
|
||||
});
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user