fix: auth token handling, add tests

- Read bearer token from set-auth-token header
- Add mounted checks to prevent setState after dispose
- Add mocktail for testing
- Add widget tests for login, clients, events screens
- Add unit tests for auth provider, API client
- 110 tests passing
This commit is contained in:
2026-01-27 22:12:33 +00:00
parent ce6e7598dd
commit 517b25468c
12 changed files with 1125 additions and 109 deletions

View File

@@ -41,9 +41,11 @@ class _LoginScreenState extends ConsumerState<LoginScreen> {
context.go('/');
}
} catch (e) {
setState(() {
_error = 'Invalid email or password';
});
if (mounted) {
setState(() {
_error = 'Invalid email or password';
});
}
} finally {
if (mounted) {
setState(() {

View File

@@ -46,9 +46,11 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
context.go('/');
}
} catch (e) {
setState(() {
_error = 'Registration failed. Please try again.';
});
if (mounted) {
setState(() {
_error = 'Registration failed. Please try again.';
});
}
} finally {
if (mounted) {
setState(() {

View File

@@ -51,6 +51,13 @@ class ApiClient {
'password': password,
'name': name,
});
// Store session token from header (BetterAuth auto-signs in after signup)
final authToken = response.headers.value('set-auth-token');
if (authToken != null) {
await _storage.write(key: 'session_token', value: authToken);
}
return response.data;
}
@@ -63,9 +70,10 @@ class ApiClient {
'password': password,
});
// Store session token
if (response.data['token'] != null) {
await _storage.write(key: 'session_token', value: response.data['token']);
// Store session token from header (BetterAuth bearer plugin)
final authToken = response.headers.value('set-auth-token');
if (authToken != null) {
await _storage.write(key: 'session_token', value: authToken);
}
return response.data;