// Author: fruit.com.cn import 'dart:convert'; import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart'; import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart'; import 'package:fruitshorts/core/data/models/auth_session.dart'; import 'package:fruitshorts/core/data/remote/api_client.dart'; import 'package:fruitshorts/core/data/remote/auth_api.dart'; import 'package:fruitshorts/core/data/services/auth_controller.dart'; import 'package:fruitshorts/core/data/services/auth_session_store.dart'; import '../support/fake_http_adapter.dart'; void main() { test('should_update_profile_summary_and_keep_tokens_when_applied', () async { SharedPreferencesAsyncPlatform.instance = InMemorySharedPreferencesAsync.empty(); final adapter = FakeHttpAdapter( (_) async => FakeHttpResponse( jsonEncode({ 'code': 0, 'message': 'ok', 'data': { 'accessToken': 'access-1', 'refreshToken': 'refresh-1', 'expiresIn': 7200, 'user': {'uid': 'U-OLD', 'nickname': 'Old', 'avatarUrl': 'old.png'}, }, }), ), ); late AuthController auth; final client = ApiClient( baseUrl: 'http://127.0.0.1:8081', adapter: adapter, accessTokenReader: () => auth.accessToken, tokenRefresher: () => auth.refresh(), ); auth = AuthController(AuthApi(client), AuthSessionStore()); await auth.register(email: 'a@b.com', password: 'abcd1234'); await auth.applyProfile( const AuthUser( uid: 'U-K19', nickname: 'Nadia', avatarUrl: 'avatar-k19.png', ), ); expect(auth.accessToken, 'access-1'); expect(auth.user?.uid, 'U-K19'); expect(auth.user?.nickname, 'Nadia'); expect(auth.user?.avatarUrl, 'avatar-k19.png'); final saved = await AuthSessionStore().read(); expect(saved?.refreshToken, 'refresh-1'); expect(saved?.user.nickname, 'Nadia'); }); }