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
68 lines
2.2 KiB
Dart
68 lines
2.2 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,
|
|
);
|
|
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);
|
|
});
|
|
});
|
|
}
|